---
openapi: "3.0.2"
info:
  title: "Harvest API - Référentiels  O2S"
  description: "# API permettant de récupérer différentes référentiels  d'O2S.\nCette\
    \ API offre différents services permettant de récupérer des éléments des diffé\
    rents référentiels d'O2S.\nPour ce faire, plusieurs Endpoint sont à disposition,\
    \ à savoir :\n\n- `/referentiels/contact-professions`: Permet de récupérer la\
    \ liste des éléments de la table contact-professions.\n- `/referentiels/contact-capacites`:\
    \ Permet de récupérer la liste des éléments de la table contact-capacites.\n-\
    \ `/referentiels/contact-origines`: Permet de récupérer la liste des éléments\
    \ de la table contact-origines.\n- `/referentiels/contact-qualites`: Permet de\
    \ récupérer la liste des éléments de la table contact-qualites.\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.3"
  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: "ReferentielsO2S"
  description: "Opérations sur les référentiels O2S."
  x-displayName: "ReferentielsO2S"
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)"
  /referentiels/contact-professions:
    summary: "Path used to manage the list of contact-professions."
    description: "The REST endpoint/path used to list and create zero or more `ElementTableReferentiel`\
      \ entities.  This path contains a `GET` operation to perform the list."
    get:
      tags:
      - "ReferentielsO2S"
      summary: "Récupérer la liste contact-professions."
      description: "Récupère la liste des éléments de contact-professions correspondant\
        \ aux critères de recherche.<br>"
      operationId: "getContactProfessions"
      parameters:
      - name: "code"
        in: "query"
        description: "Permet de récupérer uniquement l'uuid d'un code précis."
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/CodeType"
        example: "Agent de l'État"
      responses:
        "200":
          description: "Retourne la liste du ou des codes de la table concernée."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TablePersonnalisee"
              examples:
                listeSansCode:
                  value:
                  - code: "Agent de l'État"
                    uuid: "5e0cc0e4-5922-102e-8bd9-00215a4521d0"
                  - code: "Agent de maîtrise"
                    uuid: "5e0cc1b6-5922-102e-8bd9-00215a4521d0"
                  - code: "Agent général d'assurance"
                    uuid: "5e0cc27e-5922-102e-8bd9-00215a4521d0"
                listeAvecCode:
                  value:
                  - code: "Agent de l'État"
                    uuid: "5e0cc0e4-5922-102e-8bd9-00215a4521d0"
              example:
              - code: "Agent de l'État"
                uuid: "5e0cc0e4-5922-102e-8bd9-00215a4521d0"
              - code: "Agent de maîtrise"
                uuid: "5e0cc1b6-5922-102e-8bd9-00215a4521d0"
              - code: "Agent général d'assurance"
                uuid: "5e0cc27e-5922-102e-8bd9-00215a4521d0"
        "404":
          description: "Le code spécifié n'est pas présent dans la table."
  /referentiels/contact-capacites:
    summary: "Path used to manage the list of contact-capacites."
    description: "The REST endpoint/path used to list and create zero or more `ElementTableReferentiel`\
      \ entities.  This path contains a `GET` operation to perform the list."
    get:
      tags:
      - "ReferentielsO2S"
      summary: "Récupérer la liste contact-capacites."
      description: "Récupère la liste des éléments de contact-capacites correspondant\
        \ aux critères de recherche.<br>"
      operationId: "getContactCapacites"
      parameters:
      - name: "code"
        in: "query"
        description: "Permet de récupérer uniquement l'uuid d'un code précis."
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/CodeType"
        example: "Agent de l'État"
      responses:
        "200":
          description: "Retourne la liste du ou des codes de la table concernée."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TablePersonnalisee"
              examples:
                listeSansCode:
                  value:
                  - code: "Non définie"
                    uuid: "NDF"
                  - code: "Majeur capable"
                    uuid: "MAJEUR_CAPABLE"
                  - code: "Majeur protégé sous tutelle"
                    uuid: "MAJEUR_PROTEGE_SOUS_TUTELLE"
                listeAvecCode:
                  value:
                  - code: "Majeur capable"
                    uuid: "MAJEUR_CAPABLE"
        "404":
          description: "Le code spécifié n'est pas présent dans la table."
  /referentiels/contact-origines:
    summary: "Path used to manage the list of contact-origines."
    description: "The REST endpoint/path used to list and create zero or more `ElementTableReferentiel`\
      \ entities.  This path contains a `GET` operation to perform the list."
    get:
      tags:
      - "ReferentielsO2S"
      summary: "Récupérer la liste contact-origines."
      description: "Récupère la liste des éléments de contact-origines correspondant\
        \ aux critères de recherche.<br>"
      operationId: "getContactOrigines"
      parameters:
      - name: "code"
        in: "query"
        description: "Permet de récupérer uniquement l'uuid d'un code précis."
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/CodeType"
        example: "Agent de l'État"
      responses:
        "200":
          description: "Retourne la liste du ou des codes de la table concernée."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TablePersonnalisee"
              examples:
                listeSansCode:
                  value:
                  - code: "Non définie"
                    uuid: "NDF"
                  - code: "Prescripteur"
                    uuid: "5b76735c-5922-102e-8bd9-00215a4521d0"
                  - code: "Relationnel"
                    uuid: "5b76742e-5922-102e-8bd9-00215a4521d0"
                listeAvecCode:
                  value:
                  - code: "Relationnel"
                    uuid: "5b76742e-5922-102e-8bd9-00215a4521d0"
        "404":
          description: "Le code spécifié n'est pas présent dans la table."
  /referentiels/contact-qualites:
    summary: "Path used to manage the list of contact-qualites."
    description: "The REST endpoint/path used to list and create zero or more `ElementTableReferentiel`\
      \ entities.  This path contains a `GET` operation to perform the list."
    get:
      tags:
      - "ReferentielsO2S"
      summary: "Récupérer la liste contact-qualites."
      description: "Récupère la liste des éléments de contact-qualites correspondant\
        \ aux critères de recherche.<br>"
      operationId: "getContactQualites"
      parameters:
      - name: "code"
        in: "query"
        description: "Permet de récupérer uniquement l'uuid d'un code précis."
        required: false
        style: "form"
        explode: true
        schema:
          $ref: "#/components/schemas/CodeType"
        example: "Agent de l'État"
      responses:
        "200":
          description: "Retourne la liste du ou des codes de la table concernée."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TablePersonnalisee"
              examples:
                listeSansCode:
                  value:
                  - code: "Très importante"
                    uuid: "5ba808b8-5922-102e-8bd9-00215a4521d0"
                  - code: "Importante"
                    uuid: "5ba80980-5922-102e-8bd9-00215a4521d0"
                  - code: "Normale"
                    uuid: "5ba80a48-5922-102e-8bd9-00215a4521d0"
                listeAvecCode:
                  value:
                  - code: "Importante"
                    uuid: "5ba80980-5922-102e-8bd9-00215a4521d0"
        "404":
          description: "Le code spécifié n'est pas présent dans la table."
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."
    CodeType:
      type: "string"
      description: "Pour récupérer uniquement l'uuid d'un code précis d'une table\
        \ personnalisée."
    ElementTableReferentiel:
      type: "object"
      properties:
        code:
          type: "string"
          description: "Code d'un élément de la table."
        uuid:
          type: "string"
          description: "L'uuid associé au code."
      description: "Element table personnalisée"
    TablePersonnalisee:
      type: "array"
      items:
        $ref: "#/components/schemas/ElementTableReferentiel"
  parameters:
    code:
      name: "code"
      in: "query"
      description: "Permet de récupérer uniquement l'uuid d'un code précis."
      required: false
      style: "form"
      explode: true
      schema:
        $ref: "#/components/schemas/CodeType"
      example: "Agent de l'État"
  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
  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:
    - "ReferentielsO2S"
