---
openapi: "3.0.2"
info:
  title: "Harvest API - Utilisateurs O2S"
  description: "# API de gestion des utilisateurs O2S\nCette API offre différents\
    \ services permettant de gérer des utilisateurs O2S ainsi que les informations\
    \ liées.\n\nPour ce faire, plusieurs ressources sont à disposition, à savoir :\n\
    - `Utilisateur` : Permet de gérer l'entité de base de cette API que sont les utilisateurs.\n\
    - `Agence` : Permet de gérer les agences.\n- `Profil` : Permet de gérer les profils.\n\
    \n## Règlement Général sur la Protection des Données (RGPD)\n\n  Dans le cadre\
    \ de la mise à disposition de l’API, HARVEST s’engage à effectuer pour le compte\
    \ du Client responsable de traitement, les opérations de traitement de données\
    \ à caractère personnel en qualité de sous-traitant. A ce titre, **HARVEST et\
    \ le Client s’engagent à respecter la réglementation en vigueur applicable au\
    \ traitement de données à caractère personnel** en particulier, le règlement (UE)\
    \ 2016/679 du Parlement européen et du Conseil du 27 avril 2016 (ci-après le «\
    \ RGPD »).\n\n  L’API peut vous permettre de renseigner librement des proprié\
    tés typées et non typées. HARVEST attire votre attention sur la **nécessité**,\
    \ lors de la complétude de ces propriétés, **de respecter les dispositions du\
    \ RGPD**. Dès lors, seules les données adéquates, pertinentes et strictement né\
    cessaires au regard de la finalité des traitements réalisés par l’API doivent\
    \ être transmises.\n\n  L’API contient par ailleurs des **zones de commentaires\
    \ libres** dans lesquelles vous devez impérativement **rédiger des commentaires\
    \ objectifs, jamais excessifs ou insultants**. Aussi, vous devez **exclure toute\
    \ donnée considérée comme sensible** (origine raciale ou ethnique, opinions politiques,\
    \ philosophiques ou religieuses, appartenance syndicale, données relatives à la\
    \ santé ou à la vie sexuelle, infractions, condamnations, mesure de sûreté). En\
    \ cas de doute, vous pouvez contacter votre DPO qui vous indiquera ce qu’il est\
    \ possible de rédiger pour ne pas porter atteinte aux droits des personnes concerné\
    es."
  version: "0.9.0"
  x-logo:
      url: "zelogo.png"
      backgroundColor: "#012233"
      altText: "Logo Harvest"
servers: []
security:
- JWT: []
tags:
- name: "Authent"
  description: "## Généralité\nPour utiliser l'API O2S, vous devez préalablement vous\
    \ authentifier en suivant le protocole OAuth2\n\"password grant type\" afin de\
    \ récupérer un jeton (JWT) d'accès.\n\n## Informations nécessaires\nLes informations\
    \ nécessaires à l'obtention d'un jeton sont constituées :\n- d'informations fournies\
    \ par Harvest qui sont spécifiques à votre application (client_id + client_secret)\n\
    - d'informations spécifiques à un utilisateur O2S (username + password) dont l'API\
    \ reprendra l'identité.\n\nIl vous faut renseigner ces informations dans la ressource\
    \ en entrée du service d'obtention d'un nouveau jeton.\n\n## Utilisation du jeton\
    \ d'accès\nLe jeton JWT doit être fourni lors de l'appel de chaque requête à l'API.\
    \ Il doit être ajouté dans\n**l'entête HTTP Authorization** comme ceci :\n`Authorization:\
    \ Bearer <JWT>`"
  x-displayName: "Sécurité"
- name: "Problem"
  description: "Les réponses principales de l'API sont décrites au niveau de chacune\
    \ de ses ressources (GET, POST, PUT, DELETE...).\n\nCelles qui n'y sont pas spé\
    cifiées sont celles retournées en cas de problème soit avec la requête elle-mê\
    me soit avec le serveur ou son environnement.\n\nLes statuts HTTP concernés par\
    \ ces dernières sont les 4xx (hors 404) et 5xx.\n\nLe format des réponses répond\
    \ au schéma [Problem Zalando](docs/Problem/ProblemJson-schema-1.yaml)."
  x-displayName: "Réponse en cas de problème"
- name: "UtilisateursO2S"
  description: "Opérations sur les utilisateurs O2S"
  x-displayName: "Utilisateur"
- name: "AgencesO2S"
  description: "Opérations sur les agences O2S"
  x-displayName: "Agence"
- name: "ProfilsO2S"
  description: "Opérations sur les profils O2S"
  x-displayName: "Profil"
paths:
  /auth/realms/AppUsers/protocol/openid-connect/token:
    post:
      tags:
      - "Authent"
      description: "Le jeton JWT d'accès à exploiter est retourné dans valeur de la\
        \ propriété `access_token`.\n\nIl doit être précisé dans **l'entête HTTP**\
        \ de toutes les requêtes (sauf celle d'authentification)\ncomme ceci :\n\n\
        `Authorization: Bearer <access_token>`"
      operationId: "OAuthPasswordAuthenticate"
      requestBody:
        $ref: "#/components/requestBodies/OAuthPassword"
      responses:
        "200":
          description: "200 OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OAuth200"
        "400":
          description: "Erreur OAuth 400 (Bad Request)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OAuthErr"
              example:
                error: "invalid_request"
                error_description: "Missing form parameter: grant_type"
        "401":
          description: "Erreur OAuth 401 (Unauthorized)"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OAuthErr"
              example:
                error: "invalid_grant"
                error_description: "Invalid user credentials"
      servers:
      - url: "https://auth-r7.harvest.fr"
        description: "Authentification O2S (recette)"
      - url: "https://auth.harvest.fr"
        description: "Authentification O2S (production)"
  /profils:
    summary: "Path used to manage the list of profils."
    description: "The REST endpoint/path used to list `Agence` entities.  This path\
      \ contains a `GET` operation to perform the list task."
    get:
      tags:
      - "ProfilsO2S"
      summary: "Lister les profils"
      description: "Récupère la liste de tous les `Profil` existants."
      operationId: "getProfils"
      responses:
        "200":
          description: "Retourne la liste de tous les profils utilisateurs."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesProfils"
  /agences:
    summary: "Path used to manage the list of agences."
    description: "The REST endpoint/path used to list and create zero or more `Agence`\
      \ entities.  This path contains a `GET` and `POST` operation to perform the\
      \ list and create tasks, respectively."
    get:
      tags:
      - "AgencesO2S"
      summary: "Lister les Agences"
      description: "Récupère la liste de toutes les `Agence` existantes."
      operationId: "getAgences"
      responses:
        "200":
          description: "Retourne la liste de toutes les agences."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesAgences"
    post:
      tags:
      - "AgencesO2S"
      summary: "Créer une Agence"
      description: "Crée une nouvelle `Agence`."
      operationId: "createAgence"
      requestBody:
        description: "Une `Agence` à créer."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Agence"
        required: true
      responses:
        "201":
          description: "L\\'`Agence` a correctement été créée."
  /agences/{agenceId}:
    summary: "Path used to manage a single Agence."
    description: "The REST endpoint/path used to get, update, and delete single instances\
      \ of an `Agence`.  This path contains `GET`, `PUT`, and `DELETE` operations\
      \ used to perform the get, update, and delete tasks, respectively."
    get:
      tags:
      - "AgencesO2S"
      summary: "Obtenir une Agence"
      description: "Récupère les données d\\'une unique `Agence`."
      operationId: "getAgence"
      parameters:
      - name: "agenceId"
        in: "path"
        description: "L'identifiant unique et stable d\\'une `Agence`."
        required: true
        style: "simple"
        explode: false
        schema:
          type: "string"
      responses:
        "200":
          description: "Retourne les données d\\'une unique `Agence`."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Agence"
        "404":
          description: "L\\'`Agence` spécifiée est inexistante."
    put:
      tags:
      - "AgencesO2S"
      summary: "Mettre à jour une Agence"
      description: "Met à jour une `Agence` existante."
      operationId: "updateAgence"
      parameters:
      - name: "agenceId"
        in: "path"
        description: "L'identifiant unique et stable d\\'une `Agence`."
        required: true
        style: "simple"
        explode: false
        schema:
          type: "string"
      requestBody:
        description: "Les données d'une `Agence` à mettre à jour."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Agence"
        required: true
      responses:
        "204":
          description: "L\\'`Agence` spécifiée a été correctement mise à jour."
        "404":
          description: "L\\'`Agence` spécifiée est inexistante."
    delete:
      tags:
      - "AgencesO2S"
      summary: "Supprimer une Agence"
      description: "Supprime une `Agence` existante."
      operationId: "deleteAgence"
      parameters:
      - name: "agenceId"
        in: "path"
        description: "L'identifiant unique et stable d\\'une `Agence`."
        required: true
        style: "simple"
        explode: false
        schema:
          type: "string"
      responses:
        "204":
          description: "L\\'`Agence` spécifiée a été supprimée."
        "404":
          description: "L\\'`Agence` spécifiée est inexistante."
  /utilisateurs:
    summary: "Path used to manage the list of utilisateurs."
    description: "The REST endpoint/path used to list and create zero or more `Utilisateur`\
      \ entities.  This path contains a `GET` and `POST` operation to perform the\
      \ list and create tasks, respectively."
    get:
      tags:
      - "UtilisateursO2S"
      summary: "Lister des Utilisateurs"
      description: "Récupère une liste d'`Utilisateur` correspondant aux critères\
        \ facultatifs de recherche.<br>\nPar défaut :\n  * aucun filtre n'est appliqué\
        \ (permet de récupérer tous les utilisateurs)\n  * le nombre d'éléments retourné\
        s est limité à 20"
      operationId: "getUtilisateurs"
      parameters:
      - name: "refext"
        in: "query"
        description: "Référence externe de l'utilisateur recherché (de la forme `ré\
          férentiel`:`identifiant`)"
        required: false
        style: "form"
        explode: true
        schema:
          pattern: "^.+:.*$"
          type: "string"
        example: "SI:12345"
      - name: "responsableId"
        in: "query"
        description: "Référence (id) de l'utilisateur responsable hiérarchique des\
          \ utilisateurs recherchés"
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/TypeId"
      - name: "agenceId"
        in: "query"
        description: "Référence (id) d'une agence de rattachement des utilisateurs\
          \ recherchés"
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/TypeId"
      - name: "profilId"
        in: "query"
        description: "Référence (id) du profil des utilisateurs recherchés"
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/TypeId"
      - name: "limit"
        in: "query"
        description: "Nombre maximum d'utilisateurs à retourner"
        required: false
        style: "form"
        explode: true
        schema:
          type: "integer"
          default: 20
      - name: "offset"
        in: "query"
        description: "Indice (0-based) du premier utilisateur à retourner"
        required: false
        style: "form"
        explode: true
        schema:
          type: "integer"
          default: 0
      responses:
        "200":
          description: "Retourne l'ensemble complet des `Utilisateur` répondant aux\
            \ critères de recherche."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesUtilisateurs"
        "206":
          description: "Retourne un ensemble partiel d'`Utilisateur` répondant aux\
            \ critères de recherche."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesUtilisateurs"
    post:
      tags:
      - "UtilisateursO2S"
      summary: "Créer un Utilisateur"
      description: "Crée un nouvel `Utilisateur`."
      operationId: "createUtilisateur"
      requestBody:
        description: "Les données d'un `Utilisateur` à créer."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Utilisateur"
        required: true
      responses:
        "201":
          description: "L\\'`Utilisateur` a correctement été créé."
        "409":
          description: "L\\'`Utilisateur` est déjà existant avec la référence fournie."
  /utilisateurs/{utilisateurId}:
    summary: "Path used to manage a single Utilisateur."
    description: "The REST endpoint/path used to get, update, and delete single instances\
      \ of an `Utilisateur`.  This path contains `GET`, `PUT`, and `DELETE` operations\
      \ used to perform the get, update, and delete tasks, respectively."
    get:
      tags:
      - "UtilisateursO2S"
      summary: "Obtenir un Utilisateur"
      description: "Récupère les données d\\'un unique `Utilisateur`."
      operationId: "getUtilisateur"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      responses:
        "200":
          description: "Retourne les données d'un unique `Utilisateur`."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Utilisateur"
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistant."
    put:
      tags:
      - "UtilisateursO2S"
      summary: "Mettre à jour un Utilisateur"
      description: "Met à jour un `Utilisateur` existant."
      operationId: "updateUtilisateur"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      requestBody:
        description: "Les données d\\'un `Utilisateur` à mettre à jour."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Utilisateur"
        required: true
      responses:
        "204":
          description: "L\\'`Utilisateur` spécifié a été correctement mis à jour."
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistant."
    delete:
      tags:
      - "UtilisateursO2S"
      summary: "Supprimer un Utilisateur"
      description: "Supprime un `Utilisateur` existant."
      operationId: "deleteUtilisateur"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      responses:
        "204":
          description: "L\\'`Utilisateur` spécifié a été supprimé."
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistante"
  /utilisateurs/{utilisateurId}/statut:
    summary: "Path used to change the status property of a single Utilisateur."
    description: "The REST endpoint/path used to update the designated property of\
      \ an `Utilisateur`.  This path contains `PUT` operation used to perform the\
      \ update task."
    put:
      tags:
      - "UtilisateursO2S"
      summary: "Mettre à jour le statut d'un Utilisateur"
      description: "Met à jour le statut d\\'un `Utilisateur` existant."
      operationId: "updateStatus"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StatutUtilisateur"
        required: true
      responses:
        "204":
          description: "Le statut de l\\'`Utilisateur` spécifié a été correctement\
            \ mis à jour."
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistant."
  /utilisateurs/{utilisateurId}/responsableId:
    summary: "Path used to change the responsableId property of a single Utilisateur."
    description: "The REST endpoint/path used to update the designated property of\
      \ an `Utilisateur`.  This path contains `PUT` operation used to perform the\
      \ update task."
    put:
      tags:
      - "UtilisateursO2S"
      summary: "Mettre à jour le responsable d'un Utilisateur"
      description: "Met à jour la référence au responsable hiérarchique d\\'un `Utilisateur`\
        \ existant."
      operationId: "updateResponsable"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ResponsableId"
        required: true
      responses:
        "204":
          description: "Le responsable hiérarchique de l\\'`Utilisateur` spécifié\
            \ a été correctement mis à jour."
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistant."
    delete:
      tags:
      - "UtilisateursO2S"
      summary: "Supprimer le responsable d'un Utilisateur"
      description: "Supprimer la référence au responsable hiérarchique d\\'un `Utilisateur`\
        \ existant."
      operationId: "deleteResponsable"
      parameters:
      - name: "utilisateurId"
        in: "path"
        description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
          \ la valeur 'myself' pour le GET afin de retourner les informations sur\
          \ l'utilisateur connecté"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      responses:
        "204":
          description: "Le responsable hiérarchique de l\\'`Utilisateur` spécifié\
            \ a été correctement supprimé."
        "404":
          description: "L\\'`Utilisateur` spécifié est inexistant."
components:
  schemas:
    OAuthPassword:
      required:
      - "client_id"
      - "client_secret"
      - "grant_type"
      - "password"
      - "username"
      type: "object"
      properties:
        grant_type:
          type: "string"
          description: "Méthode d'authentification OAuth à définir obligatoirement\
            \ à `password`."
          enum:
          - "password"
        client_id:
          type: "string"
          description: "Identifiant de l'application cliente."
        client_secret:
          type: "string"
          description: "Secret de l'application cliente."
        username:
          type: "string"
          description: "Identifiant de connexion de l'utilisateur."
        password:
          type: "string"
          description: "Mot de passe de l'utilisateur."
    OAuth200:
      type: "object"
      properties:
        access_token:
          type: "string"
          description: "Jeton d'accès émis par le serveur d'autorisation."
        expires_in:
          type: "integer"
          description: "Si le jeton d'accès expire, le serveur retourne la durée (en\
            \ secondes) pendant laquelle le jeton\nd'accès est accordé."
          format: "int32"
        refresh_expires_in:
          type: "integer"
          description: "Si le jeton d'accès expire, le serveur retourne la durée (en\
            \ secondes) pendant laquelle le jeton\nd'actualisation est accordé."
          format: "int32"
        refresh_token:
          type: "string"
          description: "Si le jeton d'accès expire, ce jeton d'actualisation doit\
            \ être utilisé pour obtenir un autre jeton d'accès."
        token_type:
          type: "string"
          description: "Le type du jeton \"bearer\"."
        not-before-policy:
          type: "integer"
          format: "int32"
        session_state:
          type: "string"
        scope:
          type: "string"
      description: "Réponse OAuth 200 (OK)"
      example:
        access_token: "eyJhbGciOi...fgWOZZmV7Q"
        expires_in: 86400
        refresh_expires_in: 86400
        refresh_token: "eyJhbGciOi...KiIVIifWw"
        token_type: "bearer"
        not-before-policy: 1602682985
        session_state: "85d20350-891b-4dad-b6ed-c411c6ac870c"
        scope: "..."
    OAuthErr:
      type: "object"
      properties:
        error:
          type: "string"
          description: "Description courte de l'erreur."
        error_description:
          type: "string"
          description: "Description détaillée de l'erreur."
    ResponsableId:
      properties:
        responsableId:
          description: "Référence (id) de l'utilisateur responsable hiérarchique"
          allOf:
          - $ref: "#/components/schemas/TypeId"
    StatutUtilisateur:
      properties:
        statut:
          $ref: "#/components/schemas/TypeStatutUtilisateur"
    TypeStatutUtilisateur:
      type: "string"
      description: "Permet de spécifier si le compte utilisateur est activé ou dé\
        sactivé"
      enum:
      - "ACTIVE"
      - "DESACTIVE"
    MoyensContact:
      properties:
        moyensContact:
          $ref: "#/components/schemas/TypeMoyensContact"
    Utilisateur:
      type: "object"
      allOf:
      - $ref: "#/components/schemas/TypeEntiteNoyau"
      - required:
        - "profilId"
        properties:
          login:
            maxLength: 50
            type: "string"
            description: "Login utilisé pour la connexion à l'application"
          profilId:
            description: "Référence (id) d'un profil utilisateur"
            allOf:
            - $ref: "#/components/schemas/TypeId"
          refExternes:
            $ref: "#/components/schemas/TypeReferencesExternes"
          statut:
            $ref: "#/components/schemas/TypeStatutUtilisateur"
          responsableId:
            description: "Référence (id) de l'utilisateur responsable hiérarchique"
            allOf:
            - $ref: "#/components/schemas/TypeId"
          agenceIds:
            type: "array"
            description: "Références (ids) des agences de rattachement"
            items:
              $ref: "#/components/schemas/TypeId"
          donneesPersonnelles:
            $ref: "#/components/schemas/DonneesPersonnelles"
    DonneesPersonnelles:
      description: "Données à caractère personnel"
      allOf:
      - $ref: "#/components/schemas/Civilite"
      - allOf:
        - $ref: "#/components/schemas/DonneesNominatives"
        - allOf:
          - $ref: "#/components/schemas/MoyensContact"
    Civilite:
      properties:
        civilite:
          $ref: "#/components/schemas/TypeCiviliteCode"
    ResumesUtilisateurs:
      type: "array"
      items:
        $ref: "#/components/schemas/Utilisateur"
    Agence:
      allOf:
      - $ref: "#/components/schemas/TypeEntiteNoyau"
      - allOf:
        - $ref: "#/components/schemas/MoyensContact"
    ResumesAgences:
      type: "array"
      items:
        $ref: "#/components/schemas/TypeEntiteNoyau"
    ResumesProfils:
      type: "array"
      items:
        $ref: "#/components/schemas/TypeEntiteNoyau"
    TypeId:
      maxLength: 100
      minLength: 1
      type: "string"
    TypeMoyensContact:
      type: "object"
      properties:
        adresse:
          type: "object"
          description: "Adresse de contact"
          allOf:
          - $ref: "#/components/schemas/TypeAdressePostale"
        telephones:
          maxItems: 20
          type: "array"
          description: "Numéros de téléphone du domicile, mobile, pro ou fax etc."
          items:
            $ref: "#/components/schemas/TypeContactTelephone"
        emails:
          maxItems: 20
          type: "array"
          description: "Emails personnel, professionnel, etc."
          items:
            $ref: "#/components/schemas/TypeContactEmail"
      description: "Moyens de contact (adresse, emails, téléphones)"
    TypeAdressePostale:
      type: "object"
      properties:
        intitule:
          type: "string"
          description: "Pour la correspondance avec une entreprise, intitulé de la\
            \ fonction du correspondant (Directeur général par exemple)."
        identification:
          type: "string"
          description: "* Pour la correspondance avec une personne physique, complé\
            ment d’identification du l'appartement du destinataire  (ex : Entrée,\
            \ N° d'appartement, Escalier, N° de boite aux lettres, etc.)\n* Pour la\
            \ correspondance avec une entreprise, identité du destinataire, n° de\
            \ service etc."
        immeuble:
          type: "string"
          description: "Complément d’identification de l'immeuble du destinataire\
            \ (ex : Résidence, Immeuble, N° tour, etc.)"
        voie:
          type: "string"
          description: "Voie et situation dans la voie (n°, complément de n°, type\
            \ et nom de la voie) "
        codePostal:
          description: "Code postal."
          allOf:
          - $ref: "#/components/schemas/TypeCodePostal"
        localite:
          type: "string"
          description: "Nom de la commune, du hameau ou localité de destination."
        lieuDit:
          type: "string"
          description: "Informations particulières de distribution (lieu dit, numé\
            ro de boite postale,..)"
        codePays:
          maxLength: 4
          minLength: 2
          type: "string"
          description: "Code du pays [(selon la liste ISO 3166 2A)](docs/Connaissance-client/Pays.pdf)"
      description: "Structure d'une adresse postale."
    TypeContactTelephone:
      type: "object"
      properties:
        type:
          type: "string"
          description: "Type de numéro téléphonique\n\n* DOMICILE\n* PROFESSIONNEL\n\
            * MOBILE\n* TELECOPIE\n* AUTRE"
          enum:
          - "DOMICILE"
          - "PROFESSIONNEL"
          - "MOBILE"
          - "TELECOPIE"
          - "AUTRE"
        numero:
          type: "string"
          description: "Numéro de téléphone."
        usages:
          type: "object"
          additionalProperties:
            maxLength: 100
            type: "string"
          description: "Permet d'associer un ou plusieurs usages particuliers (signature\
            \ électronique, la double authentification,...) à un numéro de téléphone."
    TypeContactEmail:
      type: "object"
      properties:
        type:
          type: "string"
          description: "Type d'email\n\n* PERSONNEL\n* PROFESSIONNEL\n* AUTRE"
          enum:
          - "PERSONNEL"
          - "PROFESSIONNEL"
          - "AUTRE"
        adresse:
          type: "string"
          description: "Adresse email."
        libelle:
          type: "string"
          description: "Nom de l’email."
        usages:
          type: "object"
          additionalProperties:
            maxLength: 100
            type: "string"
          description: "Permet d'associer un ou plusieurs usages particuliers (signature\
            \ électronique par exemple) à une adresse email."
    TypeEntiteNoyau:
      allOf:
      - $ref: "#/components/schemas/TypeEntiteNoyauOut"
    TypeEntiteNoyauOut:
      type: "object"
      properties:
        id:
          description: "Référence (id) de l'entité."
          readOnly: true
          allOf:
          - $ref: "#/components/schemas/TypeId"
        libelle:
          $ref: "#/components/schemas/TypeLibelle"
        dateCreation:
          description: "Date et heure de création d'une entité."
          readOnly: true
          allOf:
          - $ref: "#/components/schemas/TypeDateHeure"
        dateMaj:
          description: "Date et heure de dernière modification de l'entité."
          readOnly: true
          allOf:
          - $ref: "#/components/schemas/TypeDateHeure"
      x-parent: true
    TypeReferencesExternes:
      type: "object"
      additionalProperties:
        maxLength: 100
        type: "string"
      description: "Collection d'identifiants de la ressource dans plusieurs réfé\
        rentiels.\nChaque référence externe est constituée :\n  * d'une clé correspondant\
        \ à un identifiant global du référentiel externe\n  * d'une valeur associé\
        e correspondant à la valeur de l'identifiant de la ressource dans le réfé\
        rentiel externe concerné"
    DonneesNominatives:
      type: "object"
      properties:
        nom:
          type: "string"
          description: "Nom d'usage"
        nomNaissance:
          type: "string"
          description: "Nom de naissance"
        prenoms:
          maxItems: 10
          type: "array"
          description: "Collection de prénoms"
          items:
            type: "string"
      description: "Données nominatives d'une personne."
    TypeCiviliteCode:
      type: "string"
      description: "Civilité de la personne :\n* M : Monsieur\n* MME : Madame\n* MLLE:\
        \ Mademoiselle"
      enum:
      - "M"
      - "MME"
      - "MLLE"
    TypeCodePostal:
      maxLength: 5
      minLength: 3
      pattern: "^([0-9]{5,5}|[0-9]{2,4}\\*)$"
      type: "string"
      example: "06400"
    TypeLibelle:
      maxLength: 200
      minLength: 1
      type: "string"
      description: "Le libellé de l'entité."
    TypeDateHeure:
      type: "string"
      format: "date-time"
  parameters:
    UtilisateurId:
      name: "utilisateurId"
      in: "path"
      description: "Référence (id) de l'utilisateur si la valeur est connue. Mettre\
        \ la valeur 'myself' pour le GET afin de retourner les informations sur l'utilisateur\
        \ connecté"
      required: true
      style: "simple"
      explode: false
      schema:
        $ref: "#/components/schemas/TypeId"
  requestBodies:
    OAuthPassword:
      content:
        application/x-www-form-urlencoded:
          schema:
            $ref: "#/components/schemas/OAuthPassword"
          examples:
            OAuth2PasswordPayload:
              value:
                grant_type: "password"
                client_id: "clientId"
                client_secret: "clientSecret"
                username: "username"
                password: "password"
      required: true
  headers:
    Content-Range:
      description: "Content-Range: `first`–`last`/`count`\n  * first : indice du premier\
        \ élément retourné.\n  * last : indice du dernier élément retourné.\n  * count\
        \ : nombre total d’éléments correspondant aux critères de recherche."
      style: "simple"
      explode: false
      schema:
        maxLength: 40
        pattern: "^\\d+-\\d+\\/\\d+$"
        type: "string"
      examples:
        all:
          description: "totalité des 6 éléments répondant aux critères de recherche"
          value: "0-5/6"
        page2:
          description: "deuxième page de 20 éléments sur 258"
          value: "20-39/258"
  securitySchemes:
    JWT:
      type: "http"
      description: "Identification via token JWT"
      scheme: "bearer"
      bearerFormat: "JWT"
x-tagGroups:
  - name: "Aspects techniques"
    tags:
    - "Authent"
    - "Problem"
  - name: "Opérations sur les ressources"
    tags:
    - "UtilisateursO2S"
    - "AgencesO2S"
    - "ProfilsO2S"
