---
openapi: "3.0.2"
info:
  title: "Harvest API - Comptes O2S"
  description: "# API de gestion des Comptes O2S\nCette API offre différents services\
    \ permettant de gérer des comptes O2S ainsi que les informations liées.\n\nPour\
    \ ce faire, plusieurs ressources sont à disposition, à savoir :\n- `Compte` :\
    \ Permet de gérer l'entité de base de cette API que sont les comptes.\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: "ComptesO2S"
  description: "Opérations sur les comptes O2S"
  x-displayName: "Compte"
- name: "RelationsO2S"
  description: "Opérations sur les relations O2S"
  x-displayName: "Relation"
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)"
  /comptes:
    summary: "Path used to manage the list of comptes."
    description: "The REST endpoint/path used to list and create zero or more `Compte`\
      \ entities.  This path contains a `GET` and `POST` operation to perform the\
      \ list and create tasks, respectively."
    get:
      tags:
      - "ComptesO2S"
      summary: "Lister des comptes"
      description: "Récupère une liste de `Compte` correspondant aux critères facultatifs\
        \ de recherche.<br>\nPar défaut :\n  * aucun filtre n'est appliqué (permet\
        \ de récupérer tous les comptes)\n  * le nombre d'éléments retournés est limité\
        \ à 20"
      operationId: "getComptes"
      parameters:
      - name: "contactId"
        in: "query"
        description: "Référence (id) du contact détenteur des comptes recherchés"
        required: false
        style: "form"
        explode: true
        schema:
          pattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
          type: "string"
        example: "f6757ef4-0a91-4db6-8b7a-f9b76ce29a8c"
      - name: "numero"
        in: "query"
        description: "Identification du compte"
        required: false
        style: "form"
        explode: true
        schema:
          type: "string"
      - name: "produitId"
        in: "query"
        description: "Référence à un produit du catalogue"
        required: false
        style: "form"
        explode: true
        schema:
          type: "string"
      - name: "limit"
        in: "query"
        description: "Nombre maximum de comptes à retourner"
        required: false
        style: "form"
        explode: true
        schema:
          type: "integer"
          default: 20
      - name: "offset"
        in: "query"
        description: "Indice (0-based) du premier compte à retourner"
        required: false
        style: "form"
        explode: true
        schema:
          type: "integer"
          default: 0
      responses:
        "200":
          description: "Retourne l'ensemble complet des `Compte` répondant aux critè\
            res de recherche."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesComptes"
        "206":
          description: "Retourne un ensemble partiel de `Compte` répondant aux critè\
            res de recherche."
          headers:
            Content-Range:
              $ref: "#/components/headers/Content-Range"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResumesComptes"
    post:
      tags:
      - "ComptesO2S"
      summary: "Créer un compte"
      description: "Crée un nouvel `Compte`."
      operationId: "createCompte"
      requestBody:
        description: "Les données d'un `Compte` à créer."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Compte"
        required: true
      responses:
        "201":
          description: "Le `Compte` a correctement été créé."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompteId"
        "409":
          description: "Un compte existe déjà avec le numéro de compte et la réfé\
            rence (id) du produit fournis."
        "400":
          description: "Données invalides."
  /comptes/{compteId}:
    summary: "Path used to manage a single Compte."
    description: "The REST endpoint/path used to get, update, and delete single instances\
      \ of an `Compte`.  This path contains `GET`, `PUT`, and `DELETE` operations\
      \ used to perform the get, update, and delete tasks, respectively."
    get:
      tags:
      - "ComptesO2S"
      summary: "Obtenir un compte"
      description: "Récupère les données d\\'un unique `Compte`."
      operationId: "getCompte"
      parameters:
      - name: "compteId"
        in: "path"
        description: "Référence (id) du compte"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      responses:
        "200":
          description: "Retourne les données d'un unique `Compte`."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Compte"
        "404":
          description: "Le `Compte` spécifié est inexistant."
    put:
      tags:
      - "ComptesO2S"
      summary: "Mettre à jour un compte"
      description: "Met à jour un `Compte` existant."
      operationId: "updateCompte"
      parameters:
      - name: "compteId"
        in: "path"
        description: "Référence (id) du compte"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      requestBody:
        description: "Les données d\\'un `Compte` à mettre à jour."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CompteMaj"
        required: true
      responses:
        "204":
          description: "Le `Compte` spécifié a été correctement mis à jour."
        "404":
          description: "Le `Compte` spécifié est inexistant."
  /comptes/{compteId}/situations:
    summary: "Path used to manage a single Compte."
    description: "The REST endpoint/path used to update, single instances of an `Compte`.\
      \  This path contains `PUT` operations used to perform the get, update, and\
      \ delete tasks, respectively."
    put:
      tags:
      - "ComptesO2S"
      summary: "Mettre à jour les situations d'un compte"
      description: "Met à jour les situations d'un `Compte` existant."
      operationId: "updateSituationsCompte"
      parameters:
      - name: "compteId"
        in: "path"
        description: "Référence (id) du compte"
        required: true
        style: "simple"
        explode: false
        schema:
          $ref: "#/components/schemas/TypeId"
      requestBody:
        description: "Les données situations d\\'un `Compte` à mettre à jour."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CompteMajSituation"
        required: true
      responses:
        "204":
          description: "Les situations sur le `Compte` spécifié ont été correctement\
            \ mis à jour."
        "404":
          description: "Le `Compte` spécifié est inexistant."
        "400":
          description: "Le `Compte` spécifié n'a pas pu être correctement mis à jour."
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."
    CompteId:
      properties:
        id:
          description: "Référence (id) du compte"
          allOf:
          - $ref: "#/components/schemas/TypeId"
    ResumesComptes:
      type: "array"
      items:
        $ref: "#/components/schemas/ResumesCompte"
    Detenteur:
      type: "object"
      allOf:
      - $ref: "#/components/schemas/DetenteursIn"
    Detenteurs:
      type: "array"
      items:
        $ref: "#/components/schemas/Detenteur"
    ResumesCompte:
      type: "object"
      properties:
        identification:
          $ref: "#/components/schemas/Identification"
        produitLie:
          $ref: "#/components/schemas/ProduitLieIn"
      allOf:
      - $ref: "#/components/schemas/TypeEntiteNoyau"
    TypeEntiteStock:
      type: "object"
      allOf:
      - $ref: "#/components/schemas/TypeEntiteNoyauOut"
      - type: "object"
        properties:
          type:
            $ref: "#/components/schemas/TypeStock"
          modeleFinancier:
            $ref: "#/components/schemas/TypeModeleFinancier"
    Compte:
      type: "object"
      allOf:
      - $ref: "#/components/schemas/TypeEntiteStock"
      - type: "object"
        properties:
          identification:
            $ref: "#/components/schemas/Identification"
          produitLie:
            $ref: "#/components/schemas/ProduitLieIn"
          placement:
            $ref: "#/components/schemas/PlacementIn"
          valeur:
            $ref: "#/components/schemas/ValeurStockIn"
          detenteurs:
            $ref: "#/components/schemas/DetenteursIn"
    Identification:
      type: "object"
      properties:
        numero:
          type: "string"
          description: "Identification du numéro du compte."
      description: "Extension `Identification` d'un `stock`."
    CompteMaj:
      properties:
        libelle:
          $ref: "#/components/schemas/TypeLibelle"
        placement:
          $ref: "#/components/schemas/TypePlacement"
    TypePlacement:
      properties:
        statut:
          $ref: "#/components/schemas/TypeStatutPlacement"
    CompteMajSituation:
      properties:
        valeur:
          $ref: "#/components/schemas/ValeurStockIn"
    TypeId:
      maxLength: 100
      minLength: 1
      type: "string"
    DetenteursIn:
      required:
      - "code"
      - "detenteurs"
      type: "object"
      properties:
        code:
          type: "string"
          description: "Identifie le type de détenteur :\n\n* code = UNIQUE >> on\
            \ attend 1 propriétaire ( Monsieur X, Madame X, Communauté)\n* code =\
            \ PLUSIEURS >> on attend plusieurs propriétaires (Monsieur + madame +\
            \ 1 enfant, Monsieur + enfant...)\n* code = COUPLE >> on attend deux personnes\
            \ qui vivent en couple (et sont donc référencé par un lien dans l’étude)"
          enum:
          - "UNIQUE"
          - "COUPLE"
          - "PLUSIEURS"
        detenteurs:
          minItems: 1
          type: "array"
          description: "Liste de détenteurs"
          items:
            $ref: "#/components/schemas/TypeDetention"
        clause_attribution_conjoint_survivant:
          $ref: "#/components/schemas/TypeClauseAttributionConjointSurvivant"
      description: "Extension `Detenteurs` d'un `stock`."
    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
    ProduitLieIn:
      type: "object"
      properties:
        produitId:
          description: "Référence à un produit du catalogue."
          allOf:
          - $ref: "#/components/schemas/TypeId"
      description: "Extension `ProduitLie` d'un `Stock`."
    TypeStock:
      type: "string"
      description: "Type du stock. Permet de gérer les éléments sous-jacents optionnels."
      enum:
      - "AVOIR"
      - "ASSVIE"
      - "IARD"
      - "IMMO"
      - "CREDIT"
      - "ENTREPRISE"
      - "AUTRE"
      - "TONTINE"
      - "PREVOYANCE"
    TypeModeleFinancier:
      type: "string"
      description: "Modèle métier définissant les règles de gestion du stock permettant\
        \ aux moteurs et applications utilisatrices d'appliquer des règles spécifiques\
        \ à ces modèles comme par exemple :\n* plafond de versements pour PEA,\n*\
        \ traitement des rachats programmés pour ASSURANCE_UC ...\n\nValeurs possibles\
        \ :\n* ACTIONS\n* ARTICLE_82\n* ARTICLE_83\n* ASSURANCE_EURO\n* ASSURANCE_EURO_CROISSANCE\n\
        * ASSURANCE_GENERATION\n* ASSURANCE_TEMPORAIRE_DECES\n* ASSURANCE_UC\n* ASSURANCE_VIE_ENTIERE\n\
        * AUTRE_AVOIR\n* AUTRE_BIEN_PROF\n* AUTRE_BIEN_USAGE\n* AUTRE_DETTE\n* AUTRE_PLACEMENT\n\
        * BOIS_FORETS\n* BON_CAISSE\n* BON_CAPI_EURO\n* BON_CAPI_EURO_CROISSANCE\n\
        * BON_CAPI_UC\n* BON_ECHEANCE\n* BON_EPARGNE\n* CAPITAL_DIFFERE\n* CARTE_DEBIT_DIFFERE\n\
        * CAT\n* CAV\n* CEL\n* CODEVI\n* COMPTE_ESPECES\n* COMPTE_TITRE\n* CONTRAT_DSK\n\
        * CONTRAT_NSK\n* CONTRAT_RENTE_IMMEDIATE\n* CREDIT\n* CREDIT_CONSO\n* CREDIT_IMMO\n\
        * CREDIT_PROF\n* CSL\n* DETTE_FAM\n* DETTE_FISCALE\n* DISPONIBILITES\n* DROITS_SOCIAUX\n\
        * EI\n* EPARGNE_SALARIALE\n* FCPI\n* FIP\n* FOND_COMMERCE\n* IARD\n* IMMO_LOCATIF\n\
        * IMMO_PROF\n* LDD\n* LEE\n* LEP\n* LETM\n* LIVRET_A\n* LIVRET_A_BLEU\n* LIVRET_BLEU\n\
        * LIVRET_JEUNE\n* LMNP\n* LMP\n* LOCAUX_PROFESSIONNELS\n* MADELIN_EURO\n*\
        \ MADELIN_UC\n* MEUBLES_MEUBLANT\n* MOBILIER\n* MONETAIRE\n* MONUMENT_HISTORIQUE\n\
        * MURS_HOTEL\n* OBJET_ART\n* OBLIGATIONS\n* PART_GF\n* PART_GFA_GFV\n* PART_SEF\n\
        * PEA\n* PEA_PME\n* PEE\n* PEI\n* PEL\n* PEP\n* PEP_ASSVIE_EURO\n* PEP_ASSVIE_UC\n\
        * PERCO\n* PERCOI\n* PERECO_ASSURANTIEL\n* PERECO_COMPTE_TITRES\n* PERIN_ASSURANTIEL\n\
        * PERIN_COMPTE_TITRES\n* PEROB_ASSURANTIEL\n* PEROB_COMPTE_TITRES\n* PERP_EURO\n\
        * PERP_UC\n* PREFON_RETRAITE\n* PREVOYANCE\n* RES_PRINCIPALE\n* RES_SECONDAIRE\n\
        * RETRAITE_COMBATTANT\n* RURAUX_LOUE_LT\n* RURAUX_LOUE_LT_PRO\n* SCI\n* SCPI\n\
        * SICAV_FCP\n* SOFICA\n* STOCK_OPTIONS\n* TERRAIN\n* TERRAIN_AGRICOLE\n* TERRAIN_AGRICOLE_PRO\n\
        * VALMOB"
    PlacementIn:
      type: "object"
      properties:
        statut:
          $ref: "#/components/schemas/TypeStatutPlacement"
        dateOuverture:
          description: "Date d'ouverture du contrat."
          allOf:
          - $ref: "#/components/schemas/TypeDate"
        dateTerme:
          description: "Date de terme du contrat."
          allOf:
          - $ref: "#/components/schemas/TypeDate"
        modeGestionId:
          type: "string"
          description: "Permet de préciser la référence du mode de gestion associé\
            \ à une poche ou à un contrat le cas échéant."
        fraisGestion:
          $ref: "#/components/schemas/TypeFraisGestion"
      description: "Extension `Placement` d'un `Stock`."
    ValeurStockIn:
      required:
      - "montant"
      type: "object"
      properties:
        montant:
          type: "number"
          description: "Valeur estimée du stock (valeur d'un actif ou du capital restant\
            \ dû pour un passif)"
        dateValeur:
          description: "Date à laquelle l'actif/passif a été estimé"
          allOf:
          - $ref: "#/components/schemas/TypeDate"
        devise:
          type: "string"
          description: "Devise dans laquelle est exprimé le montant (si différente\
            \ de celle du stock)"
        vues:
          type: "array"
          description: "Permet de renseigner différentes vues d'un montant selon des\
            \ regroupements définis"
          items:
            $ref: "#/components/schemas/VueType"
      description: "Extension `Valeur` d'un `Stock`."
    TypeLibelle:
      maxLength: 200
      minLength: 1
      type: "string"
      description: "Le libellé de l'entité."
    TypeStatutPlacement:
      type: "string"
      description: "Statut d'un placement / avoir / compte (Actif ou Clos)"
      enum:
      - "ACTIF"
      - "CLOS"
    TypeDetention:
      description: "Détail de la détention par un détenteur."
      allOf:
      - type: "object"
        properties:
          personneId:
            description: "Identification de la personne détentrice."
            allOf:
            - $ref: "#/components/schemas/TypeId"
          proprietaire:
            $ref: "#/components/schemas/TypeProprietaire"
      - $ref: "#/components/schemas/TypeDemembrement"
    TypeProprietaire:
      type: "string"
      description: "Définit le propriétaire du bien détenu :\n\n* COMMUNAUTE : bien\
        \ appartenant à la communauté. Dans ce cas, on est sur un mode de détention\
        \ \"UNIQUE\", sans besoin d'utiliser \"idPersonne\"\n* TITULAIRE : bien propre\
        \ ou en indivision. Il faut alors renseigner idPersonne\n* STE_ACQUETS : bien\
        \ appartenant à la société d'acquêts. Dans ce cas, on est sur un mode de dé\
        tention \"UNIQUE\", sans besoin d'utiliser \"idPersonne\"\n\nDans le cas de\
        \ **l’indivision** en pleine propriété, seule l'indivision entre la personne\
        \ définie comme client et son conjoint / concubin / partenaire peut être dé\
        crite en entrée. Les éventuelles parts d’un bien en indivision détenues par\
        \ une tierce personne ou les enfants ne doivent pas apparaître."
      format: "String"
      enum:
      - "TITULAIRE"
      - "COMMUNAUTE"
      - "STE_ACQUETS"
      - "NON"
    TypeDemembrement:
      type: "object"
      properties:
        pleinePropriete:
          description: "Détail de la détention en pleine propriété (PP)."
          allOf:
          - $ref: "#/components/schemas/TypePourcentDetention"
        nuePropriete:
          $ref: "#/components/schemas/TypeNuePropriete"
        usufruit:
          $ref: "#/components/schemas/TypeUsufruit"
      description: "Structure relative au droits de propriété.\n\nDans le cas du **dé\
        membrement**, le démembrement avec une tierce personne ou avec les enfants\
        \ ne doit pas être décrit en entrée car il n'est pas pris en charge par l'API.\
        \ Il est nécessaire de saisir des biens distincts pour chaque mode de détention\
        \ et uniquement pour la personne définie comme client et son conjoint / concubin\
        \ / partenaire."
    TypePourcentDetention:
      type: "object"
      properties:
        part:
          description: "Part de détention en pleine-propriété."
          allOf:
          - $ref: "#/components/schemas/TypePourcent"
    TypeNuePropriete:
      type: "object"
      properties:
        part:
          description: "Part de détention en nue-propriété."
          allOf:
          - $ref: "#/components/schemas/TypePourcent"
        terme:
          description: "Date terme pour un démembrement temporaire."
          allOf:
          - $ref: "#/components/schemas/TypeDate"
      description: "Détail de la détention en nue-propriété (NP).\n\nDans le cas du\
        \ **démembrement**, le démembrement avec une tierce personne ou avec les enfants\
        \ ne doit pas être décrit en entrée car il n'est pas pris en charge par l'API.\
        \ Il est nécessaire de saisir des biens distincts pour chaque mode de détention\
        \ et uniquement pour la personne définie comme client et son conjoint / concubin\
        \ / partenaire."
    TypeUsufruit:
      type: "object"
      properties:
        part:
          description: "Part de détention en Usufruit (US)."
          allOf:
          - $ref: "#/components/schemas/TypePourcent"
        dateNaissanceUsufruitier:
          description: "Date de naissance de l'usufruitier."
          allOf:
          - $ref: "#/components/schemas/TypeDate"
        terme:
          description: "Date terme pour un démembrement temporaire."
          allOf:
          - $ref: "#/components/schemas/TypeDate"
      description: "Détail de la détention en usufruit (US).\n\nDans le cas du **dé\
        membrement**, le démembrement avec une tierce personne ou avec les enfants\
        \ ne doit pas être décrit en entrée car il n'est pas pris en charge par l'API.\
        \ Il est nécessaire de saisir des biens distincts pour chaque mode de détention\
        \ et uniquement pour la personne définie comme client et son conjoint / concubin\
        \ / partenaire."
    TypeClauseAttributionConjointSurvivant:
      type: "object"
      description: "Part attribuable au conjoint survivant (clause de préciput)"
      allOf:
      - $ref: "#/components/schemas/TypeDemembrement"
    TypeDateHeure:
      type: "string"
      format: "date-time"
    TypeDate:
      type: "string"
      format: "date"
    TypeFraisGestion:
      type: "object"
      properties:
        modeCalcul:
          allOf:
          - $ref: "#/components/schemas/TypeModeCalculTaux"
        taux:
          description: "Taux de frais de gestion (exprimé en pourcentage). Ce taux\
            \ ne devra être renseigné que dans le cas où un barème de variation dans\
            \ le temps n’est pas défini."
          allOf:
          - $ref: "#/components/schemas/TypeTaux"
        baremeTauxId:
          type: "string"
          description: "Barème de frais dans le cadre de frais dégressifs par exemple."
      description: "Frais de gestion applicables."
    VueType:
      type: "object"
      properties:
        type:
          type: "string"
          description: "Permet de renseigner le type de vue."
          enum:
          - "CATEGORIE_FONDS"
          - "DISPONIBILITE"
          - "INDISPONIBILITE"
          - "FISCALITE"
        repartition:
          type: "array"
          description: "Permet de renseigner la répartition du montant selon le type\
            \ de vue (exemple : si on souhaite spécifier la valeur d'un contrat selon\
            \ le type de supports : CATEGORIE_FONDS)."
          items:
            $ref: "#/components/schemas/RepartitionVueType"
      description: "Permet de renseigner la vue d'un montant selon des regroupements\
        \ définis"
    RepartitionVueType:
      type: "object"
      properties:
        groupeId:
          type: "string"
          description: "Permet de renseigner la nature du regroupement associé à cette\
            \ vue."
        montant:
          type: "number"
          description: "Permet de renseigner le montant associé à ce regroupement\
            \ (facultatif)."
        devise:
          type: "string"
          description: "Permet de renseigner la devise dans laquelle est exprimée\
            \ le montant."
        part:
          description: "Permet de renseigner la valeur en pourcentage associée à ce\
            \ regroupement (facultatif)."
          allOf:
          - $ref: "#/components/schemas/TypePourcent"
      description: "Permet de renseigner la répartition du montant selon le type de\
        \ vue"
    TypePourcent:
      maximum: 100
      minimum: -100
      type: "number"
    TypeModeCalculTaux:
      type: "string"
      description: "Il existe deux modes de calcul des frais de gestion qui viennent\
        \ diminuer les taux de revalorisation :\n* **EN_DEDANS** : Taux de rendement\
        \ net = ((1 + Taux de rendement brut) X (1 - Taux frais sur encours)) - 1\n\
        * **EN_DEHORS** : Taux de rendement net = Taux de rendement brut - Taux frais\
        \ sur encours\n"
      enum:
      - "EN_DEDANS"
      - "EN_DEHORS"
    TypeTaux:
      type: "number"
  parameters:
    CompteId:
      name: "compteId"
      in: "path"
      description: "Référence (id) du compte"
      required: true
      style: "simple"
      explode: false
      schema:
        $ref: "#/components/schemas/TypeId"
    RelationId:
      name: "relationId"
      in: "path"
      description: "Référence (id) de la relation"
      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:
    - "ComptesO2S"
