openapi: 3.0.0
info:
  title: Descrizione delle API Rest di PRONOTE Campus
  description: Descrizione OpenAPI delle API Rest di PRONOTE Campus
  version: 1.0.0
servers:
  - url: 'http://localhost/hpsw/api/v1/'
tags:
  - name: Absences (Assenze)
    description: API relative alle assenze degli studenti
  - name: Alternances (Apprendistato)
    description: API relative agli apprendistati
  - name: Appariteurs (Addetti Aule)
    description: API relative agli addetti aule
  - name: Baccalaureats (Diplomi di maturità)
    description: API relative ai diplomi di maturità
  - name: Baccalaureat_specialites (Indirizzi dei diplomi di maturità)
    description: API relative agli indirizzi di maturità
  - name: Calendriers_notation (Calendari di valutazione)
    description: API relative ai calendari di valutazione
  - name: Contacts (Contatti)
    description: API relative ai contatti
  - name: Couleurs (Colori)
    description: API relativa alla conversione dei colori
  - name: Cours (Attività)
    description: API relative alle attività
  - name: Cours_annules (Attività annullate)
    description: API relative alle attività annullate
  - name: Couts_horaires_enseignants (Costi orari dei docenti)
    description: API relative ai costi orari dei docenti
  - name: Couts_horaires_salles (Costi orari delle aule)
    description: API relative ai costi orari delle aule
  - name: Cursus (Piano di studi)
    description: API relative ai piani di studio
  - name: Decharges (Extra docenza)
    description: API relative alle extra docenze dei docenti
  - name: Departements (Dipartimenti (solo versione francese))
    description: API relative ai dipartimenti
  - name: Devoirs (Valutazioni)
    description: API relative alle valutazioni
  - name: Dispenses (Esoneri)
    description: API relative agli esoneri degli studenti
  - name: Durees (Durate)
    description: API relativa alla conversione delle durate
  - name: Enseignants (Docenti)
    description: API relative ai docenti
  - name: Entreprises (Aziende)
    description: API relative alle aziende
  - name: Etablissement_origine (Istituto di provenienza)
    description: API relative agli istituti di provenienza
  - name: Etudiants (Studenti)
    description: API relative agli studenti
  - name: Familles (Tipologie)
    description: API relative alle tipologie
  - name: Icals (Ical)
    description: API relative agli iCal
  - name: Matieres (Materie)
    description: API relative alle materie
  - name: Modules (Moduli)
    description: API relative ai moduli
  - name: Modules_notation (Moduli di valutazione)
    description: API relative ai moduli di valutazione
  - name: Motifs_absence_retard (Motivi di assenza e ritardo)
    description: API relative ai motivi di assenza e ritardo
  - name: Motifs_annulation (Motivi di annullamento)
    description: API relative ai motivi di annullamento
  - name: Motifs_decharge (Motivi di extra docenza)
    description: API relative ai motivi di extra docenza
  - name: Motifs_dispense (Motivi di esonero)
    description: API relative ai motivi di esonero
  - name: Notes (Voti)
    description: API relative ai voti
  - name: Parametres_base (Parametri della base dati)
    description: API relative ai parametri della base dati
  - name: Parents (Genitori)
    description: API relative ai genitori
  - name: Partitions (Suddivisioni)
    description: API relative alle suddivisioni
  - name: Periodes_hors_calendrier (Periodi fuori calendario)
    description: API relative ai periodi fuori calendario
  - name: Periodes_notation (Periodi di valutazione)
    description: API relative ai periodi di valutazione
  - name: Ponderations (Coefficienti)
    description: API relative ai coefficienti delle attività
  - name: Profils_utilisation (Profili di utilizzo)
    description: API relative ai profili di utilizzo
  - name: Promotions (Corsi)
    description: API relative ai corsi
  - name: Regroupements (Raggruppamenti)
    description: API relative ai raggruppamenti
  - name: Retards (Ritardi)
    description: API relative ai ritardi degli studenti
  - name: Rubriques (Specifiche)
    description: API relative alle specifiche delle tipologie
  - name: Salles (Aule)
    description: API relative alle aule e ai gruppi di aule
  - name: Semaines (Settimane)
    description: API relative alle settimane
  - name: Services_notation (Servizi di valutazione)
    description: API relative ai servizi di valutazione
  - name: Sites (Sedi)
    description: API relative alle sedi
  - name: Stages (Stage)
    description: API relative agli stage
  - name: TDOptions (Gruppi e Opzioni)
    description: API relative ai gruppi e alle opzioni
  - name: Type_dernier_diplome (Tipi di ultimo diploma)
    description: API relative ai tipi di ultimo diploma
  - name: Types (Tipi di attività)
    description: API relative ai tipi di attività
  - name: Utilisateurs (Utenti)
    description: API relative agli utenti
  - name: Version (Versione)
    description: API relativa alla versione dell'applicazione
paths:
    #### Absences ####
    /absences:
        get:
            tags:
                - Absences (Assenze)
            summary: Elenco di tutte le assenze tra due date / ore
            description: Tabella contenente i JSON delle assenze della base dati tra due date / ore
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: restituisce solo le assenze che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: restituisce solo le assenze che hanno una di queste chiavi studente
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: date_debut
                  in: query
                  description: restituisce solo gli apprendistati che hanno uno di questi docenti responsabili Se questa data / ora di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T09:00"   # ?date_debut=2024-08-06T09:00
                - name: date_fin
                  in: query
                  description: restituisce solo le assenze precedenti a questa data / ora di fine Se questa data / ora di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T19:00"   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tabella dei JSON delle assenze
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Absences'
    /absences/{cle}:
        get:
            tags:
                - Absences (Assenze)
            summary: JSON dell'assenza con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'assenza"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Absences'
              '404':    # status code
                description: "Parametro non valido"
              '405':    # status code
                description: "Diritti insufficienti"
    /absences/{cle}/heures_manquees:
        get:
            tags:
                - Absences (Assenze)
            summary: Ore perse per l'assenza su un periodo
            description: Ore perse per l'assenza con chiave {cle} in un periodo. Se non sono specificati parametri, restituisce le ore perse per l'intero periodo dell'assenza.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'assenza"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_absence:
                          type: integer
                          example: 388
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        tous_les_cours:
                          type: number
                          example: 1.16666666666667
                        cours_obligatoires:
                          type: number
                          example: 0.833333333333333
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave dell'assenza non corretta"
              '405':    # status code
                description: "Diritti insufficienti"
    /absences/ajouter:
        post:
            tags:
                - Absences (Assenze)
            summary: Aggiunge un'assenza allo studente tra due date / ore
            description: Aggiunge un'assenza allo studente tra una data / ora di inizio e una data / ora di fine, specificate come parametro. Se il motivo non è indicato, viene utilizzato quello predefinito.
            requestBody:
              description: Campi del JSON utilizzati per l'aggiunta
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 388
                      date_heure_debut:
                        type: string
                        example: "2024-08-15T08:00"
                      date_heure_fin:
                        type: string
                        example: "2024-08-15T16:45"
                      est_justifie:
                        type: boolean
                        example: true
                      motif:
                        type: string
                        example: "RDV administratif"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Absences'
              '404':    # status code
                description: "Parametro non valido: chiave dello studente non corretta"
              '405':    # status code
                description: "Diritti insufficienti"
    /absences/enlever:
        post:
            tags:
                - Absences (Assenze)
            summary: Rimuove un'assenza dello studente tra due date / ore
            description: Rimuove un'assenza dello studente tra una data / ora di inizio e una data / ora di fine, specificate come parametro.
            requestBody:
              description: Campi del JSON utilizzati per indicare la parte di assenza da rimuovere
              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: Cancellazione riuscita"
              '404':    # status code
                description: "Parametro non valido: chiave dello studente non corretta"
              '405':    # status code
                description: "Diritti insufficienti"
    #### Retards ####
    /retards:
        get:
            tags:
                - Retards (Ritardi)
            summary: Elenco di tutti i ritardi tra due date / ore
            description: Tabella contenente i JSON dei ritardi della base dati tra due date / ore
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: restituisce solo i ritardi che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: restituisce solo i ritardi che hanno una di queste chiavi studente
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: date_debut
                  in: query
                  description: restituisce solo i ritardi successivi a questa data / ora di inizio Se questa data / ora di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T09:00"   # ?date_debut=2024-08-06T09:00
                - name: date_fin
                  in: query
                  description: restituisce solo i ritardi precedenti a questa data / ora di fine Se questa data / ora di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06T19:00"   # ?date_fin=2024-08-06T19:00
            responses:
              '200':    # status code
                description: Tabella dei JSON dei ritardi
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Retards'
        post:
            tags:
                - Retards (Ritardi)
            summary: Creazione di un nuovo ritardo
            description: Crea un nuovo ritardo nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      date_heure:
                        type: string
                        example: "2024-08-16T09:00"
                      duree:
                        type: number
                        example: 0.0104166666666667
                      est_justifie:
                        type: boolean
                        example: true
                      motif:
                        type: string
                        example: "Problema di trasporti"
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Retards'
              '400':    # status code
                description: "Parametri non validi: chiave dello studente non corretta, Data o durata obbligatoria..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /retards/{cle}:
        get:
            tags:
                - Retards (Ritardi)
            summary: JSON del ritardo con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del ritardo"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Retards'
              '404':    # status code
                description: "Parametro non valido"
              '405':    # status code
                description: "Diritti insufficienti"
        delete:
            tags:
                - Retards (Ritardi)
            summary: Cancellazione di un ritardo
            description: Cancella definitivamente dalla base il ritardo con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /retards/supprimer:
        post:
            tags:
                - Retards (Ritardi)
            summary: Cancellazione di più ritardi
            description: Cancella i ritardi identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei ritardi da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Dispenses ####
    /dispenses:
        get:
            tags:
                - Dispenses (Esoneri)
            summary: Elenco di tutti gli esoneri
            description: Tabella contenente i JSON degli esoneri della base dati
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - etudiant
                      - matiere
                      - motif
                      - date_debut
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, etudiant, matiere]   # ?select=cle,etudiant,matiere
                - name: cle
                  in: query
                  description: restituisce solo gli esoneri che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: etudiant
                  in: query
                  description: restituisce solo gli esoneri che hanno una di queste chiavi studente
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [10]   # ?etudiant=10
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [10, 12, 14]   # ?etudiant=10,12,14
                - name: matiere
                  in: query
                  description: restituisce solo gli esoneri che hanno una di queste chiavi materia
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola materia richiesta
                      value: [10]   # ?matiere=10
                    multipleIds:
                      summary: Esempio con più materie richieste
                      value: [10, 12, 14]   # ?matiere=10,12,14
                - name: date_debut
                  in: query
                  description: restituisce solo gli esoneri successivi a questa data di inizio Se questa data di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: restituisce solo gli esoneri precedenti a questa data di fine Se questa data di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_fin=2024-08-06
            responses:
              '200':    # status code
                description: Tabella dei JSON degli esoneri
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Dispenses'
        post:
            tags:
                - Dispenses (Esoneri)
            summary: Creazione di un nuovo esonero
            description: Crea un nuovo esonero nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Dispenses'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Parametri non validi: chiave dello studente non corretta, Data o materia obbligatoria..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /dispenses/{cle}:
        get:
            tags:
                - Dispenses (Esoneri)
            summary: JSON dell'esonero con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'esonero"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Dispenses (Esoneri)
            summary: Aggiornamento parziale di un esonero
            description: Modifica i campi dell'esonero con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'esonero che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Dispenses'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Dispenses'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Dispenses (Esoneri)
            summary: Cancellazione di un esonero
            description: Cancella definitivamente dalla base l'esonero con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /dispenses/supprimer:
        post:
            tags:
                - Dispenses (Esoneri)
            summary: Cancellazione di più esoneri
            description: Cancella gli esoneri identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli esoneri da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Decharges ####
    /decharges:
        get:
            tags:
                - Decharges (Extra docenza)
            summary: Elenco di tutte le extra docenze
            description: Tabella contenente i JSON delle extra docenza della base dati
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - enseignant
                      - promotion
                      - motif
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, etudiant, matiere]   # ?select=cle,etudiant,matiere
                - name: cle
                  in: query
                  description: restituisce solo le extra docenze che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: enseignant
                  in: query
                  description: restituisce solo le extra docenze che hanno una di queste chiavi docente
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo docente richiesto
                      value: [10]   # ?enseignant=10
                    multipleIds:
                      summary: Esempio con più docenti richiesti
                      value: [10, 12, 14]   # ?enseignant=10,12,14
                - name: promotion
                  in: query
                  description: restituisce solo le extra docenze che hanno una di queste chiavi corso
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo corso richiesto
                      value: [10]   # ?promotion=10
                    multipleIds:
                      summary: Esempio con più corsi richiesti
                      value: [10, 12, 14]   # ?promotion=10,12,14
                - name: motif
                  in: query
                  description: restituisce solo le extra docenze che hanno uno di questi motivi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "Motif de la decharge"   # ?motif=Motif de la decharge
            responses:
              '200':    # status code
                description: Tabella dei JSON delle extra docenza
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Decharges'
        post:
            tags:
                - Decharges (Extra docenza)
            summary: Creazione di una nuova extra docenza
            description: Crea una nuova extra docenza nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Decharges'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Parametri non validi: chiave del docente o del corso non corretta..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /decharges/{cle}:
        get:
            tags:
                - Decharges (Extra docenza)
            summary: JSON dell'extra docenza con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'extra docenza"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Decharges (Extra docenza)
            summary: Aggiornamento parziale di un'extra docenza
            description: Modifica i campi dell'extra docenza con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'extra docenza che si vuole aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Decharges'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Decharges'
              '400':    # status code
                description: "Parametri non validi: Docente obbligatorio, problema di dimensione..."
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Decharges (Extra docenza)
            summary: Cancellazione di un'extra docenza
            description: Cancella definitivamente dalla base l'extra docenza con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /decharges/supprimer:
        post:
            tags:
                - Decharges (Extra docenza)
            summary: Cancellazione di più extra docenze
            description: Cancella le extra docenze identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle extra docenza da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Appariteurs ####
    /appariteurs:
        get:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Elenco di tutti gli addetti aule
            description: Tabella contenente i JSON degli addetti aule della base dati, ordinata per cognome poi per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: restituisce solo gli addetti aule che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo gli addetti aule che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Dupond, Dupont, Martin]   # ?nom=Dupond,Dupont,Martin
                - name: prenom
                  in: query
                  description: restituisce solo gli addetti aule che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Denis]   # ?prenom=Denis
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Denis, Dominique, Claude]   # ?prenom=Denis,Dominique,Claude
                - name: cas_identifiant
                  in: query
                  description: restituisce solo gli addetti aule che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo gli addetti aule che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo gli addetti aule che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON degli addetti aule
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Appariteurs'
        post:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Creazione di un nuovo addetto aule
            description: Crea un nuovo addetto aule nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_appariteurs:
                        type: boolean
                        example: true
                      salles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /appariteurs/{cle}:
        get:
            tags:
                - Appariteurs (Addetti Aule)
            summary: JSON dell'addetto aule con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'addetto aule"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Aggiornamento parziale di un addetto aule
            description: Modifica i campi dell'addetto aule con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'addetto aule che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_appariteurs:
                        type: boolean
                        example: true
                      salles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Appariteurs'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Cancellazione di un addetto aule
            description: Cancella definitivamente dalla base l'addetto aule con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /appariteurs/supprimer:
        post:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Cancellazione di più addetti aule
            description: Cancella gli addetti aule identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli addetti aule da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /appariteurs/{cle_app}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Specifiche assegnate all'addetto aule per la tipologia
            description: Specifiche assegnate all'addetto aule con chiave {cle_app} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_app
                  in: path
                  description: "chiave dell'addetto aule"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Appariteurs (Addetti Aule)
            summary: Modifica delle specifiche assegnate all'addetto aule per la tipologia
            description: Modifica le specifiche assegnate all'addetto aule con chiave {cle_app} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_app
                  in: path
                  description: "chiave dell'addetto aule"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        appariteur:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Contacts ####
    /contacts:
        get:
            tags:
                - Contacts (Contatti)
            summary: Elenco di tutti i contatti
            description: Tabella contenente i JSON dei contatti della base dati, ordinata per cognome poi per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: restituisce solo i contatti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [contact1]   # ?nom=contact1
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [contact1, contact2, contact3]   # ?nom=contact1,contact2,contact3
                - name: prenom
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [prenomContact1]   # ?prenom=prenomContact1
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [prenomContact1, prenomContact2, prenomContact3]   # ?prenom=prenomContact1,prenomContact2,prenomContact3
                - name: date_naissance
                  in: query
                  description: restituisce solo i contatti che hanno una di queste date di nascita
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola data di nascita richiesta
                      value: [2000-12-21]   # ?date_naissance=2000-12-21
                    multipleIds:
                      summary: Esempio con più date di nascita richieste
                      value: [2000-12-21, 2001-12-21, 2002-12-21]   # ?date_naissance=2000-12-21,2001-12-21,2002-12-21
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [conta1]   # ?uid_identifiant=conta1
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [conta1, conta2, conta3]   # ?uid_identifiant=conta1,conta2,conta3
                - name: cas_identifiant
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo i contatti che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON dei contatti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Contacts'
        post:
            tags:
                - Contacts (Contatti)
            summary: Creazione di un nuovo contatto
            description: Crea un nuovo contatto nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      lieu_naissance:
                        type: string
                        example: "Torino"
                      code_fiscal:
                        type: string
                        example: "154862"
                      fonction:
                        type: string
                        example: "Funzione"
                      entreprises:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      autorisation_reception_email:
                        type: boolean
                        example: true
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_fax:
                        type: string
                        example: "01010101"
                      indicatif_fax:
                        type: string
                        example: "01"
                      proprietaire:
                        type: integer
                        example: 10
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /contacts/{cle}:
        get:
            tags:
                - Contacts (Contatti)
            summary: JSON del contatto con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del contatto"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Contacts (Contatti)
            summary: Aggiornamento parziale di un contatto
            description: Modifica i campi del contatto con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del contatto che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      date_naissance:
                        type: string
                        example: "2000-02-24"
                      lieu_naissance:
                        type: string
                        example: "Torino"
                      code_fiscal:
                        type: string
                        example: "154862"
                      fonction:
                        type: string
                        example: "Funzione"
                      entreprises:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      autorisation_reception_email:
                        type: boolean
                        example: true
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_fax:
                        type: string
                        example: "01010101"
                      indicatif_fax:
                        type: string
                        example: "01"
                      proprietaire:
                        type: integer
                        example: 10
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Contacts'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: contatto inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Contacts (Contatti)
            summary: Cancellazione di un contatto
            description: Cancella definitivamente dalla base il contatto con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /contacts/supprimer:
        post:
            tags:
                - Contacts (Contatti)
            summary: Cancellazione di più contatti
            description: Cancella i contatti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei contatti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /contacts/{cle_cont}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Contacts (Contatti)
            summary: Specifiche assegnate al contatto per la tipologia
            description: Specifiche assegnate al contatto con chiave {cle_cont} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_cont
                  in: path
                  description: "chiave del contatto"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Contacts (Contatti)
            summary: Modifica delle specifiche assegnate al contatto per la tipologia
            description: Modifica le specifiche assegnate al contatto con chiave {cle_cont} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_cont
                  in: path
                  description: "chiave del contatto"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        contact:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Stages ####
    /stages:
        get:
            tags:
                - Stages (Stage)
            summary: Elenco di tutti gli stage
            description: Tabella contenente i JSON degli stage della base dati, ordinata per azienda di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - entreprise
                      - etudiant
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, entreprise, etudiant]   # ?select=cle,entreprise,etudiant
                - name: cle
                  in: query
                  description: restituisce solo gli stage che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: entreprise
                  in: query
                  description: restituisce solo gli stage che hanno una di queste aziende
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola azienda richiesta
                      value: [entreprise1]   # ?entreprise=entreprise1
                    multipleIds:
                      summary: Esempio con più aziende richieste
                      value: [entreprise1, entreprise2, entreprise3]   # ?entreprise=entreprise1,entreprise2,entreprise3
                - name: etudiant
                  in: query
                  description: restituisce solo gli stage che hanno uno di questi studenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [etudiant1]   # ?etudiant=etudiant1
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [etudiant1, etudiant2, etudiant3]   # ?etudiant=etudiant1,etudiant2,etudiant3
                - name: enseignant_tutueur
                  in: query
                  description: restituisce solo gli stage che hanno uno di questi docenti tutor
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo docente tutor richiesto
                      value: [enseignant1]   # ?enseignant_tuteur=enseignant1
                    multipleIds:
                      summary: Esempio con più docenti tutor richiesti
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tuteur=enseignant1,enseignant2,enseignant3
                - name: enseignant_responsable
                  in: query
                  description: restituisce solo gli stage che hanno uno di questi docenti responsabili
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo docente responsabile richiesto
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Esempio con più docenti responsabili richiesti
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant1,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tabella dei JSON degli stage
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Stages'
        post:
            tags:
                - Stages (Stage)
            summary: Creazione di un nuovo stage
            description: Crea un nuovo stage nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_stage:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "argomento dello stage"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Argomento un po' più dettagliato"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      objectifs:
                        type: string
                        example: "Ecco i vari obiettivi"
                      activites_prevues:
                        type: string
                        example: "Ecco le attività previste"
                      competences_visees:
                        type: string
                        example: "Ecco le competenze mirate"
                      modalites_concertation:
                        type: string
                        example: "Ecco le modalità di concertazione"
                      modalites_evaluation:
                        type: string
                        example: "Ecco le modalità di valutazione"
                      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: ["Ticket restaurant","Trasporto"]
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '400':    # status code
                description: "Parametri non validi: studente obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /stages/{cle}:
        get:
            tags:
                - Stages (Stage)
            summary: JSON dello stage con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello stage"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Stages (Stage)
            summary: Aggiornamento parziale di uno stage
            description: Modifica i campi dello stage con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello stage che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_stage:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "argomento dello stage"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Argomento un po' più dettagliato"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      objectifs:
                        type: string
                        example: "Ecco i vari obiettivi"
                      activites_prevues:
                        type: string
                        example: "Ecco le attività previste"
                      competences_visees:
                        type: string
                        example: "Ecco le competenze mirate"
                      modalites_concertation:
                        type: string
                        example: "Ecco le modalità di concertazione"
                      modalites_evaluation:
                        type: string
                        example: "Ecco le modalità di valutazione"
                      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: ["Ticket restaurant","Trasporto"]
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Stages'
              '400':    # status code
                description: "Parametri non validi: studente obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: stage inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Stages (Stage)
            summary: Cancellazione di uno stage
            description: Cancella definitivamente dalla base lo stage con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /stages/supprimer:
        post:
            tags:
                - Stages (Stage)
            summary: Cancellazione di più stage
            description: Cancella gli stage identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli stage da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /stages/{cle_sta}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Stages (Stage)
            summary: Specifiche assegnate allo stage per la tipologia
            description: Specifiche assegnate allo stage con chiave {cle_sta} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_sta
                  in: path
                  description: "chiave dello stage"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Stages (Stage)
            summary: Modifica delle specifiche assegnate allo stage per la tipologia
            description: Modifica le specifiche assegnate allo stage con chiave {cle_sta} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_sta
                  in: path
                  description: "chiave dello stage"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        stage:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Alternances ####
    /alternances:
        get:
            tags:
                - Alternances (Apprendistato)
            summary: Elenco di tutti gli apprendistato
            description: Tabella contenente i JSON degli apprendistati della base dati, ordinata per azienda di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - entreprise
                      - etudiant
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, entreprise, etudiant]   # ?select=cle,entreprise,etudiant
                - name: cle
                  in: query
                  description: restituisce solo gli apprendistati che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: entreprise
                  in: query
                  description: restituisce solo gli apprendistati che hanno una di queste aziende
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola azienda richiesta
                      value: [entreprise1]   # ?entreprise=entreprise1
                    multipleIds:
                      summary: Esempio con più aziende richieste
                      value: [entreprise1, entreprise2, entreprise3]   # ?entreprise=entreprise1,entreprise2,entreprise3
                - name: etudiant
                  in: query
                  description: restituisce solo gli apprendistati che hanno uno di questi studenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [etudiant1]   # ?etudiant=etudiant1
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [etudiant1, etudiant2, etudiant3]   # ?etudiant=etudiant1,etudiant2,etudiant3
                - name: enseignant_tutueur
                  in: query
                  description: restituisce solo gli apprendistati che hanno uno di questi docenti tutor
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo docente tutor richiesto
                      value: [enseignant1]   # ?enseignant_tuteur=enseignant1
                    multipleIds:
                      summary: Esempio con più docenti tutor richiesti
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_tuteur=enseignant1,enseignant2,enseignant3
                - name: enseignant_responsable
                  in: query
                  description: restituisce solo gli apprendistati che hanno uno di questi docenti responsabili
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo docente responsabile richiesto
                      value: [enseignant1]   # ?enseignant_responsable=enseignant1
                    multipleIds:
                      summary: Esempio con più docenti responsabili richiesti
                      value: [enseignant1, enseignant2, enseignant3]   # ?enseignant_responsable=enseignant1,enseignant2,enseignant3
            responses:
              '200':    # status code
                description: Tabella dei JSON degli apprendistato
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Alternances'
        post:
            tags:
                - Alternances (Apprendistato)
            summary: Creazione di un nuovo apprendistato
            description: Crea un nuovo apprendistato nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "argomento dell'apprendistato"
                      type_contrat:
                        type: string
                        example: "Apprendistato"
                      dates_contrat:
                        type: object
                        properties:
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Argomento un po' più dettagliato"
                      objectifs:
                        type: string
                        example: "Ecco i vari obiettivi"
                      activites_prevues:
                        type: string
                        example: "Ecco le attività previste"
                      competences_visees:
                        type: string
                        example: "Ecco le competenze mirate"
                      modalites_concertation:
                        type: string
                        example: "Ecco le modalità di concertazione"
                      modalites_evaluation:
                        type: string
                        example: "Ecco le modalità di valutazione"
                      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: ["Ticket restaurant","Trasporto"]
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '400':    # status code
                description: "Parametri non validi: studente obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /alternances/{cle}:
        get:
            tags:
                - Alternances (Apprendistato)
            summary: JSON dell'apprendistato con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'apprendistato"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Alternances (Apprendistato)
            summary: Aggiornamento parziale di un apprendistato
            description: Modifica i campi dell'apprendistato con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'apprendistato che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      etudiant:
                        type: integer
                        example: 12
                      dates:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-14"
                            au:
                              type: string
                              example: "2000-02-27"
                      formulaire_etudiant:
                        type: object
                        properties:
                          visibilite:
                            type: boolean
                            example: true
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      duree_saisie:
                        type: number
                        example: 10.0
                      duree_calculee:
                        type: number
                        example: 12.0
                      entreprise:
                        type: integer
                        example: 14
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sujet:
                        type: string
                        example: "argomento dell'apprendistato"
                      type_contrat:
                        type: string
                        example: "Apprendistato"
                      dates_contrat:
                        type: object
                        properties:
                          du:
                            type: string
                            example: "2000-02-14"
                          au:
                            type: string
                            example: "2000-02-27"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      enseignant_tuteur:
                        type: integer
                        example: 12
                      enseignant_responsable:
                        type: integer
                        example: 14
                      sujet_detaille:
                        type: string
                        example: "Argomento un po' più dettagliato"
                      objectifs:
                        type: string
                        example: "Ecco i vari obiettivi"
                      activites_prevues:
                        type: string
                        example: "Ecco le attività previste"
                      competences_visees:
                        type: string
                        example: "Ecco le competenze mirate"
                      modalites_concertation:
                        type: string
                        example: "Ecco le modalità di concertazione"
                      modalites_evaluation:
                        type: string
                        example: "Ecco le modalità di valutazione"
                      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: ["Ticket restaurant","Trasporto"]
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Alternances'
              '400':    # status code
                description: "Parametri non validi: studente obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: apprendistato inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Alternances (Apprendistato)
            summary: Cancellazione di un apprendistato
            description: Cancella definitivamente dalla base l'apprendistato con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /alternances/supprimer:
        post:
            tags:
                - Alternances (Apprendistato)
            summary: Cancellazione di più apprendistati
            description: Cancella gli apprendistati identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli apprendistato da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /alternances/{cle_alt}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Alternances (Apprendistato)
            summary: Specifiche assegnate all'apprendistato per la tipologia
            description: Specifiche assegnate all'apprendistato con chiave {cle_alt} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_alt
                  in: path
                  description: "chiave dell'apprendistato"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Alternances (Apprendistato)
            summary: Modifica delle specifiche assegnate all'apprendistato per la tipologia
            description: Modifica le specifiche assegnate all'apprendistato con chiave {cle_alt} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_alt
                  in: path
                  description: "chiave dell'apprendistato"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        alternance:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Cours ####
    /cours:
        get:
            tags:
                - Cours (Attività)
            summary: Elenco di tutte le attività
            description: Tabella contenente i JSON delle attività della base dati, ordinata per chiave di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - type
                      - place
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, type, place]   # ?select=cle,type,place
                - name: cle
                  in: query
                  description: restituisce solo le attività che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: parente
                  in: query
                  description: restituisce solo le attività aventi una di queste relazioni
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: est_non_place
                  in: query
                  description: restituisce solo le attività piazzate o non piazzate
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: statut_place
                  in: query
                  description: restituisce solo le attività che hanno uno di questi statuti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: mobilite_seances
                  in: query
                  description: restituisce solo le attività che hanno una di queste proprietà di piazzamento
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: matiere
                  in: query
                  description: restituisce solo le attività che hanno una di queste chiavi materia
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: type
                  in: query
                  description: restituisce solo le attività che hanno uno di questi tipi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: reference
                  in: query
                  description: restituisce solo le attività che hanno uno di questi numeri di riferimento (indicare solo il numero, non l'intera stringa)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: date_debut
                  in: query
                  description: restituisce solo le attività che hanno luogo dopo questa data di inizio Se questa data di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: restituisce solo le attività che hanno luogo prima di questa data di fine Se questa data di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: Tabella dei JSON delle attività
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cours'
        post:
            tags:
                - Cours (Attività)
            summary: Creazione di una nuova attività
            description: Crea una nuova attività nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cours'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '400':    # status code
                description: "Parametri non validi: matière, durée, statut_place, mobilite_seances domaine o domaine_potentiel obbligatori"
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /cours/{cle}:
        get:
            tags:
                - Cours (Attività)
            summary: JSON dell'attività con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Cours (Attività)
            summary: Aggiornamento parziale di un'attività
            description: Modifica i campi dell'attività con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cours'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: attività inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Cours (Attività)
            summary: Cancellazione di un'attività
            description: Cancella definitivamente dalla base l'attività con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cours/supprimer:
        post:
            tags:
                - Cours (Attività)
            summary: Cancellazione di più attività
            description: Cancella le attività identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle attività da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cours/{cle}/cout:
        get:
            tags:
                - Cours (Attività)
            summary: Costo di un'attività su un periodo
            description: Costo dell'attività con chiave {cle} su un periodo (costo del docente + costo dell'aula) Se non sono specificati parametri, restituisce il costo annuale, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
    /cours/cout:
        get:
            tags:
                - Cours (Attività)
            summary: Costi delle attività su un periodo
            description: Costi delle attività su un periodo. Se non sono specificati parametri, restituisce il costo annuale di tutte le attività, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle attività"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
    /cours/{cle}/site:
        get:
            tags:
                - Cours (Attività)
            summary: Sede assegnata a un'attività su un periodo
            description: Sede assegnata all'attività con chiave {cle} su un periodo. Se non sono specificati parametri, restituisce la sede sull'anno intero.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: string
                          example: "Principale"
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Cours (Attività)
            summary: Modifica della sede di un'attività su un periodo
            description: Modifica la sede dell'attività con chiave {cle} con il nome della sede specificata come parametro. Considera l'intero anno se non viene specificato alcun periodo come parametro.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: site
                  in: query
                  description: "nome della sede"
                  required: true
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: string
                          example: "Principale"
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Parametro non valido: attività inesistente"
              '500':    # status code
                description: sede inesistente
    /cours/site:
        get:
            tags:
                - Cours (Attività)
            summary: Sede delle attività su un periodo
            description: Sede delle attività su un periodo. Se non sono specificati parametri, restituisce la sede di tutte le attività sull'anno intero.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle attività"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        site:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              site:
                                type: string
                                example: "Principal"
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
    /cours/{cle}/contenus:
        get:
            tags:
                - Cours (Attività)
            summary: Caratteristiche del contenuto di un'attività su una settimana
            description: Caratteristiche del contenuto dell'attività con chiave {cle} su una settimana
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numero della settimana"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        contenus:
                          type: array
                          items:
                            type: object
                            properties:
                              titre:
                                type: string
                              description:
                                type: string
                              delai_publication:
                                type: string
                              sites_internet:
                                type: array
                                items:
                                  type: string
                              lien_visio:
                                type: object
                                properties:
                                  libelle:
                                    type: string
                                  url:
                                    type: string
                                  commentaire:
                                    type: string
                              cours:
                                type: integer
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: attività inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Cours (Attività)
            summary: Modifica del titolo, della descrizione, dei siti web e/o del periodo di pubblicazione del contenuto di un'attività per una settimana
            description: Modifica il titolo, la descrizione, i siti internet e/o il periodo di pubblicazione del contenuto per l'attività con chiave {cle} per la settimana specificata come parametro. Crea il contenuto se l'attività non ne possiede alcuno. Restituisce un'eccezione se l'attività ha già più contenuti.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numero della settimana"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per la creazione / modifica
              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 descrizione può essere una stringa HTML
                      sites_internet:
                        type: array
                        items:
                          type: string
                          example: "www.index-education.fr"
                        description: URL dei siti internet del contenuto di questa attività per questa lezione. Se l'URL non esiste, verrà creato nella base dati.
                      delai_publication:
                        type: string
                        example: "Immédiatement"
                        description: ADelaiPublication corrisponde al numero di giorni prima dell'inizio della lezione (per una pubblicazione personalizzata) oppure a un valore particolare fornito dalle funzioni PublieImmediatement, PublieDesDebutSeance o PublieDesFinSeance
                      lien_visio:
                        type: object
                        properties:
                          libelle:
                            type: string
                          url:
                            type: string
                            example: 'www.visio.fr'
                          commentaire:
                            type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        contenus:
                          type: array
                          items:
                            type: object
                            properties:
                              titre:
                                type: string
                              description:
                                type: string
                              delai_publication:
                                type: string
                              sites_internet:
                                type: array
                                items:
                                  type: string
                              lien_visio:
                                type: object
                                properties:
                                  libelle:
                                    type: string
                                  url:
                                    type: string
                                  commentaire:
                                    type: string
                              cours:
                                type: integer
              '400':    # status code
                description: "Parametro non valido: Settimana obbligatoria o formato durata non valido"
              '403':    # status code
                description: "Parametro non valido: lezione inesistente per questa settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile: Più contenuti su questa lezione o modifica di uno dei campi impossibile"
    /cours/{cle}/appel_termine:
        get:
            tags:
                - Cours (Attività)
            summary: Booleano che indica se l'appello dell'attività su una settimana è terminato
            description: Booleano che indica se l'appello dell'attività con chiave {cle} è terminato per la settimana {semaine}
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numero della settimana"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        cours:
                          type: integer
                          example: 10
                        appel_termine:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '403':    # status code
                description: "Parametro non valido: lezione inesistente per questa settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Cours (Attività)
            summary: Modifica del booleano che indica se l'appello di un'attività per una settimana è terminato
            description: Modifica il booleano che indica se l'appello dell'attività con chiave {cle} per la settimana specificata come parametro è terminato o meno
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: "numero della settimana"
                  required: true
                  schema:
                    type: integer
                - name: appel_termine
                  in: query
                  description: "booleano che indica se l'appello è terminato"
                  required: true
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        semaine:
                          type: integer
                          example: 1
                        cours:
                          type: integer
                          example: 10
                        appel_termine:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Parametro non valido: settimana obbligatoria"
              '403':    # status code
                description: "Parametro non valido: lezione inesistente per questa settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /cours/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours (Attività)
            summary: Dettaglio delle lezioni piazzate di un'attività
            description: Dettaglio delle lezioni piazzate dell'attività con chiave {cle}. L'attività deve essere un'attività piazzata. Se si tratta di un'attività madre, restituisce il dettaglio di tutte le sue attività figlie piazzate. Attenzione, non viene restituita alcuna indicazione sul fuso orario con jour_heure_debut.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: restituisce il dettaglio delle lezioni piazzate che hanno luogo dopo questa data / ora ('yyyy-mm-ddThh:nn') di inizio
                               Se questa data / ora di inizio non è indicata, verrà utilizzata quella di inizio della base dati.<br>
                               Se il parametro specificato è solo nel formato data 'yyyy-mm-dd', restituisce le lezioni che hanno luogo a partire dalla prima ora di tale data.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: restituisce il dettaglio delle lezioni piazzate che hanno luogo prima di questa data / ora ('yyyy-mm-ddThh:nn') di fine <br>
                               Se questa data / ora di fine non è indicata, verrà utilizzata quella di fine della base dati.<br>
                               Se il parametro specificato è solo nel formato data 'yyyy-mm-dd', restituisce le lezioni che hanno luogo fino all'ultima ora di tale data.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 12
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '400':    # status code
                description: "Parametro non valido: attività non piazzata"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /cours/detail_seances_placees:
        get:
            tags:
                - Cours (Attività)
            summary: Dettaglio delle lezioni piazzate delle attività
            description: Dettaglio delle lezioni piazzate per le attività specificate come parametro. Le attività devono essere piazzate. Per un'attività madre, restituisce il dettaglio di tutte le sue attività figlie piazzate. Se non sono specificati parametri, restituisce le lezioni di tutte le attività piazzate. Attenzione, non viene restituita alcuna indicazione sul fuso orario con jour_heure_debut.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle attività"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: date_debut
                  in: query
                  description: restituisce il dettaglio delle lezioni piazzate che hanno luogo dopo questa data / ora ('yyyy-mm-ddThh:nn') di inizio
                               Se questa data / ora di inizio non è indicata, verrà utilizzata quella di inizio della base dati.<br>
                               Se il parametro specificato è solo nel formato data 'yyyy-mm-dd', restituisce le lezioni che hanno luogo a partire dalla prima ora di tale data.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: restituisce il dettaglio delle lezioni piazzate che hanno luogo prima di questa data / ora ('yyyy-mm-ddThh:nn') di fine <br>
                               Se questa data / ora di fine non è indicata, verrà utilizzata quella di fine della base dati.<br>
                               Se il parametro specificato è solo nel formato data 'yyyy-mm-dd', restituisce le lezioni che hanno luogo fino all'ultima ora di tale data.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 12
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '400':    # status code
                description: "Parametro non valido: attività non piazzata"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /cours/{cle_cours}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Cours (Attività)
            summary: Specifiche assegnate all'attività per la tipologia
            description: Specifiche assegnate all'attività con chiave {cle_cours} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Cours (Attività)
            summary: Modifica delle specifiche assegnate all'attività per la tipologia
            description: Modifica le specifiche assegnate all'attività con chiave {cle_cours} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Cours_annules ####
    /cours_annules:
        get:
            tags:
                - Cours_annules (Attività annullate)
            summary: Elenco di tutte le attività annullate
            description: Tabella contenente i JSON delle attività annullate della base dati, ordinata per chiave di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - type
                      - matiere
                      - motif_annulation
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, type, matiere]   # ?select=cle,type,matiere
                - name: cle
                  in: query
                  description: restituisce solo le attività annullate che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: matiere
                  in: query
                  description: restituisce solo le attività annullate che hanno una di queste chiavi materia
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: type
                  in: query
                  description: restituisce solo le attività annullate che hanno uno di questi tipi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: reference
                  in: query
                  description: restituisce solo le attività annullate che hanno uno di questi numeri di riferimento (indicare solo il numero, non l'intera stringa)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                - name: date_debut
                  in: query
                  description: restituisce solo le attività annullate che hanno luogo dopo questa data di inizio Se questa data di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: restituisce solo le attività annullate che hanno luogo prima di questa data di fine Se questa data di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: enseignants
                  in: query
                  description: restituisce solo le attività annullate di questi docenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: promotions
                  in: query
                  description: restituisce solo le attività annullate di questi corsi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: tdoptions
                  in: query
                  description: restituisce solo le attività annullate di questi gruppi / opzioni
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: regroupements
                  in: query
                  description: restituisce solo le attività annullate di questi raggruppamenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: salles
                  in: query
                  description: restituisce solo le attività annullate di queste aule
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                - name: etudiants
                  in: query
                  description: restituisce solo le attività annullate di questi studenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: Tabella dei JSON delle attività annullate
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cours_annules'
        post:
            tags:
                - Cours_annules (Attività annullate)
            summary: Annullamento di un'attività nella base dati
            description: Annullamento di un'attività nella base dati tramite i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cle_cours:
                        type: integer
                        example: 388
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      motif_annulation:
                        type: string
                        example: "Annulation"
                      commentaire:
                        type: string
                        example: "commentaire"
            responses:
              '204':    # status code
                description: Successo
              '400':    # status code
                description: "Parametri non validi: Chiave dell'attività obbligatoria, attività protetta o bloccata"
              '500':    # status code
                description: Annullamento impossibile
    /cours_annules/{cle}:
        get:
            tags:
                - Cours_annules (Attività annullate)
            summary: JSON dell'attività annullata con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività annullata"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours_annules'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Cours_annules (Attività annullate)
            summary: Aggiornamento parziale di un'attività annullata
            description: Modifica i campi motif_annulation e/o commentaire dell'attività annullata con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività annullata che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      motif_annulation:
                        type: string
                        example: "Annulation"
                      commentaire:
                        type: string
                        example: "commentaire"
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cours_annules'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: attività annullata inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Cours_annules (Attività annullate)
            summary: Cancellazione di un'attività annullata
            description: Cancella definitivamente dalla base l'attività annullata con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cours_annules/supprimer:
        post:
            tags:
                - Cours_annules (Attività annullate)
            summary: Cancellazione di più attività annullate
            description: Cancella le attività annullate identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle attività annullate da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '400':    # status code
                description: "Bad request: cancellazione non riuscita"
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cours_annules/{cle}/detail_seances_placees:
        get:
            tags:
                - Cours_annules (Attività annullate)
            summary: Dettaglio delle lezioni piazzate di un'attività annullata
            description: Dettaglio delle lezioni piazzate dell'attività annullata con chiave {cle}. Attenzione, non viene restituita alcuna indicazione sul fuso orario con jour_heure_debut.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'attività annullata"
                  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: "chiave dell'attività annullata"
                          matiere:
                            type: integer
                            example: 10
                          type:
                            type: string
                            example: TD
                          duree:
                            type: number
                            example: 0.125
                          jour_heure_debut:
                            type: string
                            example: "2023-10-03T11:00"
                          ponderation_avant_apport:
                            type: integer
                            example: 1
                          ponderation_apres_apport:
                            type: integer
                            example: 1
                          enseignants:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          promotions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          tdoptions:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          regroupements:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
                          salles:
                            type: array
                            items:
                              type: integer
                            example: [10,12,14,48]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    #### Couts_horaires_enseignants ####
    /couts_horaires_enseignants:
        get:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: Elenco di tutti i costi orari dei docenti
            description: Tabella contenente i JSON dei costi orari dei docenti della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - valeur
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, valeur]   # ?select=cle,libelle,valeur
                - name: cle
                  in: query
                  description: restituisce solo i costi orari dei docenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: restituisce solo i costi orari dei docenti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [cout1]   # ?libelle=cout1
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [cout1, cout2, cout3]   # ?libelle=cout1,cout2,cout3
                - name: valeur
                  in: query
                  description: restituisce solo i costi orari dei docenti che hanno uno di questi valori
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: number
                  examples:
                    oneId:
                      summary: Esempio con un solo valore richiesto
                      value: [20.5]   # ?valeur=20.5
                    multipleIds:
                      summary: Esempio con più valori richiesti
                      value: [20.5, 40, 60]   # ?valeur=20.5,40,60
            responses:
              '200':    # status code
                description: Tabella dei JSON dei costi orari dei docenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Couts_horaires_enseignants'
        post:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: Creazione di un nuovo costo orario per i docenti
            description: Crea un nuovo costo orario per i docenti nella base dati e inizializza i campi usando i parametri passati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_enseignants'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '400':    # status code
                description: "Parametri non validi: Nome e valore obbligatori"
              '500':    # status code
                description: "Creazione impossibile"
    /couts_horaires_enseignants/{cle}:
        get:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: JSON del costo orario dei docenti con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del costo orario dei docenti"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: Aggiornamento parziale di un costo orario dei docenti
            description: Modifica i campi del costo orario dei docenti con chiave {cle} con quelli passati nel JSON nel BODY
            parameters:
                - name: cle
                  in: path
                  description: "chiave del costo orario dei docenti che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_enseignants'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_enseignants'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: Cancellazione di un costo orario di un docente
            description: Cancella definitivamente il costo orario dei docenti con chiave {cle} dalla base dati
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /couts_horaires_enseignants/supprimer:
        post:
            tags:
                - Couts_horaires_enseignants (Costi orari dei docenti)
            summary: Cancellazione di più costi orari dei docenti
            description: Cancella i costi orari dei docenti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei costi orari dei docenti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Couts_horaires_salles ####
    /couts_horaires_salles:
        get:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: Elenco di tutti i costi orari delle aule
            description: Tabella contenente i JSON dei costi orari delle aule della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - valeur
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, valeur]   # ?select=cle,libelle,valeur
                - name: cle
                  in: query
                  description: restituisce solo i costi orari delle aule che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: restituisce solo i costi orari delle aule che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [cout1]   # ?libelle=cout1
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [cout1, cout2, cout3]   # ?libelle=cout1,cout2,cout3
                - name: valeur
                  in: query
                  description: restituisce solo i costi orari delle aule che hanno uno di questi valori
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: number
                  examples:
                    oneId:
                      summary: Esempio con un solo valore richiesto
                      value: [20.5]   # ?valeur=20.5
                    multipleIds:
                      summary: Esempio con più valori richiesti
                      value: [20.5, 40, 60]   # ?valeur=20.5,40,60
            responses:
              '200':    # status code
                description: Tabella dei JSON dei costi orari delle aule
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Couts_horaires_salles'
        post:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: Creazione di un nuovo costo orario per le aule
            description: Crea un nuovo costo orario per le aule nella base dati e inizializza i campi usando i parametri passati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_salles'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '400':    # status code
                description: "Parametri non validi: Nome e valore obbligatori"
              '500':    # status code
                description: "Creazione impossibile"
    /couts_horaires_salles/{cle}:
        get:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: JSON del costo orario delle aule con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del costo orario delle aule"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: Aggiornamento parziale di un costo orario delle aule
            description: Modifica i campi del costo orario delle aule con chiave {cle} con quelli passati nel JSON nel BODY
            parameters:
                - name: cle
                  in: path
                  description: "chiave del costo orario delle aule che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Couts_horaires_salles'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Couts_horaires_salles'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: Cancellazione di un costo orario delle aule
            description: Cancella definitivamente il costo orario delle aule con chiave {cle} dalla base dati
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /couts_horaires_salles/supprimer:
        post:
            tags:
                - Couts_horaires_salles (Costi orari delle aule)
            summary: Cancellazione di più costi orari delle aule
            description: Cancella i costi orari delle aule identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei costi orari delle aule da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Cursus ####
    /cursus:
        get:
            tags:
                - Cursus (Piano di studi)
            summary: Elenco di tutti i piani di studio
            description: Tabella contenente i JSON dei piani di studio della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: Filtro sulle chiavi dei piani di studio
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtro sui nomi dei piani di studio
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: Filtro sui codici dei piani di studio
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON dei piani di studio
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Cursus'
        post:
            tags:
                - Cursus (Piano di studi)
            summary: Creazione di un nuovo piano di studi
            description: Crea un nuovo piano di studi nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cursus'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /cursus/{cle}:
        get:
            tags:
                - Cursus (Piano di studi)
            summary: JSON del piano di studi con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del piano di studi"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Cursus (Piano di studi)
            summary: Aggiornamento parziale di un piano di studio
            description: Modifica i campi del piano di studi con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del piano di studi che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Cursus'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Cursus'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: piano di studi inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Cursus (Piano di studi)
            summary: Cancellazione di un piano di studi
            description: Cancella definitivamente dalla base il piano di studio con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cursus/supprimer:
        post:
            tags:
                - Cursus (Piano di studi)
            summary: Cancellazione di più piani di studi
            description: Cancella i piani di studio identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei piani di studio da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /cursus/{cle_cursus}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Cursus (Piano di studi)
            summary: Specifiche assegnate al piano di studi per la tipologia
            description: Specifiche assegnate al piano di studi con chiave {cle_cursus} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_cursus
                  in: path
                  description: "chiave del piano di studi"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Cursus (Piano di studi)
            summary: Modifica delle specifiche assegnate al piano di studi per la tipologia
            description: Modifica le specifiche assegnate al piano di studi con chiave {cle_cursus} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_cursus
                  in: path
                  description: "chiave del piano di studi"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cursus:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Enseignants ####
    /enseignants:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Elenco di tutti i docenti
            description: Tabella contenente i JSON dei docenti della base dati, ordinata per cognome poi per nome infine per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - prenom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i docenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: prenom
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: cas_identifiant
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo i docenti che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON dei docenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Enseignants'
        post:
            tags:
                - Enseignants (Docenti)
            summary: Creazione di un nuovo docente
            description: Crea un nuovo docente nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      code:
                        type: string
                        example: "AD"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      nom_jeune_fille:
                        type: string
                        example: "Rossi"
                      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: "Torino"
                      numero_securite_sociale:
                        type: string
                        example: "2000213456789"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      code_fiscal:
                        type: string
                        example: "154862"
                      numero_tva:
                        type: string
                        example: "12584165a"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      apport_annuel:
                        type: number
                        example: 5.416666666666667
                      information_interne:
                        type: string
                        example: "information interne"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      publication:
                        type: boolean
                        example: true
                      proprietaire:
                        type: integer
                        example: 10
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      partage_ponderation:
                        type: boolean
                        example: false
                      matieres:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      cout_horaire_statutaire:
                        type: integer
                        example: 10
                      cout_horaire_sans_public:
                        type: integer
                        example: 11
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /enseignants/{cle}:
        get:
            tags:
                - Enseignants (Docenti)
            summary: JSON del docente con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Enseignants (Docenti)
            summary: Aggiornamento parziale di un docente
            description: Modifica i campi del docente con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      code:
                        type: string
                        example: "AD"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      nom_jeune_fille:
                        type: string
                        example: "Rossi"
                      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: "Torino"
                      numero_securite_sociale:
                        type: string
                        example: "2000213456789"
                      cle_securite_sociale:
                        type: string
                        example: "12"
                      mutuelle:
                        type: string
                        example: "MaMutuelle"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      code_fiscal:
                        type: string
                        example: "154862"
                      numero_tva:
                        type: string
                        example: "12584165a"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      apport_annuel:
                        type: number
                        example: 5.416666666666667
                      information_interne:
                        type: string
                        example: "information interne"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      autorisation_reception_sms:
                        type: boolean
                        example: true
                      numero_telephone_bureau:
                        type: string
                        example: "01010101"
                      indicatif_telephone_bureau:
                        type: string
                        example: "01"
                      publication:
                        type: boolean
                        example: true
                      proprietaire:
                        type: integer
                        example: 10
                      autorisation_diffusion_photo:
                        type: boolean
                        example: true
                      partage_ponderation:
                        type: boolean
                        example: false
                      matieres:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      cout_horaire_statutaire:
                        type: integer
                        example: 10
                      cout_horaire_sans_public:
                        type: integer
                        example: 11
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Enseignants'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: docente inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Enseignants (Docenti)
            summary: Cancellazione di un docente
            description: Cancella definitivamente dalla base il docente con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /enseignants/supprimer:
        post:
            tags:
                - Enseignants (Docenti)
            summary: Cancellazione di più docenti
            description: Cancella i docenti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei docenti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /enseignants/{cle}/photo/{format}:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Foto in formato {format} di un docente
            description: Flusso della foto del docente con chiave {cle} nel formato richiesto (jpeg, png, gif o bitmap)
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: format
                  in: path
                  description: 'Formato della foto'
                  required: true
                  schema:
                    type: string
                    enum:
                      - jpeg
                      - png
                      - gif
                      - bitmap
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Parametro non valido"
    /enseignants/{cle}/photo:
        post:
            tags:
                - Enseignants (Docenti)
            summary: Aggiornamento della foto di un docente
            description: Modifica la foto del docente con chiave {cle} con quella presente nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente il campo formato (jpeg, png, gif o bitmap) e la foto
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      format:
                        type: string
                        example: "jpeg"
                      base64binary:
                        type: string
                        example: 12
            responses:
              '200':    # status code
                description: Successo - JSON della foto modificata
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Parametro non valido"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Enseignants (Docenti)
            summary: Cancellazione della foto di un docente
            description: Cancella la foto del docente con chiave {cle} dalla base dati
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /enseignants/{cle}/cours:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Chiavi delle attività di un docente tra 2 date
            description: Chiavi delle attività del docente con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle_ens}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Periodo di presenza di un docente in un'attività
            description: Periodo di presenza del docente con chiave {cle_ens} per l'attività con chiave {cle_cours}. Il periodo è vuoto se il docente non è nell'attività.
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Enseignants (Docenti)
            summary: Modifica del periodo di presenza di un docente in un'attività
            description: Modifica il periodo di presenza del docente con chiave {cle_ens} per l'attività con chiave {cle_cours}. Consente di aggiungere un docente a un'attività o di rimuoverlo da tale attività Il periodo può essere specificato nell'URL ?domaine=12,24,48. Per impostazione predefinita, viene considerato l'intero periodo.
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/indisponibilites:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Indisponibilità di un docente per una settimana
            description: Indisponibilità (in fasce orarie) del docente con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0:00 e l'inizio dell'indisponibilità<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/voeux:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Preferenze di un docente per una settimana
            description: Preferenze (in fasce orarie) del docente con chiave {cle} per una settimana.<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0h00 e l'inizio della preferenza.<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/cout:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Costo di un docente tra due date o su un periodo
            description: Costo del docente con chiave {cle} tra due date Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
    /enseignants/cout:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Costi dei docenti tra due date o su un periodo
            description: Costi dei docenti tra due date o su un periodo. Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Diritti insufficienti"
    /enseignants/{cle}/duree_cours:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata delle attività di un docente su un periodo
            description: Durata delle attività del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/duree_cours:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata delle attività dei docenti su un periodo
            description: Durata delle attività dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/duree_disponible:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata disponibile di un docente su un periodo
            description: Durata disponibile del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/duree_disponible:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata disponibile dei docenti su un periodo
            description: Durata disponibile dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/duree_ponderee_cours:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata ponderata delle attività di un docente su un periodo
            description: Durata ponderata delle attività del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_ponderee_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/duree_ponderee_cours:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Durata ponderata delle attività dei docenti su un periodo
            description: Durata ponderata delle attività dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_ponderee_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/t1:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T1 di un docente su un periodo
            description: T1 del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t1:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/t1:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T1 dei docenti su un periodo
            description: T1 dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t1:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/t2_conv:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T2 convenzionale di un docente su un periodo
            description: T2 convenzionale del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_conv:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/t2_conv:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T2 convenzionale dei docenti su un periodo
            description: T2 convenzionale dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_conv:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/t2_real:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T2 svolto di un docente su un periodo
            description: T2 svolto del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_real:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/t2_real:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T2 svolto dei docenti su un periodo
            description: T2 svolto dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t2_real:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/t3:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T3 di un docente su un periodo
            description: T3 del docente con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t3:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/t3:
        get:
            tags:
                - Enseignants (Docenti)
            summary: T3 dei docenti su un periodo
            description: T3 dei docenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        t3:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle}/decharges:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Totale delle ore annuali di extra docenza e costo annuale totale delle ore di extra docenza di un docente
            description: Totale delle ore annuali di extra docenza e costo annuale totale delle ore di extra docenza del docente con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        total_heures_annuelles:
                          type: number
                          example: 17.2916666666667
                        total_cout_annuel:
                          type: number
                          example: 1431.75
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/decharges:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Totale delle ore annuali di extra docenza e costo annuale totale delle ore di extra docenza dei docenti
            description: Totale delle ore annuali di extra docenza e costo annuale totale delle ore di extra docenza dei docenti specificati
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei docenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        decharges:
                          type: array
                          items:
                            type: object
                            properties:
                              cle_enseignant:
                                type: integer
                                example: 12
                              total_heures_annuelles:
                                type: number
                                example: 17.2916666666667
                              total_cout_annuel:
                                type: number
                                example: 1431.75
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /enseignants/{cle_ens}/promotions/{cle_promo}/cout_horaire:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Costo orario assegnato a un corso per un docente
            description: Chiave del costo orario assegnata al corso con chiave {cle_promo} per il docente con chiave {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 234
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Enseignants (Docenti)
            summary: Modifica del costo orario assegnato a un corso per un docente
            description: Modifica la chiave del costo orario assegnata al corso con chiave {cle_promo} per il docente con chiave {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cout_horaire
                  in: query
                  description: "Chiave del costo orario"
                  required: true
                  schema:
                    type: integer
                    example: 24
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Diritti insufficienti"
              '403':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /enseignants/{cle_ens}/tdoptions/{cle_tdopt}/cout_horaire:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Costo orario assegnato a un gruppo / opzione per un docente
            description: Chiave del costo orario assegnata al gruppo / opzione con chiave {cle_tdopt} per il docente con chiave {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_tdoption:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 234
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Enseignants (Docenti)
            summary: Modifica del costo orario assegnato a un gruppo / opzione per un docente
            description: Modifica la chiave del costo orario assegnata al gruppo / opzione con chiave {cle_tdopt} per il docente con chiave {cle_ens}
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cout_horaire
                  in: query
                  description: "Chiave del costo orario"
                  required: true
                  schema:
                    type: integer
                    example: 24
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_enseignant:
                          type: integer
                          example: 388
                        cle_tdoption:
                          type: integer
                          example: 125
                        cle_cout_horaire:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Diritti insufficienti"
              '403':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /enseignants/{cle_ens}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Enseignants (Docenti)
            summary: Specifiche assegnate al docente per la tipologia
            description: Specifiche assegnate al docente con chiave {cle_ens} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Enseignants (Docenti)
            summary: Modifica delle specifiche assegnate al docente per la tipologia
            description: Modifica le specifiche assegnate al docente con chiave {cle_ens} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_ens
                  in: path
                  description: "chiave del docente"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        enseignant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Entreprises ####
    /entreprises:
        get:
            tags:
                - Entreprises (Aziende)
            summary: Elenco di tutte le aziende
            description: Tabella contenente i JSON delle aziende della base dati, ordinata per ragione sociale di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - raison_sociale
                      - numero_siret
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, raison_sociale, numero_siret]   # ?select=cle,raison_sociale,numero_siret
                - name: cle
                  in: query
                  description: restituisce solo le aziende che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: raison_sociale
                  in: query
                  description: restituisce solo le aziende che hanno una di queste ragioni sociali
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola ragione sociale richiesta
                      value: [entreprise1]   # ?raison_sociale=entreprise1
                    multipleIds:
                      summary: Esempio con più ragioni sociali richieste
                      value: [entreprise1, entreprise2, entreprise3]   # ?raison_sociale=entreprise1,entreprise2,entreprise3
                - name: nom_commercial
                  in: query
                  description: restituisce solo le aziende che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [entrepriseNC1]   # ?nom_commercial=entrepriseNC1
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [entrepriseNC1, entrepriseNC2, entrepriseNC3]   # ?nom_commercial=entrepriseNC1,entrepriseNC2,entrepriseNC3
                - name: numero_siret
                  in: query
                  description: restituisce solo le aziende che hanno uno di queste partite iva
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo numero richiesto
                      value: [123]   # ?numero_siret=123
                    multipleIds:
                      summary: Esempio con più numeri richiesti
                      value: [123, 456, 789]   # ?numero_siret=123,456,789
                - name: uid_identifiant
                  in: query
                  description: restituisce solo le aziende che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [ent1]   # ?uid_identifiant=ent1
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [ent1, ent2, ent3]   # ?uid_identifiant=ent1,ent2,ent3
            responses:
              '200':    # status code
                description: Tabella dei JSON delle aziende
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Entreprises'
        post:
            tags:
                - Entreprises (Aziende)
            summary: Creazione di una nuova azienda
            description: Crea una nuova azienda nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      raison_sociale:
                        type: string
                        example: "Index Education"
                      nom_commercial:
                        type: string
                        example: "Docaposte"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "nome.cognome@email.it"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      activite:
                        type: string
                        example: "Activite"
                      ape:
                        type: string
                        example: "APE"
                      numero_siret:
                        type: string
                        example: "12345678901234"
                      urssaf:
                        type: string
                        example: "08080808080808"
                      convention_collective_code_idcc:
                        type: string
                        example: "1486"
                      convention_collective:
                        type: string
                        example: "Syntec"
                      effectif:
                        type: integer
                        example: 150
                      assurance_responsabilite_civile:
                        type: string
                        example: "AD"
                      numero_police_assurance:
                        type: string
                        example: "AD"
                      commentaire_public:
                        type: string
                        example: "Commentaire public"
                      commentaire_interne:
                        type: string
                        example: "Commentaire interne"
                      proprietaire:
                        type: integer
                        example: 10
                      responsable:
                        type: integer
                        example: 10
                      contacts:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      charges_contrat:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '400':    # status code
                description: "Parametri non validi: ragione sociale obbligatoria, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /entreprises/{cle}:
        get:
            tags:
                - Entreprises (Aziende)
            summary: JSON dell'azienda con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'azienda"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Entreprises (Aziende)
            summary: Aggiornamento parziale di un'azienda
            description: Modifica i campi dell'azienda con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'azienda che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      raison_sociale:
                        type: string
                        example: "Index Education"
                      nom_commercial:
                        type: string
                        example: "Docaposte"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "nome.cognome@email.it"
                      site_internet:
                        type: string
                        example: "https://www.index-education.com"
                      activite:
                        type: string
                        example: "Activite"
                      ape:
                        type: string
                        example: "APE"
                      numero_siret:
                        type: string
                        example: "12345678901234"
                      urssaf:
                        type: string
                        example: "08080808080808"
                      convention_collective_code_idcc:
                        type: string
                        example: "1486"
                      convention_collective:
                        type: string
                        example: "Syntec"
                      effectif:
                        type: integer
                        example: 150
                      assurance_responsabilite_civile:
                        type: string
                        example: "AD"
                      numero_police_assurance:
                        type: string
                        example: "AD"
                      commentaire_public:
                        type: string
                        example: "Commentaire public"
                      commentaire_interne:
                        type: string
                        example: "Commentaire interne"
                      proprietaire:
                        type: integer
                        example: 10
                      responsable:
                        type: integer
                        example: 10
                      contacts:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      maitres_tuteurs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      charges_contrat:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Entreprises'
              '400':    # status code
                description: "Parametri non validi: ragione sociale obbligatoria, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: azienda inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Entreprises (Aziende)
            summary: Cancellazione di un'azienda
            description: Cancella definitivamente dalla base l'azienda con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /entreprises/supprimer:
        post:
            tags:
                - Entreprises (Aziende)
            summary: Cancellazione di più aziende
            description: Cancella le aziende identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle aziende da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /entreprises/{cle_ent}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Entreprises (Aziende)
            summary: Specifiche assegnate all'azienda per la tipologia
            description: Specifiche assegnate all'azienda con chiave {cle_ent} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_ent
                  in: path
                  description: "chiave dell'azienda"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Entreprises (Aziende)
            summary: Modifica delle specifiche assegnate all'azienda per la tipologia
            description: Modifica le specifiche assegnate all'azienda con chiave {cle_ent} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_ent
                  in: path
                  description: "chiave dell'azienda"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        entreprise:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Etudiants ####
    /etudiants:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Elenco di tutti gli studenti
            description: Tabella contenente i JSON degli studenti della base dati, ordinata per cognome poi per nome e infine per data di nascita di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - numero_ine
                      - numero_ordre
                      - uid_identifiant
                      - proprietaire
                      - civilite
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo gli studenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: prenom
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [maths]   # ?prenom=maths
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [maths, francais, histoire]   # ?prenom=maths,francais,histoire
                - name: date_naissance
                  in: query
                  description: restituisce solo gli studenti che hanno una di queste date di nascita
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola data di nascita richiesta
                      value: [2000-12-21]   # ?date_naissance=2000-12-21
                    multipleIds:
                      summary: Esempio con più date di nascita richieste
                      value: [2000-12-21, 2001-12-21, 2002-12-21]   # ?date_naissance=2000-12-21,2001-12-21,2002-12-21
                - name: e_mail_personnel
                  in: query
                  description: restituisce solo gli studenti che hanno una di queste e-mail personali
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola e-mail richiesta
                      value: [email1@monmail.fr]   # ?e_mail_personnel=email1@monmail.fr
                    multipleIds:
                      summary: Esempio con più e-mail richieste
                      value: [email1@monmail.fr, email2@monmail.fr, email3@monmail.fr]   # ?e_mail_personnel=email1@monmail.fr,email2@monmail.fr,email3@monmail.fr
                - name: e_mail_institutionnel
                  in: query
                  description: restituisce solo gli studenti che hanno una di queste e-mail istituzionali
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola e-mail richiesta
                      value: [email1@monmail.fr]   # ?e_mail_institutionnel=email1@monmail.fr
                    multipleIds:
                      summary: Esempio con più e-mail richieste
                      value: [email1@monmail.fr, email2@monmail.fr, email3@monmail.fr]   # ?e_mail_institutionnel=email1@monmail.fr,email2@monmail.fr,email3@monmail.fr
                - name: uid_identifiant
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: numero_ordre
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi numeri
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo numero richiesto
                      value: [123]   # ?numero_ordre=123
                    multipleIds:
                      summary: Esempio con più numeri richiesti
                      value: [123, 456, 789]   # ?numero_ordre=123,456,789
                - name: numero_ine
                  in: query
                  description: restituisce solo gli studenti che hanno una di queste matricole
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo numero richiesto
                      value: [123]   # ?numero_ine=123
                    multipleIds:
                      summary: Esempio con più numeri richiesti
                      value: [123, 456, 789]   # ?numero_ine=123,456,789
                - name: cas_identifiant
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo gli studenti che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON degli studenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Etudiants'
        post:
            tags:
                - Etudiants (Studenti)
            summary: Creazione di un nuovo studente
            description: Crea un nuovo studente nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom1:
                        type: string
                        example: "Maria"
                      prenom2:
                        type: string
                        example: "Paolo"
                      prenom3:
                        type: string
                        example: "Claudio"
                      prenom_usage:
                        type: string
                        example: "Laura"
                      date_naissance:
                        type: string
                        example: "2010-02-22"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
                      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: "Rossi"
                      lieu_naissance:
                        type: string
                        example: "Torino"
                      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: "Ecco un commento molto utile"
                      code_fiscal:
                        type: string
                        example: "123456"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "SCIENTIFICO"
                      baccalaureat_specialite1:
                        type: string
                        example: "MATE"
                      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: "modalità di ammissione"
                      etablissement_origine:
                        type: integer
                        example: 10
                      date_inscription:
                        type: string
                        example: "2022-02-22"
                      cursus_anterieur:
                        type: string
                        example: "Piano di studi precedente"
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      acces_espace_etudiants:
                        type: boolean
                        example: true
                      emargement_numerique:
                        type: boolean
                        example: true
                      parent1:
                        type: integer
                        example: 10
                      lien_parente1:
                        type: string
                        example: "madre"
                      parent2:
                        type: integer
                        example: 10
                      lien_parente2:
                        type: string
                        example: "padre"
                      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: "Perfetto"
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /etudiants/{cle}:
        get:
            tags:
                - Etudiants (Studenti)
            summary: JSON dello studente con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Aggiornamento parziale di uno studente
            description: Modifica i campi dello studente con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom1:
                        type: string
                        example: "Maria"
                      prenom2:
                        type: string
                        example: "Paolo"
                      prenom3:
                        type: string
                        example: "Claudio"
                      prenom_usage:
                        type: string
                        example: "Laura"
                      date_naissance:
                        type: string
                        example: "2010-02-22"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
                      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: "Rossi"
                      lieu_naissance:
                        type: string
                        example: "Torino"
                      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: "Ecco un commento molto utile"
                      code_fiscal:
                        type: string
                        example: "123456"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "SCIENTIFICO"
                      baccalaureat_specialite1:
                        type: string
                        example: "MATE"
                      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: "modalità di ammissione"
                      etablissement_origine:
                        type: integer
                        example: 10
                      date_inscription:
                        type: string
                        example: "2022-02-22"
                      cursus_anterieur:
                        type: string
                        example: "Piano di studi precedente"
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      acces_espace_etudiants:
                        type: boolean
                        example: true
                      emargement_numerique:
                        type: boolean
                        example: true
                      parent1:
                        type: integer
                        example: 10
                      lien_parente1:
                        type: string
                        example: "madre"
                      parent2:
                        type: integer
                        example: 10
                      lien_parente2:
                        type: string
                        example: "padre"
                      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: "Perfetto"
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etudiants'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: studente inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Etudiants (Studenti)
            summary: Cancellazione di uno studente
            description: Cancella definitivamente dalla base lo studente con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /etudiants/supprimer:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Cancellazione di più studenti
            description: Cancella gli studenti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli studenti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /etudiants/{cle}/photo/{format}:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Foto in formato {format} di uno studente
            description: Flusso della foto dello studente con chiave {cle} nel formato richiesto (jpeg, png, gif o bitmap)
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: string
                - name: format
                  in: path
                  description: 'Formato della foto'
                  required: true
                  schema:
                    type: string
                    enum:
                      - jpeg
                      - png
                      - gif
                      - bitmap
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Parametro non valido"
    /etudiants/{cle}/photo:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Aggiornamento della foto di uno studente
            description: Modifica la foto dello studente con chiave {cle} con quella presente nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente che si desidera aggiornare"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenente il campo formato (jpeg, png, gif o bitmap) e la foto
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      format:
                        type: string
                        example: "jpeg"
                      base64binary:
                        type: string
                        example: 12
            responses:
              '200':    # status code
                description: Successo - JSON della foto modificata
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        format:
                          type: string
                          example: "jpeg"
                        base64binary:
                          type: string
                          example: 12
              '400':    # status code
                description: "Parametro non valido"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Etudiants (Studenti)
            summary: Cancellazione della foto di uno studente
            description: Cancella la foto dello studente con chiave {cle} dalla base dati
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /etudiants/{cle}/regroupements:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Chiavi dei raggruppamenti di uno studente a una data o tra 2 date
            description: Chiavi dei raggruppamenti dello studente con chiave {cle} a una data o tra 2 date Se non sono specificati parametri, restituisce l'elenco dei raggruppamenti dello studente alla data odierna.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        regroupements:
                          type: array
                          items:
                            type: integer
                            example: 13
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle}/promotions:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Chiavi dei corsi di uno studente a una data o tra 2 date
            description: Chiavi dei corsi di uno studente a una data o tra 2 date Se non sono specificati parametri, restituisce l'elenco dei corsi dello studente alla data odierna.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/promotions/{cle_promo}/ajouter:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Assegnazione di uno studente a un corso per l'anno o a partire da una data
            description: Assegna lo studente con chiave {cle_etu} al corso con chiave {cle_promo} per l'anno predefinito. Per assegnare lo studente al corso a partire da una data, specificare tale data come parametro. Se non sono specificati parametri, assegna lo studente sull'anno interno.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/promotions/{cle_promo}/enlever:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Rimozione di uno studente da un corso per l'anno o a partire da una data
            description: Rimuove lo studente con chiave {cle_etu} dal corso con chiave {cle_promo} per l'anno predefinito. Per rimuovere lo studente dal corso a partire da una data, specificare tale data come parametro. Se non sono specificati parametri, rimuove lo studente dall'anno intero.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/promotions/{cle_promo}/dates_affectation:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Date di assegnazione di uno studente a un corso
            description: Date di assegnazione dello studente con chiave {cle_etu} nel corso con chiave {cle_promo}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica delle date di assegnazione di uno studente a un corso
            description: Sostituisce le date di assegnazione dello studente con chiave {cle_etu} nel corso (promotion) con chiave {cle_promo} con quelle presenti nel BODY in formato JSON.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: "JSON delle date di assegnazione (tabella in formato JSON contenente la data di inizio dell'intervallo ('du') e la data di fine ('au')).<br> Inserite 'du' : '1899-12-30' per indicare 'dall'inizio dell'anno' e/o 'au' : '2199-12-30' per indicare 'fino alla fine dell'anno'."
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      dates_affectation:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-02"
                            au:
                              type: string
                              example: "2000-02-20"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle}/tdoptions:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Chiavi dei gruppi / opzioni di uno studente a una data o tra 2 date
            description: Chiavi dei gruppi / opzioni dello studente con chiave {cle} a una data o tra 2 date. Se non sono specificati parametri, restituisce l'elenco dei gruppi / opzioni dello studente alla data odierna.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/ajouter:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Assegnazione di uno studente a un gruppo / opzione per l'anno o a partire da una data
            description: Assegna lo studente con chiave {cle_etu} al gruppo / opzione con chiave {cle_tdopt} per l'anno predefinito. Per assegnare lo studente al gruppo / opzione a partire da una data, specificare tale data come parametro. Se non sono specificati parametri, assegna lo studente sull'anno interno.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/enlever:
        post:
            tags:
                - Etudiants (Studenti)
            summary: Rimozione di uno studente da un gruppo / opzione per l'anno o a partire da una data
            description: Rimuove lo studente con chiave {cle_etu} dal gruppo / opzione con chiave {cle_tdopt} per l'anno predefinito. Per rimuovere lo studente dal gruppo / opzione a partire da una data, specificare tale data come parametro. Se non sono specificati parametri, rimuove lo studente dall'anno intero.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        tdoptions:
                          type: array
                          items:
                            type: integer
                            example: 12
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/tdoptions/{cle_tdopt}/dates_affectation:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Date di assegnazione di uno studente a un gruppo / opzione
            description: Date di assegnazione dello studente con chiave {cle_etu} nel gruppo / opzione con chiave {cle_tdopt}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica delle date di assegnazione di uno studente a un gruppo / opzione
            description: Sostituisce le date di assegnazione dello studente con chiave {cle_etu} nel gruppo / opzione con chiave {cle_tdopt} con quelle presenti nel BODY in formato JSON.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: "JSON delle date di assegnazione (tabella in formato JSON contenente la data di inizio dell'intervallo ('du') e la data di fine ('au')).<br> Inserite 'du' : '1899-12-30' per indicare 'dall'inizio dell'anno' e/o 'au' : '2199-12-30' per indicare 'fino alla fine dell'anno'."
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      dates_affectation:
                        type: array
                        items:
                          type: object
                          properties:
                            du:
                              type: string
                              example: "2000-02-02"
                            au:
                              type: string
                              example: "2000-02-20"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        dates_affectation:
                          type: array
                          items:
                            type: object
                            properties:
                              du:
                                type: string
                              au:
                                type: string
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle}/cours:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Chiavi delle attività di uno studente tra 2 date
            description: Chiavi delle attività dello studente con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività dello studente sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '405':    # status code
                description: "Diritti insufficienti"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/bonus_malus:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Bonus / malus assegnato a uno studente per un servizio di valutazione e un periodo di valutazione
            description: Bonus / malus assegnato allo studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica del bonus / malus di uno studente per un servizio di valutazione e un periodo di valutazione
            description: Modifica il bonus / malus dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus
                  in: query
                  description: Bonus / malus da assegnare
                  required: true
                  schema:
                    type: string
                    example: "5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/bonus_malus:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Bonus / malus assegnato a uno studente per un servizio di valutazione e un periodo fuori calendario
            description: Bonus / malus assegnato allo studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica del bonus / malus di uno studente per un servizio di valutazione e un periodo fuori calendario
            description: Modifica il bonus / malus dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus
                  in: query
                  description: Bonus / malus da assegnare
                  required: true
                  schema:
                    type: string
                    example: "5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus:
                          type: string
                          example: "5"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/calendriers_notation/{cle_caln}/appreciation:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Giudizio di uno studente per un servizio di valutazione e un calendario di valutazione
            description: Giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e per il calendario di valutazione con chiave {cle_caln}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_caln
                  in: path
                  description: "chiave del calendario di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_calendrier_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica del giudizio di uno studente per un servizio di valutazione e un calendario di valutazione
            description: Modifica il giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e il calendario di valutazione con chiave {cle_caln}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_caln
                  in: path
                  description: "chiave del calendario di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nuovo giudizio
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_calendrier_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_notation/{cle_pern}/appreciation:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Giudizio di uno studente per un servizio di valutazione e un periodo di valutazione
            description: Giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica del giudizio di uno studente per un servizio di valutazione e un periodo di valutazione
            description: Modifica il giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e il periodo di valutazione con chiave {cle_pern}.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nuovo giudizio
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/appreciation:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Giudizio di uno studente per un servizio di valutazione e un periodo fuori calendario
            description: Giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Excellent travail"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica della giudizio di uno studente per un servizio di valutazione e un periodo fuori calendario
            description: Modifica il giudizio dello studente con chiave {cle_etu} per il servizio di valutazione con chiave {cle_sn} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: appreciation
                  in: query
                  description: Nuovo giudizio
                  required: true
                  schema:
                    type: string
                    example: "Remarquable"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        appreciation:
                          type: string
                          example: "Remarquable"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_notation/{cle_pern}/observation_generale:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Osservazione generale assegnata a uno studente per un corso e un periodo di valutazione
            description: Osservazione generale assegnata allo studente con chiave {cle_etu} per il corso con chiave {cle_promo} e per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  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: "Perfetto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica dell'osservazione generale di uno studente per un corso e un periodo di valutazione
            description: Modifica l'osservazione generale dello studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: observation_generale
                  in: query
                  description: Osservazione generale da assegnare
                  required: true
                  schema:
                    type: string
                    example: "Perfetto"
            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: "Perfetto"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_hors_calendrier/{cle_perhc}/observation_generale:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Osservazione generale assegnata a uno studente per un corso e un periodo fuori calendario
            description: Osservazione generale assegnata allo studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  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: "Perfetto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica dell'osservazione generale di uno studente per un corso e un periodo fuori calendario
            description: Modifica l'osservazione generale dello studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo fuori calendario con chiave {cle_perhc}.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: observation_generale
                  in: query
                  description: Osservazione generale da assegnare
                  required: true
                  schema:
                    type: string
                    example: "Perfetto"
            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: "Perfetto"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_notation/{cle_pern}/decision:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Esito assegnato a uno studente per un corso e un periodo di valutazione
            description: Esito assegnato allo studente con chiave {cle_etu} per il corso con chiave {cle_promo} e per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica dell'esito di uno studente per un corso e un periodo di valutazione
            description: Modifica l'esito dello studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo di valutazione con chiave {cle_pern}.
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: decision
                  in: query
                  description: Esito da assegnare
                  required: true
                  schema:
                    type: string
                    example: "Semestre validé"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/promotions/{cle_promo}/periodes_hors_calendrier/{cle_perhc}/decision:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Esito assegnato a uno studente per un corso e un periodo fuori calendario
            description: Esito assegnato allo studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica della decisione di uno studente per un corso e un periodo fuori calendario
            description: Modifica l'esito dello studente con chiave {cle_etu} per il corso con chiave {cle_promo} e il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: decision
                  in: query
                  description: Esito da assegnare
                  required: true
                  schema:
                    type: string
                    example: "Semestre validé"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        decision:
                          type: string
                          example: "Semestre validé"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/periodes_notation/{cle_pern}/modules_notation/{cle_mod}/validation_module:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Validazione di un modulo di valutazione di uno studente per un periodo di valutazione
            description: Validazione del modulo di valutazione con chiave {cle_mod} dello studente con chiave {cle_etu} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_notation:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica della validazione di un modulo di valutazione di uno studente per un periodo di valutazione
            description: Modifica la validazione del modulo di valutazione con chiave {cle_mod} dello studente con chiave {cle_etu} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: validation_module
                  in: query
                  description: "Validazione del modulo da assegnare. Formato atteso: 'validé', 'V', 'non', 'N', 'aucune', 'aucun', '' (stringa vuota) o una data nel formato stringa 'yyyy-mm-dd' per validare a una data precisa"
                  required: true
                  schema:
                    type: string
                    example: "2026-01-22"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_notation:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente, periodi bloccati, corso cancellato"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/periodes_hors_calendrier/{cle_perhc}/modules_notation/{cle_mod}/validation_module:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Validazione di un modulo di valutazione di uno studente per un periodo fuori calendario
            description: Validazione del modulo di valutazione con chiave {cle_mod} dello studente con chiave {cle_etu} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica della validazione di un modulo di valutazione di uno studente per un periodo fuori calendario
            description: Modifica la validazione del modulo di valutazione con chiave {cle_mod} dello studente con chiave {cle_etu} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: validation_module
                  in: query
                  description: "Validazione del modulo da assegnare. Formato atteso: 'validé', 'V', 'non', 'N', 'aucune', 'aucun', '' (stringa vuota) o una data nel formato stringa 'yyyy-mm-dd' per validare a una data precisa"
                  required: true
                  schema:
                    type: string
                    example: "2026-01-22"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_etudiant:
                          type: integer
                          example: 498
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 388
                        validation_module:
                          type: string
                          example: "Validé"
                        international:
                          type: string
                          example: "Admitted"
                        date_validation:
                          type: string
                          example: "2026-01-22"
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente, periodi bloccati, corso cancellato"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/devoirs/{cle_devoir}/notes:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Voto assegnato a uno studente per una valutazione
            description: Voto assegnato allo studente con chiave {cle_etu} per la valutazione con chiave {cle_devoir} (tenendo conto del voto della valutazione di recupero, se presente)
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_devoir
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 498
                        devoir:
                          type: integer
                          example: 388
                        date_devoir:
                          type: string
                          example: "2024-10-04"
                        note:
                          type: string
                          example: "15,4"
                        matiere:
                          type: integer
                          example: 314
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica del voto di uno studente per una valutazione
            description: Modifica il voto dello studente con chiave {cle_etu} per la valutazione con chiave {cle_devoir}
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_devoir
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
                - name: note
                  in: query
                  description: voto da inserire. Può essere anche un'annotazione (Ass, N.Val, N.Con*, Eson,..). Vedi documentazione PRONOTE Campus
                  required: true
                  schema:
                    type: string
                    example: "15,5"
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 498
                        devoir:
                          type: integer
                          example: 388
                        date_devoir:
                          type: string
                          example: "2024-10-04"
                        note:
                          type: string
                          example: "15,4"
                        matiere:
                          type: integer
                          example: 314
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /etudiants/{cle_etu}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Etudiants (Studenti)
            summary: Specifiche assegnate allo studente per la tipologia
            description: Specifiche assegnate allo studente con chiave {cle_etu} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Etudiants (Studenti)
            summary: Modifica delle specifiche assegnate allo studente per la tipologia
            description: Modifica le specifiche assegnate allo studente con chiave {cle_etu} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_etu
                  in: path
                  description: "chiave dello studente"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiant:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Matieres ####
    /matieres:
        get:
            tags:
                - Matieres (Materie)
            summary: Elenco di tutte le materie
            description: Tabella contenente i JSON delle materie della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - libelle
                      - code
                      - libelle_long
                      - uid_identifiant
                      - couleur
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, code]   # ?select=cle,libelle,code
                - name: cle
                  in: query
                  description: restituisce solo le materie che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: restituisce solo le materie che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo le materie che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo le materie che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON delle materie
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Matieres'
        post:
            tags:
                - Matieres (Materie)
            summary: Creazione di una nuova materia
            description: Crea una nuova materia nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Inglese"
                      code:
                        type: string
                        example: "LV1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      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: "Pubblicato su tutte le Aree"
                      proprietaire:
                        type: integer
                        example: 10
                      matieres_incompatibles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /matieres/{cle}:
        get:
            tags:
                - Matieres (Materie)
            summary: JSON della materia con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Matieres (Materie)
            summary: Aggiornamento parziale di una materia
            description: Modifica i campi della materia con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della materia che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Inglese"
                      code:
                        type: string
                        example: "LV1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      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: "Pubblicato su tutte le Aree"
                      proprietaire:
                        type: integer
                        example: 10
                      matieres_incompatibles:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Matieres'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: materia inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Matieres (Materie)
            summary: Cancellazione di una materia
            description: Cancella definitivamente dalla base la materia con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /matieres/supprimer:
        post:
            tags:
                - Matieres (Materie)
            summary: Cancellazione di più materie
            description: Cancella le materie identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle materie da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /matieres/{cle_mat}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Matieres (Materie)
            summary: Specifiche assegnate alla materia per la tipologia
            description: Specifiche assegnate alla materia con chiave {cle_mat} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Matieres (Materie)
            summary: Modifica delle specifiche assegnate alla materia per la tipologia
            description: Modifica le specifiche assegnate alla materia con chiave {cle_mat} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        matiere:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Modules ####
    /modules:
        get:
            tags:
                - Modules (Moduli)
            summary: Elenco di tutti i moduli
            description: Tabella contenente i JSON dei moduli della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i moduli che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i moduli che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo i moduli che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON dei moduli
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Modules'
        post:
            tags:
                - Modules (Moduli)
            summary: Creazione di un nuovo modulo
            description: Crea un nuovo modulo nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /modules/{cle}:
        get:
            tags:
                - Modules (Moduli)
            summary: JSON del modulo con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del modulo"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Modules (Moduli)
            summary: Aggiornamento parziale di un modulo
            description: Modifica i campi del modulo con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del modulo che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: modulo inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Modules (Moduli)
            summary: Cancellazione di un modulo
            description: Cancella definitivamente dalla base il modulo con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /modules/supprimer:
        post:
            tags:
                - Modules (Moduli)
            summary: Cancellazione di più moduli
            description: Cancella i moduli identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei moduli da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /modules/{cle_mod}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Modules (Moduli)
            summary: Specifiche assegnate al modulo per la tipologia
            description: Specifiche assegnate al modulo con chiave {cle_mod} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Modules (Moduli)
            summary: Modifica delle specifiche assegnate al modulo per la tipologia
            description: Modifica le specifiche assegnate al modulo con chiave {cle_mod} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        module:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Parents ####
    /parents:
        get:
            tags:
                - Parents (Genitori)
            summary: Elenco di tutti i genitori
            description: Tabella contenente i JSON dei genitori della base dati, ordinata per cognome poi per nome, indirizzo1 e infine per titolo
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - uid_identifiant
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i genitori che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Dupond, Dupont, Martin]   # ?nom=Dupond,Dupont,Martin
                - name: prenom
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Dominique]   # ?prenom=Dominique
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Dominique, Claude, Camille]   # ?prenom=Dominique,Claude,Camille
                - name: nom_naissance
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi cognomi di nascita
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Dupond]   # ?nom_naissance=Dupond
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Dupond, Dupont, Martin]   # ?nom_naissance=Dupond,Dupont,Martin
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
                - name: cas_identifiant
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo i genitori che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON dei genitori
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Parents'
        post:
            tags:
                - Parents (Genitori)
            summary: Creazione di un nuovo genitore
            description: Crea un nuovo genitore nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      nom_naissance:
                        type: string
                        example: "Rossi"
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      destinataire_courriers_absences:
                        type: boolean
                        example: true
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      profession:
                        type: string
                        example: "docente"
                      situation_professionnelle:
                        type: string
                        example: "in attività"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "Identificativo__connessione"
                      acces_espace_parents:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
                      etudiants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /parents/{cle}:
        get:
            tags:
                - Parents (Genitori)
            summary: JSON del genitore con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del genitore"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Parents (Genitori)
            summary: Aggiornamento parziale di un genitore
            description: Modifica i campi del genitore con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del genitore che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      civilite:
                        type: string
                        example: "Sig.ra"
                      nom_naissance:
                        type: string
                        example: "Rossi"
                      email:
                        type: string
                        example: "nome.cognome@email.it"
                      destinataire_courriers_absences:
                        type: boolean
                        example: true
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      commentaire:
                        type: string
                        example: "Ecco un commento molto utile"
                      profession:
                        type: string
                        example: "docente"
                      situation_professionnelle:
                        type: string
                        example: "in attività"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      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: "Identificativo__connessione"
                      acces_espace_parents:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
                      etudiants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Parents'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: genitore inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Parents (Genitori)
            summary: Cancellazione di un genitore
            description: Cancella definitivamente dalla base il genitore con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /parents/supprimer:
        post:
            tags:
                - Parents (Genitori)
            summary: Cancellazione di più genitori
            description: Cancella i genitori identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei genitori da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Partitions ####
    /partitions:
        get:
            tags:
                - Partitions (Suddivisioni)
            summary: Elenco di tutte le suddivisioni
            description: Tabella contenente i JSON delle suddivisioni della base dati, ordinata per corso poi per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo le suddivisioni che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo le suddivisioni che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: promotion
                  in: query
                  description: restituisce solo le suddivisioni che hanno uno di questi corsi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo corso richiesto
                      value: [12]   # ?promotion=12
                    multipleIds:
                      summary: Esempio con più corsi richiesti
                      value: [12, 15, 18]   # ?promotion=12,15,18
            responses:
              '200':    # status code
                description: Tabella dei JSON delle suddivisioni
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Partitions'
        post:
            tags:
                - Partitions (Suddivisioni)
            summary: Creazione di una nuova suddivisione
            description: Crea una nuova suddivisione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Partitions'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /partitions/{cle}:
        get:
            tags:
                - Partitions (Suddivisioni)
            summary: JSON della suddivisione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della suddivisione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Partitions (Suddivisioni)
            summary: Aggiornamento parziale di una suddivisione
            description: Modifica i campi della suddivisione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della suddivisione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Partitions'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Partitions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: suddivisione inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Partitions (Suddivisioni)
            summary: Cancellazione di una suddivisione
            description: Cancella definitivamente dalla base la suddivisione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /partitions/supprimer:
        post:
            tags:
                - Partitions (Suddivisioni)
            summary: Cancellazione di più suddivisioni
            description: Cancella le suddivisioni identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle suddivisioni da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Promotions ####
    /promotions:
        get:
            tags:
                - Promotions (Corsi)
            summary: Elenco di tutti i corsi
            description: Tabella contenente i JSON dei corsi della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - libelle_long
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i corsi che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i corsi che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo i corsi che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i corsi che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON dei corsi
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Promotions'
        post:
            tags:
                - Promotions (Corsi)
            summary: Creazione di un nuovo corso
            description: Crea un nuovo corso nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "1GM1"
                      code:
                        type: string
                        example: "GM1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      email:
                        type: string
                        example: "1gm1@email.fr"
                      coordinateurs_pedagogiques:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      effectif_saisi:
                        type: integer
                        example: 30
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      gestion_automatique_des_liens:
                        type: boolean
                        example: true
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      calendrier:
                        type: string
                        example: "Calendario1"
                      proprietaire:
                        type: integer
                        example: 10
                      calendrier_notation:
                        type: integer
                        example: 10
                      periodes_hors_calendrier:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      modules_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation_avec_td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      note_seuil_ects_rattrapage:
                        type: string
                        example: "10"
                      autoriser_rattrapage_ects:
                        type: boolean
                        example: true
                      module_attribution_ects_est_par_module:
                        type: boolean
                        example: true
                      mode_calcul_moyenne_generale_est_par_module:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /promotions/{cle}:
        get:
            tags:
                - Promotions (Corsi)
            summary: JSON del corso con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Promotions (Corsi)
            summary: Aggiornamento parziale di un corso
            description: Modifica i campi del corso con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "1GM1"
                      code:
                        type: string
                        example: "GM1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      email:
                        type: string
                        example: "1gm1@email.fr"
                      coordinateurs_pedagogiques:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      effectif_saisi:
                        type: integer
                        example: 30
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      gestion_automatique_des_liens:
                        type: boolean
                        example: true
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      calendrier:
                        type: string
                        example: "Calendario1"
                      proprietaire:
                        type: integer
                        example: 10
                      calendrier_notation:
                        type: integer
                        example: 10
                      periodes_hors_calendrier:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      modules_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation_avec_td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      note_seuil_ects_rattrapage:
                        type: string
                        example: "10"
                      autoriser_rattrapage_ects:
                        type: boolean
                        example: true
                      module_attribution_ects_est_par_module:
                        type: boolean
                        example: true
                      mode_calcul_moyenne_generale_est_par_module:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Anglais.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Promotions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: corso inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Promotions (Corsi)
            summary: Cancellazione di un corso
            description: Cancella definitivamente dalla base il corso con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /promotions/supprimer:
        post:
            tags:
                - Promotions (Corsi)
            summary: Cancellazione di più corsi
            description: Cancella i corsi identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei corsi da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /promotions/{cle}/etudiants:
        get:
            tags:
                - Promotions (Corsi)
            summary: Chiavi degli studenti di un corso
            description: Chiavi degli studenti del corso con chiave {cle} a una data o tra due date. Se non sono specificati parametri, restituisce l'elenco degli studenti alla data odierna.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date=2024-08-06
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiants:
                          type: array
                          items:
                            type: integer
                            example: 10
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/cours:
        get:
            tags:
                - Promotions (Corsi)
            summary: Chiavi delle attività di un corso tra 2 date
            description: Chiavi delle attività del corso con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle_promo}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Promotions (Corsi)
            summary: Periodo di presenza di un corso in un'attività
            description: Periodo di presenza del corso con chiave {cle_promo} per l'attività con chiave {cle_cours}. Il periodo è vuoto se il corso non è nell'attività.
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Promotions (Corsi)
            summary: Modifica del periodo di presenza di un corso in un'attività
            description: Modifica il periodo di presenza del corso con chiave {cle_promo} per l'attività con chiave {cle_cours} Consente di aggiungere un corso a un'attività o di rimuoverla da tale attività Il periodo può essere specificato nell'URL ?domaine=12,24,48. Per impostazione predefinita, viene considerato l'intero periodo.
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/indisponibilites:
        get:
            tags:
                - Promotions (Corsi)
            summary: Indisponibilità di un corso per una settimana
            description: Indisponibilità (in fasce orarie) del corso con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0:00 e l'inizio dell'indisponibilità<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/voeux:
        get:
            tags:
                - Promotions (Corsi)
            summary: Preferenze di un corso per una settimana
            description: Preferenze (in fasce orarie) del corso con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0h00 e l'inizio della preferenza.<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/cout:
        get:
            tags:
                - Promotions (Corsi)
            summary: Costo di un corso su un periodo
            description: Costo del corso con chiave {cle} su un periodo Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/cout:
        get:
            tags:
                - Promotions (Corsi)
            summary: Costi dei corsi su un periodo
            description: Costi dei corsi su un periodo. Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei corsi"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/duree_cours:
        get:
            tags:
                - Promotions (Corsi)
            summary: Durata delle attività di un corso su un periodo
            description: Durata delle attività del corso con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/duree_cours:
        get:
            tags:
                - Promotions (Corsi)
            summary: Durata delle attività dei corsi su un periodo
            description: Durata delle attività dei corsi su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei corsi"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle}/duree_disponible:
        get:
            tags:
                - Promotions (Corsi)
            summary: Durata disponibile di un corso su un periodo
            description: Durata disponibile del corso con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/duree_disponible:
        get:
            tags:
                - Promotions (Corsi)
            summary: Durata disponibile dei corsi su un periodo
            description: Durata disponibile dei corsi su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei corsi"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle_promo}/matieres/{cle_mat}/matiere_personnalisee:
        get:
            tags:
                - Promotions (Corsi)
            summary: Chiave della materia assegnata come materia personalizzata a una materia per un corso
            description: Chiave della materia assegnata come materia personalizzata alla materia con chiave {cle_mat} per il corso con chiave {cle_promo}
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Promotions (Corsi)
            summary: Modifica della materia assegnata come materia personalizzata a una materia per un corso
            description: Modifica la materia assegnata come materia personalizzata alla materia con chiave {cle_mat} per il corso con chiave {cle_promo}
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
                - name: matiere_personnalisee
                  in: query
                  description: chiave della materia da assegnare come materia personalizzata
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_promotion:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /promotions/{cles_promo}/matieres/{cles_mat}/matieres_personnalisees:
        get:
            tags:
                - Promotions (Corsi)
            summary: Chiave della materia assegnata come materia personalizzata a ogni materia per ciascuno dei corsi
            description: Chiave della materia assegnata come materia personalizzata a ogni materia la cui chiave è in {cles_mat} per ciascuno dei corsi la cui chiave è in {cles_promo}
            parameters:
                - name: cles_promo
                  in: path
                  description: chiavi dei corsi desiderati, separati da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_mat
                  in: path
                  description: chiavi delle materie desiderate, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_promotion:
                            type: integer
                            example: 388
                          cle_matiere:
                            type: integer
                            example: 125
                          cle_matiere_personnalisee:
                            type: integer
                            example: 120
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /promotions/{cle_promo}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Promotions (Corsi)
            summary: Specifiche assegnate al corso per la tipologia
            description: Specifiche assegnate al corso con chiave {cle_promo} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Promotions (Corsi)
            summary: Modifica delle specifiche assegnate al corso per la tipologia
            description: Modifica le specifiche assegnate al corso con chiave {cle_promo} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        promotion:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Regroupements ####
    /regroupements:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Elenco di tutti i raggruppamenti
            description: Tabella contenente i JSON dei raggruppamenti della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i raggruppamenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i raggruppamenti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo i raggruppamenti che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i raggruppamenti che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON dei raggruppamenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Regroupements'
        post:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Creazione di un nuovo raggruppamento
            description: Crea un nuovo raggruppamento nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "GM1-2"
                      code:
                        type: string
                        example: "1-2"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      effectif_saisi:
                        type: integer
                        example: 60
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [11,13,15]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      proprietaire:
                        type: integer
                        example: 10
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /regroupements/{cle}:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: JSON del raggruppamento con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Aggiornamento parziale di un raggruppamento
            description: Modifica i campi del raggruppamento con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "GM1-2"
                      code:
                        type: string
                        example: "1-2"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      effectif_saisi:
                        type: integer
                        example: 60
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [11,13,15]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      proprietaire:
                        type: integer
                        example: 10
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Regroupements'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: raggruppamento inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Cancellazione di un raggruppamento
            description: Cancella definitivamente dalla base il raggruppamento con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /regroupements/supprimer:
        post:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Cancellazione di più raggruppamenti
            description: Cancella i raggruppamenti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei raggruppamenti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /regroupements/{cle}/cours:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Chiavi delle attività di un raggruppamento tra 2 date
            description: Chiavi delle attività del raggruppamento con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/{cle_regroup}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Periodo di presenza di un raggruppamento in un'attività
            description: Periodo di presenza del raggruppamento con chiave {cle_regroup} per l'attività con chiave {cle_cours}. Il periodo è vuoto se il raggruppamento non è nell'attività.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Modifica del periodo di presenza di un raggruppamento in un'attività
            description: Modifica il periodo di presenza del raggruppamento con chiave {cle_regroup} per l'attività con chiave {cle_cours} Consente di aggiungere un raggruppamento a un'attività o di rimuoverlo da tale attività Il periodo può essere specificato nell'URL ?domaine=12,24,48. Per impostazione predefinita, viene considerato l'intero periodo.
            parameters:
                - name: cle_regroup
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/{cle}/cout:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Costo di un raggruppamento su un periodo
            description: Costo del raggruppamento con chiave {cle} su un periodo Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/cout:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Costi dei raggruppamenti su un periodo
            description: Costi dei raggruppamenti su un periodo. Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei raggruppamenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/{cle}/duree_cours:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Durata delle attività di un raggruppamento su un periodo
            description: Durata delle attività del raggruppamento con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/duree_cours:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Durata delle attività dei raggruppamenti su un periodo
            description: Durata delle attività dei raggruppamenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei raggruppamenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/{cle}/duree_disponible:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Durata disponibile di un raggruppamento su un periodo
            description: Durata disponibile del raggruppamento con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/duree_disponible:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Durata disponibile dei raggruppamenti su un periodo
            description: Durata disponibile dei raggruppamenti su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei raggruppamenti"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /regroupements/{cle_regroup}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Specifiche assegnate al raggruppamento per la tipologia
            description: Specifiche assegnate al raggruppamento con chiave {cle_regroup} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_regroup
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Regroupements (Raggruppamenti)
            summary: Modifica delle specifiche assegnate al raggruppamento per la tipologia
            description: Modifica le specifiche assegnate al raggruppamento con chiave {cle_regroup} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_regroup
                  in: path
                  description: "chiave del raggruppamento"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        regroupement:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Salles ####
    /salles:
        get:
            tags:
                - Salles (Aule)
            summary: Elenco di tutte le aule
            description: Tabella contenente i JSON delle aule della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo le aule che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo le aule che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo le aule che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo le aule che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON delle aule
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Salles'
        post:
            tags:
                - Salles (Aule)
            summary: Creazione di una nuova aula
            description: Crea una nuova aula nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Salle 001"
                      code:
                        type: string
                        example: "001"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      capacite:
                        type: integer
                        example: 50
                      acces_pmr:
                        type: boolean
                        example: true
                      chaises_ergo:
                        type: integer
                        example: 5
                      handiboucle:
                        type: boolean
                        example: true
                      nombre_salles_max:
                        type: integer
                        example: 10
                      proprietaire:
                        type: integer
                        example: 10
                      publication:
                        type: string
                        example: "Pubblicato su tutte le Aree"
                      site:
                        type: string
                        example: "Principale"
                      descriptif:
                        type: string
                        example: "Descrizione dell'aula"
                      descriptif_publie:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      est_dans_groupe_de_salle:
                        type: integer
                        example: 10
                        description: "attention, seulement pour les salles simples"
                      salles_de_ce_groupe_de_salle:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                        description: "attention, seulement pour les groupes de salles"
                      cout_horaire:
                        type: integer
                        example: 10
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /salles/{cle}:
        get:
            tags:
                - Salles (Aule)
            summary: JSON dell'aula con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Salles (Aule)
            summary: Aggiornamento parziale di un'aula
            description: Modifica i campi dell'aula con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Salle 001"
                      code:
                        type: string
                        example: "001"
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      capacite:
                        type: integer
                        example: 50
                      acces_pmr:
                        type: boolean
                        example: true
                      chaises_ergo:
                        type: integer
                        example: 5
                      handiboucle:
                        type: boolean
                        example: true
                      nombre_salles_max:
                        type: integer
                        example: 10
                      proprietaire:
                        type: integer
                        example: 10
                      publication:
                        type: string
                        example: "Pubblicato su tutte le Aree"
                      site:
                        type: string
                        example: "Principale"
                      descriptif:
                        type: string
                        example: "Descrizione dell'aula"
                      descriptif_publie:
                        type: boolean
                        example: true
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
                      est_dans_groupe_de_salle:
                        type: integer
                        example: 10
                        description: "attention, seulement pour les salles simples"
                      salles_de_ce_groupe_de_salle:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                        description: "attention, seulement pour les groupes de salles"
                      cout_horaire:
                        type: integer
                        example: 10
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Salles'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: aula inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Salles (Aule)
            summary: Cancellazione di un'aula
            description: Cancella definitivamente dalla base l'aula con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /salles/supprimer:
        post:
            tags:
                - Salles (Aule)
            summary: Cancellazione di più aule
            description: Cancella le aule identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle aule da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /salles/{cle}/cours:
        get:
            tags:
                - Salles (Aule)
            summary: Chiavi delle attività di un'aula tra 2 date
            description: Chiavi delle attività dell'aula con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle_salle}/cours/{cle_cours}/domaine:
        get:
            tags:
                - Salles (Aule)
            summary: Periodo di presenza di un'aula in un'attività
            description: Periodo di presenza dell'aula con chiave {cle_salle} per l'attività con chiave {cle_cours}. Il periodo è vuoto se l'aula non è nell'attività.
            parameters:
                - name: cle_salle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Salles (Aule)
            summary: Modifica del periodo di presenza di un'aula in un'attività
            description: Modifica il periodo di presenza dell'aula con chiave {cle_salle} per l'attività con chiave {cle_cours} Consente di aggiungere un'aula a un'attività o di rimuoverla da tale attività Il periodo può essere specificato nell'URL ?domaine=12,24,48. Per impostazione predefinita, viene considerato l'intero periodo.
            parameters:
                - name: cle_salle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle}/indisponibilites:
        get:
            tags:
                - Salles (Aule)
            summary: Indisponibilità di un'aula per una settimana
            description: Indisponibilità (in fasce orarie) dell'aula con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0:00 e l'inizio dell'indisponibilità<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_salle:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle}/voeux:
        get:
            tags:
                - Salles (Aule)
            summary: Preferenze di un'aula per una settimana
            description: Preferenze (in fasce orarie) dell'aula con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0h00 e l'inizio della preferenza.<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_salle:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle}/cout:
        get:
            tags:
                - Salles (Aule)
            summary: Costo di un'aula su un periodo
            description: Costo dell'aula con chiave {cle} su un periodo Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/cout:
        get:
            tags:
                - Salles (Aule)
            summary: Costi delle aule su un periodo
            description: Costi delle aule su un periodo. Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle aule"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle}/duree_cours:
        get:
            tags:
                - Salles (Aule)
            summary: Durata delle attività di un'aula su un periodo
            description: Durata delle attività dell'aula con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/duree_cours:
        get:
            tags:
                - Salles (Aule)
            summary: Durata delle attività delle aule su un periodo
            description: Durata delle attività delle aule su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle aule"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle}/duree_disponible:
        get:
            tags:
                - Salles (Aule)
            summary: Durata disponibile di un'aula su un periodo
            description: Durata disponibile dell'aula con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/duree_disponible:
        get:
            tags:
                - Salles (Aule)
            summary: Durata disponibile delle aule su un periodo
            description: Durata disponibile delle aule su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi delle aule"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /salles/{cle_salle}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Salles (Aule)
            summary: Specifiche assegnate all'aula per la tipologia
            description: Specifiche assegnate all'aula con chiave {cle_salle} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_salle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Salles (Aule)
            summary: Modifica delle specifiche assegnate all'aula per la tipologia
            description: Modifica le specifiche assegnate all'aula con chiave {cle_salle} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_salle
                  in: path
                  description: "chiave dell'aula"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        salle:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### TDOptions ####
    /tdoptions:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Elenco di tutti i gruppi / opzioni
            description: Tabella contenente i JSON dei gruppi / opzioni della base dati, ordinata per nome poi per codice di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - code
                      - uid_identifiant
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, code]   # ?select=cle,nom,code
                - name: cle
                  in: query
                  description: restituisce solo i gruppi / opzioni che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i gruppi / opzioni che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: code
                  in: query
                  description: restituisce solo i gruppi / opzioni che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [mths]   # ?code=mths
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [mths, fr, hist]   # ?code=mths,fr,hist
                - name: uid_identifiant
                  in: query
                  description: restituisce solo i gruppi / opzioni che hanno uno di questi uid_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo UID richiesto
                      value: [mths]   # ?uid_identifiant=mths
                    multipleIds:
                      summary: Esempio con più identificativi UID richiesti
                      value: [mths, fr, hist]   # ?uid_identifiant=mths,fr,hist
            responses:
              '200':    # status code
                description: Tabella dei JSON dei gruppi / opzioni
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/TDOptions'
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Creazione di un nuovo gruppo / opzione
            description: Crea un nuovo gruppo / opzione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "TD1"
                      code:
                        type: string
                        example: "1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      genre:
                        type: string
                        example: "TD"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      effectif_saisi:
                        type: integer
                        example: 10
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      email:
                        type: string
                        example: "TD1@mail.fr"
                      proprietaire:
                        type: integer
                        example: 10
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      calendrier:
                        type: string
                        example: "Calendario1"
                      promotion:
                        type: integer
                        example: 10
                      partition:
                        type: integer
                        example: 9
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /tdoptions/{cle}:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: JSON del gruppo / opzione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Aggiornamento parziale di un gruppo / opzione
            description: Modifica i campi dei gruppi / opzioni con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione che si vuole aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "TD1"
                      code:
                        type: string
                        example: "1"
                      couleur:
                        type: string
                        example: "#FFFF80"
                      genre:
                        type: string
                        example: "TD"
                      uid_identifiant:
                        type: string
                        example: "Identificativo__UID"
                      effectif_saisi:
                        type: integer
                        example: 10
                      mhh:
                        type: number
                        example: 0
                      mhj:
                        type: number
                        example: 0.416666666666667
                      libelle_long:
                        type: string
                        example: "Ecco un nome un po' più lungo"
                      email:
                        type: string
                        example: "TD1@mail.fr"
                      proprietaire:
                        type: integer
                        example: 10
                      publication_sur_tous_les_espaces:
                        type: boolean
                        example: true
                      calendrier:
                        type: string
                        example: "Calendario1"
                      promotion:
                        type: integer
                        example: 10
                      partition:
                        type: integer
                        example: 9
                      regroupement:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      services_notation:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      url_ical:
                        type: string
                        example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/TDOptions'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: gruppo / opzione inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Cancellazione di un gruppo / opzione
            description: Cancella definitivamente dalla base il gruppo / opzione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /tdoptions/supprimer:
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Cancellazione di più gruppi / opzioni
            description: Cancella i gruppi / opzioni identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei gruppi / opzioni da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /tdoptions/{cle}/etudiants:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Chiavi degli studenti di un gruppo / opzione
            description: Chiavi degli studenti del gruppo / opzione con chiave {cle} in una data specifica o tra due date. Se non sono specificati parametri, restituisce l'elenco degli studenti alla data odierna.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: date
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date=2024-08-06
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                  example: "2024-08-08"   # ?date_fin=2024-08-08
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        etudiants:
                          type: array
                          items:
                            type: integer
                            example: 10
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/cours:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Chiavi delle attività di un gruppo / opzione tra 2 date
            description: Chiavi delle attività del gruppo / opzione con chiave {cle} tra 2 date Se non sono specificati parametri, restituisce l'elenco delle attività sull'intero periodo.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: date_debut
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
                - name: date_fin
                  in: query
                  description: Data in formato stringa 'yyyy-mm-dd'
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cours:
                          type: array
                          items:
                            type: integer
                          example: [388,400]
              '400':    # status code
                description: "Parametro non valido: Date fuori limite, formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle_TDOpt}/cours/{cle_cours}/domaine:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Periodo di presenza di un gruppo / opzione in un'attività
            description: Periodo di presenza del gruppo / opzione con chiave {cle_TDOpt} per l'attività con chiave {cle_cours}. Il periodo è vuoto se il gruppo / opzione non è nell'attività.
            parameters:
                - name: cle_TDOpt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Modifica del periodo di presenza di un gruppo / opzione in un'attività
            description: Modifica il periodo di presenza del gruppo / opzione con chiave {cle_TDOpt} per l'attività con chiave {cle_cours} Consente di aggiungere un gruppo / opzione a un'attività o di rimuoverli da tale attività Il periodo può essere specificato nell'URL ?domaine=12,24,48. Per impostazione predefinita, viene considerato l'intero periodo.
            parameters:
                - name: cle_TDOpt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_cours
                  in: path
                  description: "chiave dell'attività"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [1, 2, 3]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/indisponibilites:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Indisponibilità di un gruppo / opzione per una settimana
            description: Indisponibilità (in fasce orarie) del gruppo / opzione con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0:00 e l'inizio dell'indisponibilità<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_indisponibilites:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/voeux:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Preferenze di un gruppo / opzione per una settimana
            description: Preferenze (in fasce orarie) del gruppo / opzione con chiave {cle} per una settimana<br>
                         Se non sono specificati parametri, restituisce la prima settimana<br>
                         Una fascia oraria corrisponde alla durata trascorsa tra il lunedì alle 0h00 e l'inizio della preferenza.<br>
                         Attenzione, le durate sono espresse in 'giorni'.<br>
                         Per esempio, lunedì a mezzogiorno = 12:00 = 12/24esimi di giorno = 0,5 giorni.<br>
                         Mercoledì mezzogiorno = 24h (intero lunedì) + 24h (intero martedì) + 12h (del mercoledì) = 60/24esimi = 2.5 giorni
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: semaine
                  in: query
                  description: settimana
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        semaine:
                          type: integer
                          example: 12
                        places_voeux:
                          type: array
                          items:
                            type: number
                            example: 0.5
              '400':    # status code
                description: "Parametro non valido: settimana"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/cout:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Costo di un gruppo / opzione su un periodo
            description: Costo del gruppo / opzione con chiave {cle} su un periodo Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/cout:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Costi dei gruppi / opzioni su un periodo
            description: Costi dei gruppi / opzioni su un periodo. Se non sono specificati parametri, restituisce il costo sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei gruppi / opzioni"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        date_debut:
                          type: string
                          example: "2024_12_06"
                        date_fin:
                          type: string
                          example: "2024_12_26"
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        cout:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              cout:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/duree_cours:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Durata delle lezioni di un gruppo / opzione su un periodo
            description: Durata delle attività dei gruppi / opzioni con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/duree_cours:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Durata delle attività dei gruppi / opzioni su un periodo
            description: Durata delle attività dei gruppi / opzioni su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo, inclusi i giorni festivi e le attività non piazzate.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei gruppi / opzioni"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
                - name: avec_cours_non_places
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione le attività non piazzate o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        avec_cours_non_places:
                          type: boolean
                          example: true
                        duree_cours:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle}/duree_disponible:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Durata disponibile di un gruppo / opzione su un periodo
            description: Durata disponibile del gruppo / opzione con chiave {cle} sul periodo Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: number
                          example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/duree_disponible:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Durata disponibile dei gruppi / opzioni su un periodo
            description: Durata disponibile dei gruppi / opzioni su un periodo. Se non sono specificati parametri, restituisce la durata sull'intero periodo includendo i giorni festivi.
            parameters:
                - name: cles
                  in: query
                  description: "chiavi dei gruppi / opzioni"
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: domaine
                  in: query
                  description: Periodo (tabella delle settimane)
                  schema:
                    type: array
                    items:
                      type: integer
                - name: avec_jours_feries
                  in: query
                  description: Booleano che indica se si desidera prendere in considerazione i giorni festivi o meno
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        domaine:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        avec_jours_feries:
                          type: boolean
                          example: true
                        duree_disponible:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 10
                              duree:
                                type: number
                                example: 0.5
              '400':    # status code
                description: "Parametro non valido: formato non corretto"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle_tdopt}/matieres/{cle_mat}/matiere_personnalisee:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Chiave della materia assegnata come materia personalizzata a una materia per un gruppo / opzione
            description: Chiave della materia assegnata come materia personalizzata alla materia con chiave {cle_mat} per il gruppo / opzione con chiave {cle_TDOpt}
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Modifica della materia assegnata come materia personalizzata a una materia per un gruppo / opzione
            description: Modifica la materia assegnata come materia personalizzata alla materia con chiave {cle_mat} per il gruppo / opzione con chiave {cle_TDOpt}
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_mat
                  in: path
                  description: "chiave della materia"
                  required: true
                  schema:
                    type: integer
                - name: matiere_personnalisee
                  in: query
                  description: chiave della materia da assegnare come materia personalizzata
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_tdoption:
                          type: integer
                          example: 388
                        cle_matiere:
                          type: integer
                          example: 125
                        cle_matiere_personnalisee:
                          type: integer
                          example: 120
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /tdoptions/{cles_tdopt}/matieres/{cles_mat}/matieres_personnalisees:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Chiave della materia assegnata come materia personalizzata a ogni materia per ciascuno dei gruppi / opzioni
            description: Chiave della materia assegnata come materia personalizzata a ogni materia la cui chiave è in {cles_mat} per ciascuno dei gruppi / opzioni la cui chiave è in {cles_TDOpt}
            parameters:
                - name: cles_tdopt
                  in: path
                  description: chiavi dei gruppi / opzioni desiderati, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_mat
                  in: path
                  description: chiavi delle materie desiderate, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_tdoption:
                            type: integer
                            example: 388
                          cle_matiere:
                            type: integer
                            example: 125
                          cle_matiere_personnalisee:
                            type: integer
                            example: 120
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /tdoptions/{cle_tdopt}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Specifiche assegnate al gruppo / opzione per la tipologia
            description: Specifiche assegnate al gruppo / opzione con chiave {cle_tdopt} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - TDOptions (Gruppi e Opzioni)
            summary: Modifica delle specifiche assegnate al gruppo / opzione per la tipologia
            description: Modifica le specifiche assegnate al gruppo / opzione con chiave {cle_tdopt} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_tdopt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        td_option:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Baccalaureats ####
    /baccalaureats:
        get:
            tags:
                - Baccalaureats (Diplomi di maturità)
            summary: Elenco di tutti i diplomi di maturità
            description: Tabella contenente i JSON dei diplomi di maturità della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                      - type
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: restituisce solo i diplomi di maturità che hanno uno di questi nomi
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [SCIENTIFIQUE]   # ?nom=SCIENTIFIQUE
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [SCIENTIFIQUE, LITTÉRAIRE]   # ?nom=SCIENTIFIQUE,LITTÉRAIRE
                - name: code
                  in: query
                  description: restituisce solo i diplomi di maturità che hanno uno di questi codici
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [S]   # ?code=S
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [S, L]   # ?code=S,L
                - name: type
                  in: query
                  description: restituisce solo i diplomi di maturità che hanno uno di questi tipi
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo tipo richiesto
                      value: [Autre]   # ?type=Autre
                    multipleIds:
                      summary: Esempio con più tipi richiesti
                      value: [Autre, Équivalence]   # ?type=Autre,Équivalence
            responses:
              '200':    # status code
                description: Tabella dei JSON dei diplomi di maturità
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Baccalaureats'
    /baccalaureats/{code}:
        get:
            tags:
                - Baccalaureats (Diplomi di maturità)
            summary: JSON del diploma di maturità con codice {code}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: code
                  in: path
                  description: "codice del diploma di maturità"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Baccalaureats'
              '400':    # status code
                description: "Parametro non valido"
    #### Baccalaureat_specialites ####
    /baccalaureat_specialites:
        get:
            tags:
                - Baccalaureat_specialites (Indirizzi dei diplomi di maturità)
            summary: Elenco di tutti gli indirizzi di maturità
            description: Tabella contenente i JSON degli indirizzi di maturità della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: restituisce solo i diplomi di maturità che hanno uno di questi nomi
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [MATHEMATIQUES]   # ?nom=MATHEMATIQUES
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [MATHEMATIQUES, PHYSIQUE-CHIMIE]   # ?nom=MATHEMATIQUES,PHYSIQUE-CHIMIE
                - name: code
                  in: query
                  description: restituisce solo i diplomi di maturità che hanno uno di questi codici
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [MATHS]   # ?code=MATHS
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [MATHS, PHY_CHI]   # ?code=MATHS,PHY_CHI
            responses:
              '200':    # status code
                description: Tabella del JSON degli indirizzi di maturità
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Baccalaureat_specialites'
    /baccalaureat_specialites/{code}:
        get:
            tags:
                - Baccalaureat_specialites (Indirizzi dei diplomi di maturità)
            summary: JSON degli indirizzi di maturità con codice {code}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: code
                  in: path
                  description: "codice dell'indirizzo del diploma di maturità"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Baccalaureat_specialites'
              '400':    # status code
                description: "Parametro non valido"
    #### Departements ####
    /departements:
        get:
            tags:
                - Departements (Dipartimenti (solo versione francese))
            summary: Elenco di tutti i dipartimenti
            description: Tabella contenente i JSON dei dipartimenti della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: restituisce solo i dipartimenti che hanno uno di questi nomi
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Ain]   # ?nom=Ain
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Ain, Aisne, Allier]   # ?nom=Ain,Aisne,Allier
                - name: code
                  in: query
                  description: restituisce solo i dipartimenti che hanno uno di questi codici
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [001]   # ?code=001
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [001, 002, 003]   # ?code=001,002,003
            responses:
              '200':    # status code
                description: Tabella dei JSON dei dipartimenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Departements'
    /departements/{code}:
        get:
            tags:
                - Departements (Dipartimenti (solo versione francese))
            summary: JSON del dipartimento con codice {code}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: code
                  in: path
                  description: "codice del dipartimento"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Departements'
              '400':    # status code
                description: "Parametro non valido"
    #### Type_dernier_diplome ####
    /type_dernier_diplome:
        get:
            tags:
                - Type_dernier_diplome (Tipi di ultimo diploma)
            summary: Elenco di tutti i tipi di ultimi diplomi
            description: Tabella contenente i JSON dei tipi dell'ultimo diploma della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - nom
                      - code
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, code]   # ?select=nom,code
                - name: nom
                  in: query
                  description: restituisce solo i tipi di ultimo diploma che hanno uno di questi nomi
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [BTS]   # ?nom=BTS
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [BTS, DUT]   # ?nom=BTS,DUT
                - name: code
                  in: query
                  description: restituisce solo il tipo di ultimo diploma che hanno uno di questi codici
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [B]   # ?code=B
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [B, C, A]   # ?code=B,C,A
            responses:
              '200':    # status code
                description: Tabella dei JSON dei tipi di ultimo diploma
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Type_dernier_diplome'
    /type_dernier_diplome/{code}:
        get:
            tags:
                - Type_dernier_diplome (Tipi di ultimo diploma)
            summary: JSON del tipo dell'ultimo diploma con codice {code}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: code
                  in: path
                  description: "codice del tipo di ultimo diploma"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Type_dernier_diplome'
              '400':    # status code
                description: "Parametro non valido"
    #### Etablissement_origine ####
    /etablissement_origine:
        get:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: Elenco di tutti gli istituti di provenienza
            description: Tabella contenente i JSON degli istituti di provenienza della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, email]   # ?select=cle,nom,email
                - name: cle
                  in: query
                  description: Filtro sulle chiavi degli istituti di provenienza
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtro sui nomi degli istituti di provenienza
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Etab1]   # ?nom=Etab1
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Etab1, Etab2, Etab3]   # ?nom=Etab1,Etab2,Etab3
                - name: email
                  in: query
                  description: Filtro sugli indirizzi e-mail degli istituti di provenienza
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola e-mail richiesta
                      value: [Etab1@email.fr]   # ?email=Etab1@email.fr
                    multipleIds:
                      summary: Esempio con più e-mail richieste
                      value: [Etab1@email.fr, Etab2@email.fr]   # ?email=Etab1@email.fr,Etab2@email.fr
            responses:
              '200':    # status code
                description: Tabella dei JSON degli istituti di provenienza
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Etablissement_origine'
        post:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: Creazione di un nuovo istituto di provenienza
            description: Crea un nuovo istituto di provenienza nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Etablissement_origine'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /etablissement_origine/{cle}:
        get:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: JSON dell'istituto di provenienza con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'istituto di provenienza"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: Aggiornamento parziale di un istituto di provenienza
            description: Modifica i campi dell'istituto di provenienza con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'istituto di provenienza che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Etablissement_origine'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Etablissement_origine'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: Cancellazione di un istituto di provenienza
            description: Cancella definitivamente dalla base l'istituto di provenienza con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /etablissement_origine/supprimer:
        post:
            tags:
                - Etablissement_origine (Istituto di provenienza)
            summary: Cancellazione di più istituti di provenienza
            description: Cancella gli istituti di provenienza identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli istituti di provenienza da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Semaines ####
    /semaines:
        get:
            tags:
                - Semaines (Settimane)
            summary: Elenco di tutte le settimane
            description: Tabella contenente i JSON delle settimane della base dati, con la settimana calendario corrispondente e la data di inizio
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [numero_semaine]   # ?select=numero_semaine
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [numero_semaine, numero_calendaire]   # ?select=numero_semaine,numero_calendaire
                - name: numero_semaine
                  in: query
                  description: restituisce solo le settimane che hanno uno di questi numeri
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo numero richiesto
                      value: [10]   # ?numero_semaine=10
                    multipleIds:
                      summary: Esempio con più numeri richiesti
                      value: [10, 14, 15]   # ?numero_semaine=10,14,15
                - name: numero_calendaire
                  in: query
                  description: restituisce solo le settimane che hanno uno di questi numeri di calendario
                  style: form
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo numero richiesto
                      value: [1]   # ?numero_calendaire=1
                    multipleIds:
                      summary: Esempio con più numeri richiesti
                      value: [1, 2, 3]   # ?numero_calendaire=1,2,3
            responses:
              '200':    # status code
                description: Tabella dei JSON delle settimane
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Semaines'
    /semaines/{numero_semaine}:
        get:
            tags:
                - Semaines (Settimane)
            summary: JSON della settimana numero {numero_semaine}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: numero_semaine
                  in: path
                  description: "numero della settimana"
                  required: true
                  schema:
                    type: integer
                    example: 10
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Semaines'
              '400':    # status code
                description: "Parametro non valido: numero della settimana fuori limite"
    #### Sites ####
    /sites:
        get:
            tags:
                - Sites (Sedi)
            summary: Elenco di tutte le sedi
            description: Tabella contenente i JSON le sedi della base dati, ordinata per nome
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, couleur]   # ?select=nom,couleur
                - name: nom
                  in: query
                  description: Filtro sui nomi delle sedi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [site1]   # ?nom=site1
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [site1, site2, site3]   # ?nom=site1,site2,site3
            responses:
              '200':    # status code
                description: Tabella dei JSON delle sedi
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Sites'
              '405':    # status code
                description: "Diritti insufficienti: Gestione delle sedi disattivata"
    /sites/{nom}:
        get:
            tags:
                - Sites (Sedi)
            summary: JSON della sede con nome {nom}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: nom
                  in: path
                  description: "nome della sede"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Sites'
              '404':    # status code
                description: "Parametro non valido"
              '405':    # status code
                description: "Diritti insufficienti: Gestione delle sedi disattivata"
        post:
            tags:
                - Sites (Sedi)
            summary: Aggiornamento parziale di una sede
            description: Modifica il campo colore della sede di nome {nom} utilizzando quello presente nel BODY in formato JSON
            parameters:
                - name: nom
                  in: path
                  description: "nome della sede che si desidera aggiornare"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenente il campo colore e il suo valore. Possibilità di modificare solo il colore di una sede tramite il Web Service.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Sites'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Sites'
              '400':    # status code
                description: "Parametri non validi: problema di dimensione..."
              '405':    # status code
                description: "Diritti insufficienti: Gestione delle sedi disattivata"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
    #### Types ####
    /types:
        get:
            tags:
                - Types (Tipi di attività)
            summary: Elenco di tutti i tipi di attività
            description: Tabella contenente i JSON dei tipi di attività della base dati, ordinata per nome
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [nom]   # ?select=nom
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [nom, couleur]   # ?select=nom,couleur
                - name: nom
                  in: query
                  description: Filtro sui nomi dei tipi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [cours]   # ?nom=cours
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [cours, td, tp]   # ?nom=cours,td,tp
            responses:
              '200':    # status code
                description: Tabella dei JSON dei tipi
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Types'
    /types/{nom}:
        get:
            tags:
                - Types (Tipi di attività)
            summary: JSON del tipo di attività con nome {nom}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: nom
                  in: path
                  description: "nome del tipo di attività"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Types'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Types (Tipi di attività)
            summary: Aggiornamento parziale di un tipo di attività
            description: Modifica i campi couleur e mode_appel del tipo di attività di nome {nom} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: nom
                  in: path
                  description: "nome del tipo di attività che si desidera aggiornare"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Types'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Types'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Non trovato: il cognome specificato non esiste"
        delete:
            tags:
                - Types (Tipi di attività)
            summary: Cancellazione di un tipo di attività
            description: Cancella definitivamente dalla base il tipo di attività con nome {nom}
            parameters:
                - name: nom
                  in: path
                  description: nome del tipo di attività da cancellare
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Non trovato: il cognome specificato non esiste"
    /types/{nom}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Types (Tipi di attività)
            summary: Specifiche assegnate al tipo di attività per la tipologia
            description: Specifiche assegnate al tipo di attività con nome {nom} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: nom
                  in: path
                  description: "nome del tipo di attività"
                  required: true
                  schema:
                    type: string
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        type:
                          type: string
                          example: "cours"
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: nome dell'elemento o chiave della tipologia errati"
        post:
            tags:
                - Types (Tipi di attività)
            summary: Modifica delle specifiche assegnate al tipo di attività per la tipologia
            description: Modifica le specifiche assegnate al tipo di attività con nome {nom} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: nom
                  in: path
                  description: "nome del tipo di attività"
                  required: true
                  schema:
                    type: string
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        type:
                          type: string
                          example: "cours"
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: nome dell'elemento o chiave della tipologia errati"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Motifs_annulation ####
    /motifs_annulation:
        get:
            tags:
                - Motifs_annulation (Motivi di annullamento)
            summary: Elenco di tutti i motivi di annullamento
            description: Tabella contenente i JSON dei motivi di annullamento della base dati, ordinata per nome
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [libelle]   # ?select=libelle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [libelle, par_defaut, est_remunere]   # ?select=libelle,par_defaut,est_remunere
                - name: libelle
                  in: query
                  description: restituisce solo i motivi di annullamento che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
                - name: par_defaut
                  in: query
                  description: restituisce solo i motivi di annullamento predefiniti o non predefiniti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_remunere
                  in: query
                  description: restituisce solo i motivi di annullamento retribuiti o non retribuiti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_utilisable_par_enseignants
                  in: query
                  description: restituisce solo i motivi di annullamento utilizzabili o meno dai docenti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: Tabella dei JSON dei motivi di annullamento
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_annulation'
    /motifs_annulation/{libelle}:
        get:
            tags:
                - Motifs_annulation (Motivi di annullamento)
            summary: JSON del motivo di annullamento con nome {libelle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: libelle
                  in: path
                  description: "nome del motivo di annullamento"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_annulation'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Motifs_annulation (Motivi di annullamento)
            summary: Aggiornamento parziale di un motivo di annullamento
            description: Modifica i campi del motivo di annullamento con nome {libelle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: libelle
                  in: path
                  description: "nome del motivo di annullamento che si desidera aggiornare"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Motifs_annulation'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_annulation'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: motivo di annullamento inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Motifs_annulation (Motivi di annullamento)
            summary: Cancellazione di un motivo di annullamento
            description: Cancella definitivamente dalla base il motivo di annullamento con nome {libelle}
            parameters:
                - name: libelle
                  in: path
                  description: nome del motivo di annullamento da cancellare
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: il nome specificato non esiste"
    #### Motifs_absence_retard ####
    /motifs_absence_retard:
        get:
            tags:
                - Motifs_absence_retard (Motivi di assenza e ritardo)
            summary: Elenco di tutti i motivi di assenza e di ritardo
            description: Tabella contenente i JSON dei motivi di assenza e ritardo della base dati, ordinata per nome
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [libelle]   # ?select=libelle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [libelle, actif_absence, par_defaut_absence]   # ?select=libelle,actif_absence,par_defaut_absence
                - name: libelle
                  in: query
                  description: restituisce solo i motivi di assenza e di ritardo che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
                - name: code
                  in: query
                  description: restituisce solo i motivi di assenza e di ritardo che hanno uno di questi codici
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo codice richiesto
                      value: [Annulation]   # ?code=Annulation
                    multipleIds:
                      summary: Esempio con più codici richiesti
                      value: [Annulation, Annulation2]   # ?code=Annulation,Annulation2
                - name: par_defaut_absence
                  in: query
                  description: restituisce solo i motivi di assenza predefiniti o non predefiniti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: actif_absence
                  in: query
                  description: restituisce solo i motivi di assenza attivi o non attivi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_justifie_absence
                  in: query
                  description: restituisce solo i motivi di assenza il cui stato è giustificato o non giustificato
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: par_defaut_retard
                  in: query
                  description: restituisce solo i motivi di ritardo predefiniti o non predefiniti
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: actif_retard
                  in: query
                  description: restituisce solo i motivi di ritardo attivi o non attivi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
                - name: est_justifie_retard
                  in: query
                  description: restituisce solo i motivi di ritardo il cui statuto è giustificato o non giustificato
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: boolean
            responses:
              '200':    # status code
                description: Tabella dei JSON dei motivi di assenza e ritardo
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_absence_retard'
    /motifs_absence_retard/{libelle}:
        get:
            tags:
                - Motifs_absence_retard (Motivi di assenza e ritardo)
            summary: JSON del motivo di assenza e ritardo con nome {libelle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: libelle
                  in: path
                  description: "nome del motivo di assenza e di ritardo"
                  required: true
                  schema:
                    type: string
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_absence_retard'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Motifs_absence_retard (Motivi di assenza e ritardo)
            summary: Aggiornamento parziale di un motivo di assenza e ritardo
            description: Modifica i campi del motivo di assenza e ritardo con nome {libelle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: libelle
                  in: path
                  description: "nome del motivo di assenza e di ritardo che si desidera aggiornare"
                  required: true
                  schema:
                    type: string
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Motifs_absence_retard'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Motifs_absence_retard'
              '400':    # status code
                description: "Parametro non valido"
              '404':    # status code
                description: "Parametro non valido: motivo di assenza e ritardo inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Motifs_absence_retard (Motivi di assenza e ritardo)
            summary: Cancellazione di un motivo di assenza e ritardo
            description: Cancella definitivamente dalla base il motivo di assenza o ritardo con nome {libelle}
            parameters:
                - name: libelle
                  in: path
                  description: nome del motivo di assenza e ritardo da cancellare
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: il nome specificato non esiste"
    #### Motifs_decharge ####
    /motifs_decharge:
        get:
            tags:
                - Motifs_decharge (Motivi di extra docenza)
            summary: Elenco di tutti i motivi di extra docenza
            description: Tabella contenente i JSON dei motivi di esonero della base dati, ordinata per nome
            parameters:
                - name: libelle
                  in: query
                  description: restituisce solo i motivi di extra docenza che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
            responses:
              '200':    # status code
                description: Tabella dei JSON dei motivi di extra docenza
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_decharge'
    /motifs_decharge/{libelle}:
        delete:
            tags:
                - Motifs_decharge (Motivi di extra docenza)
            summary: Cancellazione di un motivo di extra docenza
            description: Cancella definitivamente dalla base il motivo di extra docenza con nome {libelle}
            parameters:
                - name: libelle
                  in: path
                  description: nome del motivo di extra docenza da cancellare
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: il nome specificato non esiste"
    #### Motifs_dispense ####
    /motifs_dispense:
        get:
            tags:
                - Motifs_dispense (Motivi di esonero)
            summary: Elenco di tutti i motivi di esonero
            description: Tabella contenente i JSON dei motivi di esonero della base dati, ordinata per nome
            parameters:
                - name: libelle
                  in: query
                  description: restituisce solo i motivi di esonero che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Annulation]   # ?libelle=Annulation
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Annulation, Annulation2]   # ?libelle=Annulation,Annulation2
            responses:
              '200':    # status code
                description: Tabella dei JSON dei motivi di esonero
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Motifs_dispense'
    /motifs_dispense/{libelle}:
        delete:
            tags:
                - Motifs_dispense (Motivi di esonero)
            summary: Cancellazione di un motivo di esonero
            description: Cancella definitivamente dalla base il motivo di esonero con nome {libelle}
            parameters:
                - name: libelle
                  in: path
                  description: nome del motivo di esonero da cancellare
                  required: true
                  schema:
                    type: string
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: il nome specificato non esiste"
    #### Ponderations ####
    /ponderations:
        get:
            tags:
                - Ponderations (Coefficienti)
            summary: Elenco di tutti i coefficienti
            description: Tabella contenente i JSON dei coefficienti della base dati, ordinata per valore di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - valeur
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, numerateur, denominateur]   # ?select=cle,numerateur,denominateur
                - name: cle
                  in: query
                  description: restituisce solo i coefficienti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: numerateur
                  in: query
                  description: restituisce solo i coefficienti che hanno uno di questi numeratori
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo numeratore richiesto
                      value: [10]   # ?numerateur=10
                    multipleIds:
                      summary: Esempio con più numeratori richiesti
                      value: [10, 20, 30]   # ?numerateur=10,20,30
                - name: denominateur
                  in: query
                  description: restituisce solo i coefficienti che hanno uno di questi denominatori
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo denominatore richiesto
                      value: [20]   # ?denominateur=20
                    multipleIds:
                      summary: Esempio con più denominatori richiesti
                      value: [20, 40, 60]   # ?denominateur=20,40,60
            responses:
              '200':    # status code
                description: Tabella dei JSON dei coefficienti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Ponderations'
              '403':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Ponderations (Coefficienti)
            summary: Creazione di un nuovo coefficiente
            description: Crea un nuovo coefficiente nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Ponderations'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '400':    # status code
                description: "Parametri non validi: Numeratore e denominatore obbligatori"
              '403':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Creazione impossibile"
    /ponderations/{cle}:
        get:
            tags:
                - Ponderations (Coefficienti)
            summary: JSON del coefficiente con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del coefficiente"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Ponderations (Coefficienti)
            summary: Aggiornamento parziale di un coefficiente
            description: Modifica i campi del coefficiente con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del coefficiente che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Ponderations'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Ponderations'
              '400':    # status code
                description: "Parametro non valido"
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Parametro non valido: coefficiente inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Ponderations (Coefficienti)
            summary: Cancellazione di un coefficiente
            description: Cancella definitivamente dalla base il coefficiente con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /ponderations/supprimer:
        post:
            tags:
                - Ponderations (Coefficienti)
            summary: Cancellazione di più coefficienti
            description: Cancella i coefficienti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei coefficienti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '403':    # status code
                description: "Diritti insufficienti"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Profils_utilisation ####
    /profils_utilisation:
        get:
            tags:
                - Profils_utilisation (Profili di utilizzo)
            summary: Elenco di tutti i profili di utilizzo
            description: Tabella contenente i JSON dei profili di utilizzo della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom]   # ?select=cle,nom
                - name: cle
                  in: query
                  description: restituisce solo i profili di utilizzo che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo i profili di utilizzo che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [admin]   # ?nom=admin
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [admin, modif, consult]   # ?nom=admin,modif,consult
            responses:
              '200':    # status code
                description: Tabella dei JSON dei profili d'utilizzo
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 10
                          nom:
                            type: string
                            example: "admin"
    /profils_utilisation/{cle}:
        get:
            tags:
                - Profils_utilisation (Profili di utilizzo)
            summary: JSON del profilo d'utilizzo con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del profilo di utilizzo"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle:
                          type: integer
                          example: 10
                        nom:
                          type: string
                          example: "admin"
              '404':    # status code
                description: "Parametro non valido"
              '500':    # status code
                description: "Diritti insufficienti"
    #### Utilisateurs ####
    /utilisateurs:
        get:
            tags:
                - Utilisateurs (Utenti)
            summary: Elenco di tutti gli utenti
            description: Tabella contenente i JSON degli utenti della base dati, ordinata per cognome poi per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - profil_utilisation
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, prenom]   # ?select=cle,nom,prenom
                - name: cle
                  in: query
                  description: restituisce solo gli utenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi cognomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [Dupond]   # ?nom=Dupond
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [Dupond, Durand, Martin]   # ?nom=Dupond,Durand,Martin
                - name: prenom
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [Claude]   # ?prenom=Claude
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [Claude, Dominique, Louis]   # ?prenom=Claude,Dominique,Louis
                - name: identifiant_connexion
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi identificativi di connessione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo di connessione richiesto
                      value: [Claude]   # ?identifiant_connexion=Claude
                    multipleIds:
                      summary: Esempio con più identificativi di connessione richiesti
                      value: [Claude, Dominique, Louis]   # ?identifiant_connexion=Claude,Dominique,Louis
                - name: profil_utilisation
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi profili di utilizzo (tramite chiave o nome)
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo profilo di utilizzo richiesto
                      value: [Modification]   # ?profil_utilisation=Modification
                    multipleIds:
                      summary: Esempio con più profili di utilizzo richiesti
                      value: [1, Modification, 2]   # ?profil_utilisation=1,Modification,2
                - name: cas_identifiant
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi cas_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo CAS richiesto
                      value: [ident1]   # ?cas_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi CAS richiesti
                      value: [ident1, ident2, ident3]   # ?cas_identifiant=ident1,ident2,ident3
                - name: adfs_identifiant
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi adfs_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo ADFS richiesto
                      value: [ident1]   # ?adfs_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi ADFS richiesti
                      value: [ident1, ident2, ident3]   # ?adfs_identifiant=ident1,ident2,ident3
                - name: saml_identifiant
                  in: query
                  description: restituisce solo gli utenti che hanno uno di questi saml_identifiants
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo identificativo SAML richiesto
                      value: [ident1]   # ?saml_identifiant=ident1
                    multipleIds:
                      summary: Esempio con più identificativi SAML richiesti
                      value: [ident1, ident2, ident3]   # ?saml_identifiant=ident1,ident2,ident3
            responses:
              '200':    # status code
                description: Tabella dei JSON degli utenti
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Utilisateurs'
        post:
            tags:
                - Utilisateurs (Utenti)
            summary: Creazione di un nuovo utente
            description: Crea un nuovo utente nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      actif:
                        type: boolean
                        example: true
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      profil_utilisation:
                        type: integer
                        example: 1
                      civilite:
                        type: string
                        example: "Sig.ra"
                      statut:
                        type: string
                        example: "Superadministrateur"
                        description: "Formato atteso: 'U' o 'utente', 'S' o amministratore Pronote Campus', 'A' o 'amministratore di base dati'"
                      ldap_identifiant:
                        type: string
                        example: "Identificativo__LDAP"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      e_mail:
                        type: string
                        example: "nome.cognome@email.it"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_secretariat:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile, problema di diritti
    /utilisateurs/{cle}:
        get:
            tags:
                - Utilisateurs (Utenti)
            summary: JSON dell'utente con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'utente"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '404':    # status code
                description: "Parametro non valido"
              '500':    # status code
                description: "Diritti insufficienti"
        post:
            tags:
                - Utilisateurs (Utenti)
            summary: Aggiornamento parziale di un utente
            description: Modifica i campi dell'utente con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'utente che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      actif:
                        type: boolean
                        example: true
                      nom:
                        type: string
                        example: "Rossi"
                      prenom:
                        type: string
                        example: "Maria"
                      profil_utilisation:
                        type: integer
                        example: 1
                      civilite:
                        type: string
                        example: "Sig.ra"
                      statut:
                        type: string
                        example: "Superadministrateur"
                        description: "Formato atteso: 'U' o 'utente', 'S' o amministratore Pronote Campus', 'A' o 'amministratore di base dati'"
                      ldap_identifiant:
                        type: string
                        example: "Identificativo__LDAP"
                      cas_identifiant:
                        type: string
                        example: "Identificativo__CAS"
                      adfs_identifiant:
                        type: string
                        example: "Identificativo__ADFS"
                      saml_identifiant:
                        type: string
                        example: "Identificativo__SAML"
                      identifiant_connexion:
                        type: string
                        example: "Identificativo__connessione"
                      e_mail:
                        type: string
                        example: "nome.cognome@email.it"
                      adresse1:
                        type: string
                        example: "Via Roma 1"
                      adresse2:
                        type: string
                        example: "Via Roma 1"
                      adresse3:
                        type: string
                        example: "Via Roma 1"
                      adresse4:
                        type: string
                        example: "Via Roma 1"
                      code_postal:
                        type: string
                        example: "13000"
                      ville:
                        type: string
                        example: "Torino"
                      pays:
                        type: string
                        example: "Italia"
                      province:
                        type: string
                        example: "Provincia"
                      numero_telephone_fixe:
                        type: string
                        example: "04040404"
                      indicatif_telephone_fixe:
                        type: string
                        example: "04"
                      numero_telephone_portable:
                        type: string
                        example: "06060606"
                      indicatif_telephone_portable:
                        type: string
                        example: "06"
                      acces_espace_secretariat:
                        type: boolean
                        example: true
                      mot_de_passe:
                        type: string
                        example: "fdrehm:lcfjnfj4"
                        description: Solo modifica, visualizzazione non consentita; deve rispettare la politica di sicurezza
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Utilisateurs'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Utilisateurs (Utenti)
            summary: Cancellazione di un utente
            description: Cancella definitivamente l'utente con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /utilisateurs/supprimer:
        post:
            tags:
                - Utilisateurs (Utenti)
            summary: Cancellazione di più utenti
            description: Cancella gli utenti identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi degli utenti da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Parametres_base ####
    /parametres_base:
        get:
            tags:
                - Parametres_base (Parametri della base dati)
            summary: JSON di alcuni parametri della base dati (primo giorno, valuta, settimane bloccate, giorni lavorativi, durata di un giorno)
            description: JSON di alcuni parametri della base dati (data del primo giorno della base dati, valuta utilizzata per i costi orari, settimane bloccate, durata di un giorno intero, giorni lavorativi della base dati)
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [premier_jour]   # ?select=premier_jour
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [premier_jour, domaine_verrouille]   # ?select=premier_jour,domaine_verrouille
            responses:
              '200':    # status code
                description: JSON di alcuni parametri della base dati
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        devise:
                          type: string
                          example: "€"
                        premier_jour:
                          type: string
                          example: "2023-09-04"
                        domaine_verrouille:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        duree_jour:
                          type: number
                          example: 0.5
                        jours_ouvres:
                          type: array
                          items:
                            type: string
                          example: ["lundi","mardi","mercredi","jeudi","vendredi","samedi"]
        post:
            tags:
                - Parametres_base (Parametri della base dati)
            summary: Aggiornamento di alcuni parametri della base dati – valuta, periodo_bloccato
            description: Modifica i campi dei parametri della base dati autorizzati utilizzando quelli presenti nel BODY in formato JSON
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare e che sono autorizzati alla modifica.
              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: Successo - JSON dei parametri della base dati
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        devise:
                          type: string
                          example: "€"
                        premier_jour:
                          type: string
                          example: "2023-09-04"
                        domaine_verrouille:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        duree_jour:
                          type: number
                          example: 0.5
                        jours_ouvres:
                          type: array
                          items:
                            type: string
                          example: ["lundi","mardi","mercredi","jeudi","vendredi","samedi"]
              '400':    # status code
                description: "Parametro non valido"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
    #### Version ####
    /version:
        get:
            tags:
                - Version (Versione)
            summary: Versione di PRONOTE Campus
            description: Versione dell'applicazione PRONOTE Campus Web Service
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [version]   # ?select=version
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [version, majeure]   # ?select=version,majeure
            responses:
              '200':    # status code
                description: JSON della versione
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        version:
                          type: string
                          example: "Service web HYPERPLANNING 2024.0.3.0"
                        majeure:
                          type: integer
                          example: 2024
                        mineure:
                          type: integer
                          example: 0
                        release:
                          type: integer
                          example: 3
                        sous_release:
                          type: integer
                          example: 0
    #### Icals ####
    /ical/matieres:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL delle materie
            description: ICAL delle materie presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/matieres/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di una materia
            description: ICAL della materia con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della materia dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    /ical/enseignants:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL dei docenti
            description: ICAL dei docenti presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/enseignants/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di un docente
            description: ICAL del docente con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del docente dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    /ical/etudiants:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL degli studenti
            description: ICAL degli studenti presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/etudiants/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di uno studente
            description: ICAL dello studente con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dello studente dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    /ical/promotions:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL dei corsi
            description: ICAL dei corsi presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/promotions/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di un corso
            description: ICAL del corso con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del corso dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    /ical/tdoptions:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL dei gruppi / opzioni
            description: ICAL dei gruppi / opzioni presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/tdoptions/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di un gruppo / opzione
            description: ICAL del gruppo / opzione con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del gruppo / opzione dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    /ical/salles:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL delle aule
            description: ICAL delle aule presenti nel BODY in formato JSON
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      cles:
                        type: array
                        items:
                          type: integer
                        example: [10,11]
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - Tabella degli ICAL"
              '400':    # status code
                description: "Parametri non validi: parametro specificato non valido"
              '404':    # status code
                description: "Parametri non validi: chiave inesistente"
    /ical/salles/{cle}:
        post:
            tags:
                - Icals (Ical)
            summary: ICAL di un'aula
            description: ICAL dell'aula con chiave {cle}, configurabile secondo le opzioni presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave dell'aula dell'ical richiesto"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: Campi del JSON utilizzati per parametrare l'ICAL
              required: false
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      domaine:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,15]
                      matiere_code:
                        type: boolean
                        example: false
                      matiere_libelle:
                        type: boolean
                        example: true
                      matiere_libelle_long:
                        type: boolean
                        example: false
                      enseignant_code:
                        type: boolean
                        example: false
                      enseignant_civilite:
                        type: boolean
                        example: true
                      enseignant_nom:
                        type: boolean
                        example: true
                      ennseignant_nom_majuscule:
                        type: boolean
                        example: false
                      enseignant_prenom:
                        type: boolean
                        example: true
                      enseignant_prenom_initale:
                        type: boolean
                        example: false
                      regroupement_code:
                        type: boolean
                        example: false
                      regroupement_nom:
                        type: boolean
                        example: true
                      promotion_code:
                        type: boolean
                        example: false
                      promotion_nom:
                        type: boolean
                        example: true
                      promotion_libelle_long:
                        type: boolean
                        example: false
                      td_code:
                        type: boolean
                        example: false
                      td_nom:
                        type: boolean
                        example: true
                      td_libelle_long:
                        type: boolean
                        example: false
                      option_code:
                        type: boolean
                        example: false
                      option_nom:
                        type: boolean
                        example: true
                      option_libelle_long:
                        type: boolean
                        example: false
                      salle_code:
                        type: boolean
                        example: false
                      salle_nom:
                        type: boolean
                        example: true
                      salle_libelle_long:
                        type: boolean
                        example: false
                      site_Tous:
                        type: boolean
                        example: true
                      site_sauf_defaut:
                        type: boolean
                        example: false
                      type:
                        type: boolean
                        example: true
                      ponderation:
                        type: boolean
                        example: true
                      memo:
                        type: boolean
                        example: true
                      memo_premiere_ligne:
                        type: boolean
                        example: true
                      effectif:
                        type: boolean
                        example: true
                      cours_annules:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: "Successo - ICAL dell'elemento"
              '400':    # status code
                description: "Parametri non validi: chiave inesistente, parametro specificato non valido..."
    #### Familles ####
    /familles:
        get:
            tags:
                - Familles (Tipologie)
            summary: Elenco di tutte le tipologie
            description: Tabella contenente i JSON delle tipologie della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, libelle, utilisee_pour]   # ?select=cle,libelle,utilisee_pour
                - name: cle
                  in: query
                  description: restituisce solo le tipologie che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: libelle
                  in: query
                  description: restituisce solo le tipologie che hanno uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo nome richiesto
                      value: [maths]   # ?libelle=maths
                    multipleIds:
                      summary: Esempio con più nomi richiesti
                      value: [maths, francais, histoire]   # ?libelle=maths,francais,histoire
                - name: mode
                  in: query
                  description: restituisce solo le tipologie di questa modalità
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                - name: utilisee_pour
                  in: query
                  description: restituisce solo le tipologie che utilizzano una di queste categorie
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
            responses:
              '200':    # status code
                description: Tabella dei JSON delle tipologie
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Familles'
        post:
            tags:
                - Familles (Tipologie)
            summary: Creazione di una nuova tipologia
            description: Crea una nuova tipologia nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Tipologia1"
                      mode:
                        type: string
                        example: "Specifiche definite"
                      proprietaire:
                        type: integer
                        example: 10
                      utilisee_pour:
                        type: array
                        items:
                          type: string
                        example: ["Matières", "Enseignants"]
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '400':    # status code
                description: "Parametri non validi: Nome, genere e modalità obbligatori, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /familles/{cle}:
        get:
            tags:
                - Familles (Tipologie)
            summary: JSON della tipologia con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Familles (Tipologie)
            summary: Aggiornamento parziale di una tipologia
            description: Modifica i campi della tipologia con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della tipologia che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      libelle:
                        type: string
                        example: "Tipologia1"
                      mode:
                        type: string
                        example: "Specifiche definite"
                      proprietaire:
                        type: integer
                        example: 10
                      utilisee_pour:
                        type: array
                        items:
                          type: string
                        example: ["Matières", "Enseignants"]
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Familles'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: tipologia inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Familles (Tipologie)
            summary: Cancellazione di una tipologia
            description: Cancella definitivamente dalla base la tipologia con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /familles/supprimer:
        post:
            tags:
                - Familles (Tipologie)
            summary: Cancellazione di più tipologie
            description: Cancella le tipologie identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle tipologie da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /familles/{cle}/rubriques:
        get:
            tags:
                - Familles (Tipologie)
            summary: Specifiche della tipologia con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle:
                            type: integer
                            example: 10
                          nom:
                            type: string
                            example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Familles (Tipologie)
            summary: Aggiunta di una specifica alla tipologia
            description: Aggiunge una specifica alla tipologia con chiave {cle}, il cui nome è specificato nel body
            parameters:
                - name: cle
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente il campo nome della nuova specifica e il suo valore
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      nom:
                        type: string
                        example: "Specifica2"
            responses:
              '201':    # status code
                description: Successo - JSON dell'elemento creato
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle:
                          type: integer
                          example: 11
                        nom:
                          type: string
                          example: "Specifica2"
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: tipologia inesistente"
              '500':    # status code
                description: "Creazione impossibile"
    #### Rubriques ####
    /rubriques:
        get:
            tags:
                - Rubriques (Specifiche)
            summary: Elenco di tutte le specifiche
            description: Tabella contenente i JSON delle specifiche della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, famille]   # ?select=cle,nom,famille
                - name: cle
                  in: query
                  description: Restituisce solo le specifiche con una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Restituisce solo le specifiche con uno di questi nomi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [maths]   # ?nom=maths
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [maths, francais, histoire]   # ?nom=maths,francais,histoire
                - name: famille
                  in: query
                  description: Restituisce solo le specifiche delle tipologie con una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola tipologia richiesta
                      value: [12]   # ?famille=12
                    multipleIds:
                      summary: Esempio con più tipologie richieste
                      value: [12, 24, 31]   # ?famille=12,24,31
            responses:
              '200':    # status code
                description: Tabella dei JSON delle specifiche
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Rubriques'
        post:
            tags:
                - Rubriques (Specifiche)
            summary: Creazione di una nuova specifica
            description: Crea una nuova specifica nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Rubriques'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '400':    # status code
                description: "Parametri non validi: Nome e chiave della tipologia obbligatori, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /rubriques/{cle}:
        get:
            tags:
                - Rubriques (Specifiche)
            summary: JSON della specifica con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della specifica"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Rubriques (Specifiche)
            summary: Aggiornamento parziale di una specifica
            description: Modifica i campi delle specifiche con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "Chiave della specifica da aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Rubriques'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Rubriques'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Parametro non valido: specifica inesistente"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Rubriques (Specifiche)
            summary: Cancellazione di una specifica
            description: Cancella definitivamente dalla base la specifica con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /rubriques/supprimer:
        post:
            tags:
                - Rubriques (Specifiche)
            summary: Cancellazione di più specifiche
            description: Cancella le specifiche identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle specifiche da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Calendriers_notation ####
    /calendriers_notation:
        get:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Elenco di tutti i calendari di valutazione
            description: Tabella contenente i JSON dei calendari di valutazione della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, proprietaire]   # ?select=cle,nom,proprietaire
                - name: cle
                  in: query
                  description: Filtro sulle chiavi dei calendari di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtro sui nomi dei calendari di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tabella dei JSON dei calendari di valutazione
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Calendriers_notation'
        post:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Creazione di un nuovo calendario di valutazione
            description: Crea un nuovo calendario di valutazione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Calendriers_notation'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /calendriers_notation/{cle}:
        get:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: JSON del calendario di valutazione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del calendario di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Aggiornamento parziale di un calendario di valutazione
            description: Modifica i campi del calendario di valutazione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del calendario di valutazione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Calendriers_notation'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Calendriers_notation'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '405':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Cancellazione di un calendario di valutazione
            description: Cancella definitivamente dalla base il calendario di valutazione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /calendriers_notation/supprimer:
        post:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Cancellazione di più calendari di valutazione
            description: Cancella i calendari di valutazione identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei calendari di valutazione da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /calendriers_notation/{cle_calendrier}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Specifiche assegnate al calendario di valutazione per la tipologia
            description: Specifiche assegnate al calendario di valutazione con chiave {cle_calendrier} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_calendrier
                  in: path
                  description: "chiave del calendario di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Calendriers_notation (Calendari di valutazione)
            summary: Modifica delle specifiche assegnate al calendario di valutazione per la tipologia
            description: Modifica le specifiche assegnate al calendario di valutazione con chiave {cle_calendrier} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_calendrier
                  in: path
                  description: "chiave del calendario di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        calendrier_notation:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Periodes_hors_calendrier ####
    /periodes_hors_calendrier:
        get:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Elenco di tutti i periodi fuori calendario
            description: Tabella contenente i JSON dei periodi fuori calendario della base dati, ordinata per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - date_debut
                      - proprietaire
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, proprietaire]   # ?select=cle,nom,proprietaire
                - name: cle
                  in: query
                  description: Filtro sulle chiavi dei periodi fuori calendario
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtro sui nomi dei periodi fuori calendario
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tabella dei JSON dei periodi fuori calendario
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Periodes_hors_calendrier'
        post:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Creazione di un nuovo periodo fuori calendario
            description: Crea una nuova periodo fuori calendario nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_hors_calendrier'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /periodes_hors_calendrier/{cle}:
        get:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: JSON del periodo fuori calendario con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Aggiornamento parziale di un periodo fuori calendario
            description: Modifica i campi del periodo fuori calendario con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del periodo fuori calendario che si vuole aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_hors_calendrier'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_hors_calendrier'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '405':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Cancellazione di un periodo fuori calendario
            description: Cancella definitivamente dalla base il periodo fuori calendario con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /periodes_hors_calendrier/supprimer:
        post:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Cancellazione di più periodi fuori calendario
            description: Cancella i periodi fuori calendario identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei periodi fuori calendario da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /periodes_hors_calendrier/{cle_periode}/familles/{cle_fam}/rubriques:
        get:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Specifiche assegnate al periodo fuori calendario per la tipologia
            description: Specifiche assegnate al periodo fuori calendario con chiave {cle_periode} per la tipologia con chiave {cle_fam} Se la tipologia è a "Specifiche libere", "rubrique_libre" consente di ottenere la specifica libera di questa tipologia Nel caso delle "Specifiche predefinite", "rubriques" consente di ottenere l'elenco (chiave e nome) di tutte le specifiche assegnate
            parameters:
                - name: cle_periode
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  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: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
        post:
            tags:
                - Periodes_hors_calendrier (Periodi fuori calendario)
            summary: Modifica delle specifiche assegnate al periodo fuori calendario per la tipologia
            description: Modifica le specifiche assegnate al periodo fuori calendario con chiave {cle_periode} per la tipologia con chiave {cle_fam} Se la modalità di inserimento della tipologia è ‘Specifiche libere', compilare ‘rubrique_libre' per modificare la specifica libera di questa tipologia Nel caso delle ‘specifiche definite', compilare ‘specifiche' con l'elenco delle chiavi delle specifiche desiderate
            parameters:
                - name: cle_periode
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: cle_fam
                  in: path
                  description: "chiave della tipologia"
                  required: true
                  schema:
                    type: integer
                - name: rubrique_libre
                  in: query
                  description: Nome della specifica libera. Solo per tipologie con specifiche libere
                  required: true
                  schema:
                    type: string
                - name: rubriques
                  in: query
                  description: Tabella delle chiavi delle specifiche definite della tipologia. Solo per tipologie di specifiche definite
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        periode_hors_calendrier:
                          type: integer
                          example: 388
                        famille:
                          type: integer
                          example: 125
                        mode:
                          type: string
                          example: "Specifiche definite"
                        rubrique_libre:
                          type: string
                          example: "Specifiche libere di questo elemento"
                        rubriques:
                          type: array
                          items:
                            type: object
                            properties:
                              cle:
                                type: integer
                                example: 12
                              nom:
                                type: string
                                example: "Specifica1"
              '404':    # status code
                description: "Parametro non valido: chiave dell'elemento o della tipologia non corretta"
              '500':    # status code
                description: "'Modifica impossibile' o 'Diritti insufficienti'"
    #### Periodes_notation ####
    /periodes_notation:
        get:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: Elenco di tutti i periodi di valutazione
            description: Tabella contenente i JSON dei periodi di valutazione della base dati, ordinata per calendario poi per nome di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento (per chiave, per calendario poi nome, per calendario poi data di inizio)
                  schema:
                    type: string
                    enum:
                      - cle
                      - nom
                      - date_debut
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, nom, date_debut]   # ?select=cle,nom,date_debut
                - name: cle
                  in: query
                  description: Filtro sulle chiavi dei periodi di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: nom
                  in: query
                  description: Filtro sui nomi dei periodi di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con un solo cognome richiesto
                      value: [semestriel]   # ?nom=semestriel
                    multipleIds:
                      summary: Esempio con più cognomi richiesti
                      value: [semestriel, trimestriel]   # ?nom=semestriel,trimestriel
            responses:
              '200':    # status code
                description: Tabella dei JSON dei periodi di valutazione
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Periodes_notation'
        post:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: Creazione di un nuovo periodo di valutazione
            description: Crea una nuova periodo di valutazione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_notation'
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /periodes_notation/{cle}:
        get:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: JSON del periodo di valutazione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: Aggiornamento parziale di un periodo di valutazione
            description: Modifica i campi del periodo di valutazione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del periodo di valutazione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Periodes_notation'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Periodes_notation'
              '400':    # status code
                description: "Parametri non validi: Cognome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '405':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: Cancellazione di un periodo di valutazione
            description: Cancella definitivamente dalla base il periodo di valutazione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /periodes_notation/supprimer:
        post:
            tags:
                - Periodes_notation (Periodi di valutazione)
            summary: Cancellazione di più periodi di valutazione
            description: Cancella i periodi di valutazione identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei periodi di valutazione da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    #### Modules_notation ####
    /modules_notation/{cle}:
        get:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: JSON del modulo di valutazione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules_notation'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Aggiornamento parziale di un modulo di valutazione
            description: Modifica i campi del modulo di valutazione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del modulo di valutazione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Modules_notation'
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Modules_notation'
              '400':    # status code
                description: "Parametri non validi: Nome obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Cancellazione di un modulo di valutazione
            description: Cancella definitivamente dalla base il modulo di valutazione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /modules_notation/supprimer:
        post:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Cancellazione di più moduli di valutazione
            description: Cancella i moduli di valutazione identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei moduli di valutazione da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /modules_notation/{cle_mod}/periodes_notation/{cle_pern}/coefficient:
        get:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Coefficiente assegnato al modulo di valutazione per il periodo di valutazione
            description: Coefficiente assegnato al modulo di valutazione con chiave {cle_mod} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Modifica del coefficiente assegnato al modulo di valutazione per il periodo di valutazione
            description: Modifica il coefficiente assegnato al modulo di valutazione con chiave {cle_mod} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: Coefficiente da assegnare
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /modules_notation/{cles_mod}/periodes_notation/{cles_pern}/coefficients:
        get:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Coefficiente assegnato a ciascun modulo di valutazione per ciascun periodo di valutazione
            description: Coefficiente assegnato a ciascun modulo di valutazione le cui chiavi sono in {cles_mod} per ciascun periodo di valutazione le cui chiavi sono in {cles_pern}
            parameters:
                - name: cles_mod
                  in: path
                  description: chiavi dei moduli di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_pern
                  in: path
                  description: chiavi dei periodi di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_module_notation:
                            type: integer
                            example: 388
                          cle_periode_notation:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /modules_notation/{cle_mod}/periodes_hors_calendrier/{cle_perhc}/coefficient:
        get:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Coefficiente assegnato al modulo di valutazione per il periodo fuori calendario
            description: Coefficiente assegnato al modulo di valutazione con chiave {cle_mod} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Modifica del coefficiente assegnato al modulo di valutazione per il periodo fuori calendario
            description: Modifica il coefficiente assegnato al modulo di valutazione con chiave {cle_mod} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_mod
                  in: path
                  description: "chiave del modulo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: Coefficiente da assegnare
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_module_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /modules_notation/{cles_mod}/periodes_hors_calendrier/{cles_perhc}/coefficients:
        get:
            tags:
                - Modules_notation (Moduli di valutazione)
            summary: Coefficiente assegnato a ciascun modulo di valutazione per ciascun periodo fuori calendario
            description: Coefficiente assegnato a ciascun modulo di valutazione le cui chiavi sono in {cles_mod} per ciascun periodo fuori calendario le cui chiavi sono in {cles_perhc}
            parameters:
                - name: cles_mod
                  in: path
                  description: chiavi dei moduli di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_perhc
                  in: path
                  description: chiavi dei periodi fuori calendario richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_module_notation:
                            type: integer
                            example: 388
                          cle_periode_hors_calendrier:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    #### Services_notation ####
    /services_notation:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Elenco di tutti i servizi di valutazione
            description: Tabella contenente i JSON dei servizi di valutazione della base dati, ordinata per materia di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - matiere
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, matiere, promotions]   # ?select=cle,matiere,promotions
                - name: cle
                  in: query
                  description: Filtro sulle chiavi dei servizi di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: matiere
                  in: query
                  description: Filtro sulle chiavi delle materie dei servizi di valutazione
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                  examples:
                    oneId:
                      summary: Esempio con una sola materia richiesta
                      value: [12]   # ?matiere=12
                    multipleIds:
                      summary: Esempio con più materie richieste
                      value: [12, 15]   # ?matiere=12,15
            responses:
              '200':    # status code
                description: Tabella dei JSON dei servizi di valutazione
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Services_notation'
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Creazione di un nuovo servizio di valutazione
            description: Crea un nuovo servizio di valutazione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON.<br>
                         Per impostazione predefinita, il servizio di valutazione verrà creato in un modulo di valutazione generato automaticamente con lo stesso nome della materia di tale servizio.<br>
                         Per creare il servizio in un modulo di valutazione già esistente, è necessario specificare la chiave del modulo nel campo 'module_notation'.<br>
                         Per creare un sottoservizio di valutazione di un servizio di valutazione, è necessario specificare la sua chiave nel campo 'service_pere'.
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      matiere:
                        type: integer
                        example: 13
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      regroupements:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      enseignants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_facultatif:
                        type: boolean
                        example: false
                      nb_points_ects:
                        type: number
                        example: 10.5
                      note_seuil_ects:
                        type: string
                        example: "10"
                      note_eliminatoire_ects:
                        type: string
                        example: "5"
                      devoirs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_notation_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_hors_calendrier_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sous_services:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_sous_service:
                        type: boolean
                        example: false
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '400':    # status code
                description: "Parametri non validi: Materia obbligatoria, numero di punti troppo grande..."
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /services_notation/{cle}:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: JSON del servizio di valutazione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Aggiornamento parziale di un servizio di valutazione
            description: Modifica i campi del servizio di valutazione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave del servizio di valutazione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      matiere:
                        type: integer
                        example: 13
                      promotions:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      td_options:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      regroupements:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      enseignants:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_facultatif:
                        type: boolean
                        example: false
                      nb_points_ects:
                        type: number
                        example: 10.5
                      note_seuil_ects:
                        type: string
                        example: "10"
                      note_eliminatoire_ects:
                        type: string
                        example: "5"
                      devoirs:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_notation_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      periodes_hors_calendrier_actives:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      sous_services:
                        type: array
                        items:
                          type: integer
                        example: [10,12,14,48]
                      est_sous_service:
                        type: boolean
                        example: false
            responses:
              '200':    # status code
                description: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Services_notation'
              '400':    # status code
                description: "Parametri non validi: Materia obbligatoria, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '405':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Cancellazione di un servizio di valutazione
            description: Cancella definitivamente dalla base il servizio di valutazione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /services_notation/supprimer:
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Cancellazione di più servizi di valutazione
            description: Cancella i servizi di valutazione identificati dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi dei servizi di valutazione da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /services_notation/{cle_sn}/promotions/{cle_promo}/module_notation:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Modulo di valutazione del servizio di valutazione per questo corso
            description: Chiave del modulo di valutazione del servizio di valutazione con chiave {cle_sn} per il corso con chiave {cle_promo}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_promotion:
                          type: integer
                          example: 125
                        cle_module_notation:
                          type: integer
                          example: 234
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /services_notation/{cle_sn}/periodes_notation/{cle_pern}/coefficient:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Coefficiente assegnato al servizio di valutazione per il periodo di valutazione
            description: Coefficiente assegnato al servizio di valutazione con chiave {cle_sn} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Modifica del coefficiente assegnato al servizio di valutazione per il periodo di valutazione
            description: Modifica il coefficiente assegnato al servizio di valutazione con chiave {cle_sn} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: Coefficiente da assegnare
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /services_notation/{cles_sn}/periodes_notation/{cles_pern}/coefficients:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Coefficiente assegnato a ciascun servizio di valutazione per ciascun periodo di valutazione
            description: Coefficiente assegnato a ciascun servizio di valutazione le cui chiavi sono in {cles_sn} per ciascun periodo di valutazione le cui chiavi sono in {cles_pern}
            parameters:
                - name: cles_sn
                  in: path
                  description: chiavi dei servizi di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_pern
                  in: path
                  description: chiavi dei periodi di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_service_notation:
                            type: integer
                            example: 388
                          cle_periode_notation:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/coefficient:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Coefficiente assegnato al servizio di valutazione per il periodo fuori calendario
            description: Coefficiente assegnato al servizio di valutazione con chiave {cle_sn} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Modifica del coefficiente assegnato al servizio di valutazione per il periodo fuori calendario
            description: Modifica il coefficiente assegnato al servizio di valutazione con chiave {cle_sn} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: coefficient
                  in: query
                  description: Coefficiente da assegnare
                  required: true
                  schema:
                    type: number
                    example: 3.5
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        coefficient:
                          type: number
                          example: 2.5
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /services_notation/{cles_sn}/periodes_hors_calendrier/{cles_perhc}/coefficients:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Coefficiente assegnato a ciascun servizio di valutazione per ciascun periodo fuori calendario
            description: Coefficiente assegnato a ciascun servizio di valutazione le cui chiavi sono in {cles_sn} per ciascun periodo fuori calendario le cui chiavi sono in {cles_perhc}
            parameters:
                - name: cles_sn
                  in: path
                  description: chiavi dei servizi di valutazione richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                - name: cles_perhc
                  in: path
                  description: chiavi dei periodi fuori calendario richieste, separate da virgole (3,4,5)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        type: object
                        properties:
                          cle_service_notation:
                            type: integer
                            example: 388
                          cle_periode_hors_calendrier:
                            type: integer
                            example: 125
                          coefficient:
                            type: number
                            example: 2.5
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
    /services_notation/{cle_sn}/periodes_notation/{cle_pern}/bonus_malus_actif:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Booleano che indica se il servizio di valutazione per il periodo di valutazione tiene conto dei bonus / malus
            description: Vero se il servizio di valutazione con chiave {cle_sn} per il periodo di valutazione con chiave {cle_pern} tiene conto dei bonus / malus, altrimenti falso
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Modifica del calcolo dei bonus / malus del servizio di valutazione per il periodo di valutazione
            description: Attiva o meno la gestione dei bonus / malus del servizio di valutazione con chiave {cle_sn} per il periodo di valutazione con chiave {cle_pern}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_pern
                  in: path
                  description: "chiave del periodo di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus_actif
                  in: query
                  description: Calcolo dei bonus / malus
                  required: true
                  schema:
                    type: boolean
                    example: true
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_notation:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /services_notation/{cle_sn}/periodes_hors_calendrier/{cle_perhc}/bonus_malus_actif:
        get:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Booleano che indica se il servizio di valutazione per il periodo fuori calendario tiene conto dei bonus / malus
            description: Vero se il servizio di valutazione con chiave {cle_sn} per il periodo fuori calendario con chiave {cle_perhc} tiene conto dei bonus / malus, altrimenti falso
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Services_notation (Servizi di valutazione)
            summary: Modifica del calcolo dei bonus / malus del servizio di valutazione per il periodo fuori calendario
            description: Attiva o meno la gestione dei bonus / malus del servizio di valutazione con chiave {cle_sn} per il periodo fuori calendario con chiave {cle_perhc}
            parameters:
                - name: cle_sn
                  in: path
                  description: "chiave del servizio di valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_perhc
                  in: path
                  description: "chiave del periodo fuori calendario"
                  required: true
                  schema:
                    type: integer
                - name: bonus_malus_actif
                  in: query
                  description: Calcolo dei bonus / malus
                  required: true
                  schema:
                    type: boolean
                    example: true
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_service_notation:
                          type: integer
                          example: 388
                        cle_periode_hors_calendrier:
                          type: integer
                          example: 125
                        bonus_malus_actif:
                          type: boolean
                          example: true
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    #### Devoirs ####
    /devoirs:
        get:
            tags:
                - Devoirs (Valutazioni)
            summary: Elenco di tutte le valutazioni
            description: Tabella contenente i JSON delle valutazioni della base dati, ordinata per servizi di valutazione di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - cle
                      - service_notation
                      - date
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [cle]   # ?select=cle
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [cle, matiere, promotions]   # ?select=cle,matiere,promotions
                - name: cle
                  in: query
                  description: Filtro sulle chiavi delle valutazioni
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [12]   # ?cle=12
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [12, 24, 48]   # ?cle=12,24,48
                - name: services_notation
                  in: query
                  description: Filtro sulle chiavi dei servizi di valutazione delle valutazioni
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo servizio di valutazione richiesto
                      value: [12]   # ?services_notation=12
                    multipleIds:
                      summary: Esempio con più servizi di valutazione richiesti
                      value: [12, 15]   # ?services_notation=12,15
            responses:
              '200':    # status code
                description: Tabella dei JSON delle valutazioni
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Devoirs'
        post:
            tags:
                - Devoirs (Valutazioni)
            summary: Creazione di una nuova valutazione
            description: Crea una nuova valutazione nella base dati e ne inizializza i campi utilizzando i parametri specificati nel JSON
            requestBody:
              description: Campi del JSON utilizzati per la creazione
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      service_notation:
                        type: integer
                        example: 11
                      date:
                        type: string
                        example: "2024-12-01"
                      date_publication:
                        type: string
                        example: "2024-12-02"
                      est_facultatif_comme_note:
                        type: boolean
                        example: true
                      est_facultatif_comme_bonus:
                        type: boolean
                        example: false
                      commentaire:
                        type: string
                        example: "Voici un commentaire pour le devoir"
                      est_verrouille:
                        type: boolean
                        example: false
                      est_devoir_surveille:
                        type: boolean
                        example: false
                      bareme:
                        type: string
                        example: "20"
                      est_ramener_sur:
                        type: boolean
                        example: false
                      coefficient:
                        type: number
                        example: 2.5
            responses:
              '201':    # status code
                description: Creato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '400':    # status code
                description: "Parametri non validi: servizio_valutazione obbligatorio"
              '500':    # status code
                description: Creazione o modifica di almeno uno dei campi impossibile
    /devoirs/{cle}:
        get:
            tags:
                - Devoirs (Valutazioni)
            summary: JSON della valutazione con chiave {cle}
            description: Usare SELECT per ottenere solo alcuni campi del JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '404':    # status code
                description: "Parametro non valido"
        post:
            tags:
                - Devoirs (Valutazioni)
            summary: Aggiornamento parziale di una valutazione
            description: Modifica i campi della valutazione con chiave {cle} utilizzando quelli presenti nel BODY in formato JSON
            parameters:
                - name: cle
                  in: path
                  description: "chiave della valutazione che si desidera aggiornare"
                  required: true
                  schema:
                    type: integer
            requestBody:
              description: JSON contenente i campi e i valori che si desidera modificare. Inserire nel JSON solo i campi che si vogliono modificare.
              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: Successo - JSON dell'elemento modificato
                content:  # Response body
                  application/json:
                    schema:
                      $ref: '#/components/schemas/Devoirs'
              '400':    # status code
                description: "Parametri non validi: servizio_valutazione obbligatorio, problema di dimensione..."
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
              '405':    # status code
                description: "Diritti insufficienti"
              '500':    # status code
                description: "Modifica di almeno uno dei campi impossibile"
        delete:
            tags:
                - Devoirs (Valutazioni)
            summary: Cancellazione di una valutazione
            description: Cancella definitivamente dalla base la valutazione con chiave {cle}
            parameters:
                - name: cle
                  in: path
                  description: chiave dell'elemento da cancellare
                  required: true
                  schema:
                    type: integer
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /devoirs/supprimer:
        post:
            tags:
                - Devoirs (Valutazioni)
            summary: Cancellazione di più valutazioni
            description: Cancella le valutazioni identificate dalle chiavi specificate nel parametro (?cles=1,5,7)
            parameters:
                - name: cles
                  in: query
                  description: una o più chiavi delle valutazioni da cancellare
                  style: form
                  required: true
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola chiave richiesta
                      value: [5]   # ?cles=5
                    multipleIds:
                      summary: Esempio con più chiavi richieste
                      value: [1, 5, 7]   # ?cles=1,5,7
            responses:
              '204':    # status code
                description: "Deleted: Cancellazione riuscita"
              '404':    # status code
                description: "Not found: la chiave specificata non esiste"
    /devoirs/{cle_dev}/promotions/{cle_promo}/periodes_notation:
        get:
            tags:
                - Devoirs (Valutazioni)
            summary: Periodi di valutazione e periodi fuori calendario assegnati alla valutazione per il corso
            description: Periodi di valutazione e periodi fuori calendario assegnati alla valutazione con chiave {cle_dev} per il corso con chiave {cle_promo}
            parameters:
                - name: cle_dev
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Devoirs (Valutazioni)
            summary: Modifica dei periodi di valutazione e/o dei periodi fuori calendario della valutazione per il corso
            description: Modifica i periodi di valutazione e/o i periodi fuori calendario della valutazione con chiave {cle_dev} per il corso con chiave {cle_promo}
            parameters:
                - name: cle_dev
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_promo
                  in: path
                  description: "chiave del corso"
                  required: true
                  schema:
                    type: integer
                - name: periodes_notation
                  in: query
                  description: chiavi dei periodi di valutazione richieste per la valutazione (è richiesto almeno uno dei due parametri tra periodes_notation e periodes_hors_calendrier)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [10,12,14,15]
                - name: periodes_hors_calendrier
                  in: query
                  description: chiavi dei periodi fuori calendario richieste per la valutazione (è richiesto almeno uno dei due parametri tra periodes_notation e periodes_hors_calendrier)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [11,13,16,17]
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_promotion:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    /devoirs/{cle_dev}/tdoptions/{cle_TDOpt}/periodes_notation:
        get:
            tags:
                - Devoirs (Valutazioni)
            summary: Periodi di valutazione e periodi fuori calendario assegnati alla valutazione per il gruppo / opzione
            description: Periodi di valutazione e periodi fuori calendario assegnati alla valutazione con chiave {cle_dev} per il gruppo / opzione con chiave {cle_TDOpt}
            parameters:
                - name: cle_dev
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_TDOpt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_tdoption:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
        post:
            tags:
                - Devoirs (Valutazioni)
            summary: Modifica dei periodi di valutazione e/o dei periodi fuori calendario del compito per il gruppo / opzione
            description: Modifica i periodi di valutazione e/o i periodi fuori calendario della valutazione con chiave {cle_dev} per il gruppo / opzione con chiave {cle_TDOpt}.
            parameters:
                - name: cle_dev
                  in: path
                  description: "chiave della valutazione"
                  required: true
                  schema:
                    type: integer
                - name: cle_TDOpt
                  in: path
                  description: "chiave del gruppo / opzione"
                  required: true
                  schema:
                    type: integer
                - name: periodes_notation
                  in: query
                  description: chiavi dei periodi di valutazione richieste per la valutazione (è richiesto almeno uno dei due parametri tra periodes_notation e periodes_hors_calendrier)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [10,12,14,15]
                - name: periodes_hors_calendrier
                  in: query
                  description: chiavi dei periodi fuori calendario richieste per la valutazione (è richiesto almeno uno dei due parametri tra periodes_notation e periodes_hors_calendrier)
                  required: true
                  schema:
                    type: array
                    items:
                      type: integer
                    example: [11,13,16,17]
            responses:
              '200':    # status code
                description: OK
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        cle_devoir:
                          type: integer
                          example: 498
                        cle_tdoption:
                          type: integer
                          example: 388
                        periodes_notation:
                          type: array
                          items:
                            type: integer
                          example: [10,12,14,15]
                        periodes_hors_calendrier:
                          type: array
                          items:
                            type: integer
                          example: [11,13,16,17]
              '400':    # status code
                description: "Parametro obbligatorio non compilato"
              '404':    # status code
                description: "Parametro non valido: chiave inesistente"
              '500':    # status code
                description: "Modifica impossibile"
    #### Notes ####
    /notes:
        get:
            tags:
                - Notes (Voti)
            summary: Elenco di tutti i voti
            description: Tabella contenente i voti della base dati (con valutazione e studente), ordinata per valutazione poi per studente di default
            parameters:
                - name: sort
                  in: query
                  description: Scelta dell'ordinamento
                  schema:
                    type: string
                    enum:
                      - devoir
                      - etudiant
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [devoir]   # ?select=devoir
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [devoir, note, etudiant]   # ?select=devoir,note,etudiant
                - name: etudiant
                  in: query
                  description: restituisce solo i voti degli studenti che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con un solo studente richiesto
                      value: [12]   # ?etudiant=12
                    multipleIds:
                      summary: Esempio con più studenti richiesti
                      value: [12, 14, 18]   # ?etudiant=12,14,18
                - name: devoir
                  in: query
                  description: restituisce solo i voti delle valutazioni che hanno una di queste chiavi
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: integer
                  examples:
                    oneId:
                      summary: Esempio con una sola valutazione richiesta
                      value: [13]   # ?devoir=13
                    multipleIds:
                      summary: Esempio con più valutazioni richieste
                      value: [13, 15, 19]   # ?devoir=13,15,19
                - name: date_debut
                  in: query
                  description: restituisce solo i voti delle valutazioni che hanno luogo dopo questa data di inizio. Se questa data di inizio non è indicata, verrà utilizzata quella di inizio della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_debut=2024-08-06
                - name: date_fin
                  in: query
                  description: restituisce solo i voti delle valutazioni che hanno luogo prima di questa data di fine. Se questa data di fine non è indicata, verrà utilizzata quella di fine della base dati
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: string
                  example: "2024-08-06"   # ?date_fin=2024-08-06
            responses:
              '200':    # status code
                description: Tabella dei JSON dei voti dei valutazioni
                content:  # Response body
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Notes'
    #### Durees ####
    /duree/{duree}:
        get:
            tags:
                - Durees (Durate)
            summary: Conversione di una durata espressa in giorni
            description: Converte la durata (espressa in giorni) in minuti e in ore / minuti
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: duree
                  in: path
                  description: "durata (espressa in giorni) da convertire"
                  required: true
                  schema:
                    type: number
            responses:
              '200':    # status code
                description: JSON della durata
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    /duree/minutes/{duree_en_minutes}:
        get:
            tags:
                - Durees (Durate)
            summary: Conversione di una durata espressa in minuti
            description: Converte la durata (espressa in minuti) in giorni e in ore / minuti
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: duree_en_minutes
                  in: path
                  description: "durata (espressa in minuti) da convertire"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON della durata
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    /duree/heures/{nombre_heures}/minutes/{nombre_minutes}:
        get:
            tags:
                - Durees (Durate)
            summary: Conversione di una durata espressa in ore / minuti
            description: Converte la durata (espressa in ore / minuti) in giorni e in minuti
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [duree]   # ?select=duree
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [duree, duree_en_minutes]   # ?select=duree,duree_en_minutes
                - name: nombre_heures
                  in: path
                  description: "durata (espressa in ore / minuti) da convertire"
                  required: true
                  schema:
                    type: integer
                - name: nombre_minutes
                  in: path
                  description: "durata (espressa in ore / minuti) da convertire"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON della durata
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        duree:
                          type: number
                          example: 0.063
                        duree_en_minutes:
                          type: integer
                          example: 90
                        duree_nombre_heures:
                          type: integer
                          example: 1
                        duree_nombre_minutes:
                          type: integer
                          example: 30
    #### Couleurs ####
    /couleur/{couleur}:
        get:
            tags:
                - Couleurs (Colori)
            summary: Conversione di un colore
            description: Converte il colore in 3 valori (rosso, verde e blu) compresi tra 0 e 255
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [couleur]   # ?select=couleur
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [couleur, rouge]   # ?select=couleur,rouge
                - name: couleur
                  in: path
                  description: "colore da convertire"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON del colore
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        couleur:
                          type: integer
                          example: 16777215
                        rouge:
                          type: integer
                          example: 255
                        vert:
                          type: integer
                          example: 255
                        bleu:
                          type: integer
                          example: 255
    /couleur/rouge/{R}/vert/{G}/bleu/{B}:
        get:
            tags:
                - Couleurs (Colori)
            summary: Conversione di un colore espresso in RGB
            description: Converte in colore i 3 valori (rosso, verde e blu) compresi tra 0 e 255
            parameters:
                - name: select
                  in: query
                  description: Scelta dei campi che si desidera avere nel JSON di risposta. Se non specificato, verranno inclusi tutti i campi possibili.
                  style: form
                  required: false
                  explode: false
                  schema:
                    type: array
                    items:
                      type: string
                      description: campo che si desidera includere nel JSON di risposta
                  examples:
                    oneId:
                      summary: Esempio con una sola colonna richiesta
                      value: [couleur]   # ?select=couleur
                    multipleIds:
                      summary: Esempio con più colonne richieste
                      value: [couleur, rouge]   # ?select=couleur,rouge
                - name: R
                  in: path
                  description: "colore (espresso in rosso / verde / blu) da convertire"
                  required: true
                  schema:
                    type: integer
                - name: G
                  in: path
                  description: "colore (espresso in rosso / verde / blu) da convertire"
                  required: true
                  schema:
                    type: integer
                - name: B
                  in: path
                  description: "colore (espresso in rosso / verde / blu) da convertire"
                  required: true
                  schema:
                    type: integer
            responses:
              '200':    # status code
                description: JSON del colore
                content:  # Response body
                  application/json:
                    schema:
                      type: object
                      properties:
                        couleur:
                          type: integer
                          example: 16777215
                        rouge:
                          type: integer
                          example: 255
                        vert:
                          type: integer
                          example: 255
                        bleu:
                          type: integer
                          example: 255
components:
  securitySchemes:
    basicAuth:     # <-- Basic authentification
      type: http
      scheme: basic

  schemas:
    Absences:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        date_heure_debut:
          type: string
          example: "2024-08-16T09:00"
        date_heure_fin:
          type: string
          example: "2024-08-17T16:45"
        est_justifie:
          type: boolean
          example: true
        motif:
          type: string
          example: "Malattia con certificato"
        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: "argomento dell'apprendistato"
        type_contrat:
          type: string
          example: "Apprendistato"
        dates_contrat:
          type: object
          properties:
            du:
              type: string
              example: "2000-02-14"
            au:
              type: string
              example: "2000-02-27"
        commentaire:
          type: string
          example: "Ecco un commento molto utile"
        enseignant_tuteur:
          type: integer
          example: 12
        enseignant_responsable:
          type: integer
          example: 14
        sujet_detaille:
          type: string
          example: "Argomento un po' più dettagliato"
        objectifs:
          type: string
          example: "Ecco i vari obiettivi"
        activites_prevues:
          type: string
          example: "Ecco le attività previste"
        competences_visees:
          type: string
          example: "Ecco le competenze mirate"
        modalites_concertation:
          type: string
          example: "Ecco le modalità di concertazione"
        modalites_evaluation:
          type: string
          example: "Ecco le modalità di valutazione"
        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: ["Ticket restaurant","Trasporto"]
    Appariteurs:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Rossi"
        prenom:
          type: string
          example: "Maria"
        civilite:
          type: string
          example: "Sig.ra"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        identifiant_connexion:
          type: string
          example: "Identificativo__connessione"
        email:
          type: string
          example: "nome.cognome@email.it"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        acces_espace_appariteurs:
          type: boolean
          example: true
        salles:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Baccalaureats:              # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "SCIENTIFICO"
        code:
          type: string
          example: "SCIENTIFICO"
        type:
          type: string
          example: "Maturità scientifica"
    Baccalaureat_specialites:   # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "MATEMATICA"
        code:
          type: string
          example: "MATE"
    Calendriers_notation:       # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Semestrale"
        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: "Rossi"
        prenom:
          type: string
          example: "Maria"
        civilite:
          type: string
          example: "Sig.ra"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        identifiant_connexion:
          type: string
          example: "Identificativo__connessione"
        date_naissance:
          type: string
          example: "2000-02-24"
        lieu_naissance:
          type: string
          example: "Torino"
        code_fiscal:
          type: string
          example: "154862"
        fonction:
          type: string
          example: "Funzione"
        entreprises:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        email:
          type: string
          example: "nome.cognome@email.it"
        autorisation_reception_email:
          type: boolean
          example: true
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        numero_fax:
          type: string
          example: "01010101"
        indicatif_fax:
          type: string
          example: "01"
        proprietaire:
          type: integer
          example: 10
    Cours:                      # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 388
        parente:
          type: string
          example: "AttivitàSemplice"
        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: "fissa"
        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: "Ecco un piccolo memo"
        reference:
          type: string
          example: "Ref. HP 000001"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        ponderation_avant_apport:
          type: integer
          example: 1
        ponderation_apres_apport:
          type: integer
          example: 1
        est_co_enseignement:
          type: boolean
          example: false
        presence_obligatoire:
          type: boolean
          example: true
        emargement_numerique:
          type: boolean
          example: true
        verrouillage:
          type: string
          example: "Sbloccata"
        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: "Modifica del primo giorno della base dati"
        date_derniere_modification:
          type: string
          example: "2023-09-11T10:37"
    Cours_annules:              # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 388
        place:
          type: number
          example: 1.5
        duree:
          type: number
          example: 0.416666666666667
        domaine:
          type: array
          items:
            type: integer
          example: [10,12,14,15]
        type:
          type: string
          example: "TP"
        ponderation_avant_apport:
          type: integer
          example: 1
        ponderation_apres_apport:
          type: integer
          example: 1
        matiere:
          type: integer
          example: 12
        promotions:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        tdoptions:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        regroupements:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        enseignants:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        salles:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
              domaine:
                type: array
                items:
                  type: integer
          example: [{"cle": 1,"domaine": [10,12,14,15]}]
        motif_annulation:
          type: string
          example: "Annullamento"
        commentaire:
          type: string
          example: "Ecco un commento molto utile"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        reference:
          type: string
          example: "Ref. HP 000001"
        memo:
          type: string
          example: "Ecco un piccolo memo"
        date_heure_annulation:
          type: string
          example: "2023-09-11T10:37"
        modifiant:
          type: integer
          example: 1
    Couts_horaires_enseignants: # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        libelle:
          type: string
          example: "cout124E"
        valeur:
          type: number
          example: 124.0
    Couts_horaires_salles:      # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        libelle:
          type: string
          example: "cout124E"
        valeur:
          type: number
          example: 124.0
    Cursus:                     # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "GM1 - S1"
        code:
          type: string
          example: "11"
        duree:
          type: number
          example: 0.416666666666667
        proprietaire:
          type: integer
          example: 10
        modules:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_obligatoires:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_au_choix:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
                example: 11
              libelle:
                type: string
                example: "Opzioni"
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            type: object
            properties:
              cle_matiere:
                type: integer
                example: 11
              type:
                type: string
                example: "Attività"
              duree_totale:
                type: number
                example: 0.5
              duree_seance:
                type: number
                example: 0.041666666666666664
    Decharges:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        motif:
          type: string
          example: "Motivo dell'extra docenza"
        promotion:
          type: integer
          example: 12
        enseignant:
          type: integer
          example: 15
        cout_horaire_enseignant:
          type: integer
          example: 25
        mode_decompte:
          type: string
          example: "settimanale"
          description: "Formato atteso: 'annuale' o 'settimanale'"
        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: "Solo se mode_decompte è 'settimanale'"
        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: "Ecco un commento molto utile"
        est_verrouille:
          type: boolean
          example: false
        est_devoir_surveille:
          type: boolean
          example: false
        bareme:
          type: string
          example: "20"
        est_ramener_sur:
          type: boolean
          example: false
        coefficient:
          type: number
          example: 2.5
        moyenne:
          type: string
          example: "15.25"
        note_max:
          type: string
          example: "20.0"
        note_min:
          type: string
          example: "5.5"
        mediane:
          type: string
          example: "12.3"
        etudiants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Dispenses:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        matiere:
          type: integer
          example: 24
          description: "0 per avere un esonero con 'Tutte le materie'"
        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: "Esonero per motivi medici"
        plage_horaire:
          type: string
          example: "Giornata"
          description: "Formato atteso: 'Giornata', 'Mattina', 'Pomeriggio' o 'Personalizzata'"
        plage_horaire_duree_debut:
          type: number
          example: 0.333333333333333
          description: Durata trascorsa tra le 0:00 e l'inizio della fascia oraria Attenzione, solo per gli esoneri la cui fascia oraria è personalizzata
        plage_horaire_duree_fin:
          type: number
          example: 0.833333333333333
          description: Durata trascorsa tra le 0:00 e la fine della fascia oraria Attenzione, solo per gli esoneri la cui fascia oraria è personalizzata
        periodicite:
          type: object
          properties:
            jours:
              type: array
              items:
                type: string
              example: ["lunedì", "martedì", "giovedì", "venerdì"]
              description: "Formato atteso: 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato', 'domenica'"
            frequence:
              type: integer
              example: 1
    Enseignants:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Rossi"
        prenom:
          type: string
          example: "Maria"
        code:
          type: string
          example: "AD"
        couleur:
          type: string
          example: "#FFFF80"
        civilite:
          type: string
          example: "Sig.ra"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        identifiant_connexion:
          type: string
          example: "Identificativo__connessione"
        nom_jeune_fille:
          type: string
          example: "Rossi"
        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: "Torino"
        numero_securite_sociale:
          type: string
          example: "2000213456789"
        cle_securite_sociale:
          type: string
          example: "12"
        mutuelle:
          type: string
          example: "MaMutuelle"
        commentaire:
          type: string
          example: "Ecco un commento molto utile"
        code_fiscal:
          type: string
          example: "154862"
        numero_tva:
          type: string
          example: "12584165a"
        site_internet:
          type: string
          example: "https://www.index-education.com"
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        apport_annuel:
          type: number
          example: 5.416666666666667
        information_interne:
          type: string
          example: "information interne"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        autorisation_reception_sms:
          type: boolean
          example: true
        numero_telephone_bureau:
          type: string
          example: "01010101"
        indicatif_telephone_bureau:
          type: string
          example: "01"
        publication:
          type: boolean
          example: true
        proprietaire:
          type: integer
          example: 10
        autorisation_diffusion_photo:
          type: boolean
          example: true
        partage_ponderation:
          type: boolean
          example: false
        matieres:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Martin.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
        cout_horaire_statutaire:
          type: integer
          example: 10
        cout_horaire_sans_public:
          type: integer
          example: 11
    Entreprises:                # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        raison_sociale:
          type: string
          example: "Index Education"
        nom_commercial:
          type: string
          example: "Docaposte"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        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: "nome.cognome@email.it"
        site_internet:
          type: string
          example: "https://www.index-education.com"
        activite:
          type: string
          example: "Activite"
        ape:
          type: string
          example: "APE"
        numero_siret:
          type: string
          example: "12345678901234"
        urssaf:
          type: string
          example: "08080808080808"
        convention_collective_code_idcc:
          type: string
          example: "1486"
        convention_collective:
          type: string
          example: "Syntec"
        effectif:
          type: integer
          example: 150
        assurance_responsabilite_civile:
          type: string
          example: "AD"
        numero_police_assurance:
          type: string
          example: "AD"
        commentaire_public:
          type: string
          example: "Commentaire public"
        commentaire_interne:
          type: string
          example: "Commentaire interne"
        proprietaire:
          type: integer
          example: 10
        responsable:
          type: integer
          example: 10
        contacts:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        maitres_tuteurs:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        charges_contrat:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Etablissement_origine:      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Etablissement1"
        email:
          type: string
          example: "Etablissement1@email.fr"
    Etudiants:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Rossi"
        prenom1:
          type: string
          example: "Maria"
        prenom2:
          type: string
          example: "Paolo"
        prenom3:
          type: string
          example: "Claudio"
        prenom_usage:
          type: string
          example: "Laura"
        date_naissance:
          type: string
          example: "2010-02-22"
        civilite:
          type: string
          example: "Sig.ra"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        identifiant_connexion:
          type: string
          example: "Identificativo__connessione"
        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: "Rossi"
        lieu_naissance:
          type: string
          example: "Torino"
        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: "Ecco un commento molto utile"
        code_fiscal:
          type: string
          example: "123456"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        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: "SCIENTIFICO"
        baccalaureat_specialite1:
          type: string
          example: "MATE"
        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: "modalità di ammissione"
        etablissement_origine:
          type: integer
          example: 10
        date_inscription:
          type: string
          example: "2022-02-22"
        cursus_anterieur:
          type: string
          example: "Piano di studi precedente"
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        acces_espace_etudiants:
          type: boolean
          example: true
        emargement_numerique:
          type: boolean
          example: true
        parent1:
          type: integer
          example: 10
        lien_parente1:
          type: string
          example: "madre"
        parent2:
          type: integer
          example: 10
        lien_parente2:
          type: string
          example: "padre"
        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: "Perfetto"
    Familles:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Tipologia1"
        mode:
          type: string
          example: "Specifiche definite"
        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": "Specifica1"},{"cle": 426,"nom": "Specifica1"}]
    Matieres:                   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Inglese"
        code:
          type: string
          example: "LV1"
        couleur:
          type: string
          example: "#FFFF80"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        libelle_long:
          type: string
          example: "Ecco un nome un po' più lungo"
        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: "Pubblicato su tutte le Aree"
        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: "Inglese"
        code:
          type: string
          example: "LV1"
        duree:
          type: number
          example: 3.125
        proprietaire:
          type: integer
          example: 10
        cursus:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_obligatoires:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        matieres_au_choix:
          type: array
          items:
            type: object
            properties:
              cle:
                type: integer
                example: 11
              libelle:
                type: string
                example: "Opzioni"
        libelles_au_choix:
          type: array
          items:
            type: string
        Apport:
          type: array
          items:
            type: object
            properties:
              cle_matiere:
                type: integer
                example: 11
              type:
                type: string
                example: "Attività"
              duree_totale:
                type: number
                example: 0.5
              duree_seance:
                type: number
                example: 0.041666666666666664
    Modules_notation:           # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        libelle:
          type: string
          example: "Inglese"
        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: "Malattia con certificato"
        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: "ANNULLAMENTO"
        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: "Esonero per motivi medici"
    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: "Rossi"
        prenom:
          type: string
          example: "Maria"
        civilite:
          type: string
          example: "Sig.ra"
        nom_naissance:
          type: string
          example: "Rossi"
        email:
          type: string
          example: "nome.cognome@email.it"
        destinataire_courriers_absences:
          type: boolean
          example: true
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        commentaire:
          type: string
          example: "Ecco un commento molto utile"
        profession:
          type: string
          example: "docente"
        situation_professionnelle:
          type: string
          example: "in attività"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        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: "Identificativo__connessione"
        acces_espace_parents:
          type: boolean
          example: true
        etudiants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Partitions:                 # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "TD"
        promotion:
          type: integer
          example: 12
        td:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
    Periodes_hors_calendrier:   # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Semestre1"
        couleur:
          type: string
          example: "#FFFF80"
        date_debut:
          type: string
          example: "2024-08-16"
        date_fin:
          type: string
          example: "2024-08-17"
        abreviation:
          type: string
          example: "P1"
        proprietaire:
          type: integer
          example: 10
        promotions:
          type: array
          items:
            type: integer
          example: [11,13,15,47]
    Periodes_notation:          # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Semestre1"
        couleur:
          type: string
          example: "#FFFF80"
        date_debut:
          type: string
          example: "2024-08-16"
        date_fin:
          type: string
          example: "2024-08-17"
        abreviation:
          type: string
          example: "P1"
        calendrier_notation:
          type: integer
          example: 11
    Ponderations:               # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 11
        numerateur:
          type: integer
          example: 3
        denominateur:
          type: integer
          example: 2
    Promotions:                 # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "1GM1"
        code:
          type: string
          example: "GM1"
        couleur:
          type: string
          example: "#FFFF80"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        libelle_long:
          type: string
          example: "Ecco un nome un po' più lungo"
        email:
          type: string
          example: "1gm1@email.fr"
        coordinateurs_pedagogiques:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        effectif_saisi:
          type: integer
          example: 30
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        gestion_automatique_des_liens:
          type: boolean
          example: true
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        regroupement:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        calendrier:
          type: string
          example: "Calendario1"
        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: "Identificativo__UID"
        effectif_saisi:
          type: integer
          example: 60
        promotions:
          type: array
          items:
            type: integer
          example: [11,13,15]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        proprietaire:
          type: integer
          example: 10
    Retards:                    # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        etudiant:
          type: integer
          example: 12
        date_heure:
          type: string
          example: "2024-08-16T09:00"
        duree:
          type: number
          example: 0.0104166666666667
        est_justifie:
          type: boolean
          example: true
        motif:
          type: string
          example: "Problema di trasporti"
    Rubriques:                  # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        nom:
          type: string
          example: "Specifica1"
        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: "Ecco un nome un po' più lungo"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        uid_identifiant:
          type: string
          example: "Identificativo__UID"
        capacite:
          type: integer
          example: 50
        acces_pmr:
          type: boolean
          example: true
        chaises_ergo:
          type: integer
          example: 5
        handiboucle:
          type: boolean
          example: true
        nombre_salles_max:
          type: integer
          example: 10
        proprietaire:
          type: integer
          example: 10
        publication:
          type: string
          example: "Pubblicato su tutte le Aree"
        site:
          type: string
          example: "Principale"
        descriptif:
          type: string
          example: "Descrizione dell'aula"
        descriptif_publie:
          type: boolean
          example: true
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_Salle_001.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
        est_dans_groupe_de_salle:
          type: integer
          example: 10
          description: "attention, seulement pour les salles simples"
        salles_de_ce_groupe_de_salle:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
          description: "attention, seulement pour les groupes de salles"
        cout_horaire:
          type: integer
          example: 10
    Semaines:                   # Object definition
      type: object
      properties:
        numero_semaine:
          type: integer
          example: 1
        numero_calendaire:
          type: integer
          example: 36
        date:
          type: string
          example: "2023-09-04"
    Services_notation:          # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        matiere:
          type: integer
          example: 13
        promotions:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        td_options:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        regroupements:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        enseignants:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        est_facultatif:
          type: boolean
          example: false
        nb_points_ects:
          type: number
          example: 10.5
        note_seuil_ects:
          type: string
          example: "10"
        note_eliminatoire_ects:
          type: string
          example: "5"
        devoirs:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        periodes_notation_actives:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        periodes_hors_calendrier_actives:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        sous_services:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        est_sous_service:
          type: boolean
          example: false
    Sites:                      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Principale"
        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: "argomento dello stage"
        enseignant_tuteur:
          type: integer
          example: 12
        enseignant_responsable:
          type: integer
          example: 14
        sujet_detaille:
          type: string
          example: "Argomento un po' più dettagliato"
        commentaire:
          type: string
          example: "Ecco un commento molto utile"
        objectifs:
          type: string
          example: "Ecco i vari obiettivi"
        activites_prevues:
          type: string
          example: "Ecco le attività previste"
        competences_visees:
          type: string
          example: "Ecco le competenze mirate"
        modalites_concertation:
          type: string
          example: "Ecco le modalità di concertazione"
        modalites_evaluation:
          type: string
          example: "Ecco le modalità di valutazione"
        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: ["Ticket restaurant","Trasporto"]
    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: "Identificativo__UID"
        effectif_saisi:
          type: integer
          example: 10
        mhh:
          type: number
          example: 0
        mhj:
          type: number
          example: 0.416666666666667
        libelle_long:
          type: string
          example: "Ecco un nome un po' più lungo"
        email:
          type: string
          example: "TD1@mail.fr"
        proprietaire:
          type: integer
          example: 10
        publication_sur_tous_les_espaces:
          type: boolean
          example: true
        calendrier:
          type: string
          example: "Calendario1"
        promotion:
          type: integer
          example: 10
        partition:
          type: integer
          example: 9
        regroupement:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        services_notation:
          type: array
          items:
            type: integer
          example: [10,12,14,48]
        url_ical:
          type: string
          example: "Telechargements/ical/Edt_TD1.ics?version=2024.0.0.1&icalsecurise=24CEE16504BB2D17FD70B67A011D2C5B96540596C7BD07B638A178567BCD58E3F98E7A4441BFD412246468E475B6D44C&sw=1"
    Type_dernier_diplome:       # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "BTS"
        code:
          type: string
          example: "B"
    Types:                      # Object definition
      type: object
      properties:
        nom:
          type: string
          example: "Attività"
        couleur:
          type: string
          example: "#21BBEF"
        mode_appel:
          type: string
          example: "QR Code fisso"
    Utilisateurs:               # Object definition
      type: object
      properties:
        cle:
          type: integer
          example: 10
        actif:
          type: boolean
          example: true
        nom:
          type: string
          example: "Rossi"
        prenom:
          type: string
          example: "Maria"
        profil_utilisation:
          type: object
          properties:
            cle:
              type: integer
            nom:
              type: string
          example:  {"cle": 2,"nom": "Modifiant"}
        civilite:
          type: string
          example: "Sig.ra"
        statut:
          type: string
          example: "Superadministrateur"
          description: "Formato atteso: 'U' o 'utente', 'S' o amministratore Pronote Campus', 'A' o 'amministratore di base dati'"
        ldap_identifiant:
          type: string
          example: "Identificativo__LDAP"
        cas_identifiant:
          type: string
          example: "Identificativo__CAS"
        adfs_identifiant:
          type: string
          example: "Identificativo__ADFS"
        saml_identifiant:
          type: string
          example: "Identificativo__SAML"
        identifiant_connexion:
          type: string
          example: "Identificativo__connessione"
        e_mail:
          type: string
          example: "nome.cognome@email.it"
        adresse1:
          type: string
          example: "Via Roma 1"
        adresse2:
          type: string
          example: "Via Roma 1"
        adresse3:
          type: string
          example: "Via Roma 1"
        adresse4:
          type: string
          example: "Via Roma 1"
        code_postal:
          type: string
          example: "13000"
        ville:
          type: string
          example: "Torino"
        pays:
          type: string
          example: "Italia"
        province:
          type: string
          example: "Provincia"
        numero_telephone_fixe:
          type: string
          example: "04040404"
        indicatif_telephone_fixe:
          type: string
          example: "04"
        numero_telephone_portable:
          type: string
          example: "06060606"
        indicatif_telephone_portable:
          type: string
          example: "06"
        acces_espace_secretariat:
          type: boolean
          example: true
security:
  - basicAuth: []  # <-- use the same name here
