openapi: 3.0.0
paths:
  /oauth/token:
    post:
      description: Émet un token OAuth2 de 3600 secondes pour un client technique
        rattaché à une équipe.
      operationId: createOAuthToken
      parameters: []
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: "#/components/schemas/IntegrationOAuthTokenRequestDto"
      responses:
        "200":
          headers:
            Cache-Control:
              schema:
                type: string
                example: no-store
            Pragma:
              schema:
                type: string
                example: no-cache
          description: ""
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthTokenResponseDto"
        "400":
          description: invalid_request, unsupported_grant_type ou invalid_scope.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
        "401":
          description: "invalid_client : identifiants absents, invalides ou révoqués."
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Basic realm="batis-integration"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
        "429":
          description: "rate_limit_exceeded : trop de demandes de token."
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
      summary: Obtenir un token d'accès
      tags:
        - Authentification
  /operation:
    get:
      description: Retourne les opérations de l'équipe, archivées incluses. Tri
        croissant par updatedAt. updatedSince est inclusif et utilise le maximum
        des dates de modification de l'opération, de son groupe, de l'entité
        légale du groupe et des sources des champs spécifiques configurés. Les
        suppressions ne sont pas exposées.
      operationId: listOperations
      parameters:
        - name: updatedSince
          required: false
          in: query
          description: Retourne uniquement les ressources créées ou modifiées depuis cette
            date.
          schema:
            format: date-time
            pattern: (?:Z|[+-]\d{2}:\d{2})$
            example: 2025-03-20T14:10:00.000Z
            type: string
        - name: offset
          required: false
          in: query
          description: Décalage (0-based).
          schema:
            minimum: 0
            default: 0
            type: integer
        - name: limit
          required: false
          in: query
          description: Taille de page.
          schema:
            minimum: 1
            maximum: 1000
            default: 20
            type: integer
        - name: groupAccountingCode
          required: false
          in: query
          description: Code comptable exact du groupe directement rattaché à l'opération,
            sans inclure ses sous-groupes.
          schema:
            type: string
      responses:
        "200":
          description: Liste paginée d'opérations
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationPaginatedOperationListResponseDto"
        "400":
          description: Requête invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
        "401":
          description: Authentification Bearer invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="invalid_token"
        "403":
          description: Scope insuffisant ou accès refusé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="insufficient_scope", scope="integration:read"
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
      security:
        - OAuth2ClientCredentials:
            - integration:read
      summary: Lister les opérations
      tags:
        - Operations
  /supplier:
    get:
      description: Retourne les fournisseurs de l’équipe, y compris ceux fermés ou
        sans dossier. updatedAt correspond à la fiche fournisseur et avance
        aussi lorsqu’un recalcul global des risques détecte un changement de
        risque. Les mises à jour ciblées de risque et les changements de
        métadonnées URSSAF seuls ne sont pas propagés. Les dates des indicateurs
        et de la conformité ne sont pas agrégées. Tri croissant par updatedAt
        puis id ; updatedSince est inclusif. Les groupes filtrés incluent leurs
        descendants. Les indicateurs enregistrés sont lus sans recalcul.
      operationId: listSuppliers
      parameters:
        - name: updatedSince
          required: false
          in: query
          description: Retourne uniquement les ressources créées ou modifiées depuis cette
            date.
          schema:
            format: date-time
            pattern: (?:Z|[+-]\d{2}:\d{2})$
            example: 2025-03-20T14:10:00.000Z
            type: string
        - name: offset
          required: false
          in: query
          description: Décalage (0-based).
          schema:
            minimum: 0
            default: 0
            type: integer
        - name: limit
          required: false
          in: query
          description: Taille de page.
          schema:
            minimum: 1
            maximum: 1000
            default: 20
            type: integer
        - name: groupAccountingCode
          required: false
          in: query
          description: Filtre les fournisseurs rattachés à un groupe ou périmètre comptable.
          schema:
            type: string
        - name: riskType
          required: false
          in: query
          description: Filtre les fournisseurs présentant un risque Batis donné.
          schema:
            $ref: "#/components/schemas/SupplierRiskType"
        - name: includeAdministrativeDocuments
          required: false
          in: query
          description: Embarque les documents administratifs du fournisseur.
          schema:
            default: false
            type: boolean
      responses:
        "200":
          description: Liste paginée des fournisseurs
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationPaginatedSupplierListResponseDto"
        "400":
          description: Requête invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
        "401":
          description: Authentification Bearer invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="invalid_token"
        "403":
          description: Scope insuffisant ou accès refusé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="insufficient_scope", scope="integration:read"
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
      security:
        - OAuth2ClientCredentials:
            - integration:read
      summary: Lister les fournisseurs
      tags:
        - Suppliers
  /folder:
    get:
      description: Retourne les dossiers, filtrables par opération Chaque dossier
        expose son entreprise, son activité, ses dates d'intervention et ses
        contrôles documentaires enregistrés. Tri croissant par date de
        modification updatedSince est inclusif et utilise les dates du dossier
        et des sources des champs spécifiques configurés. Les suppressions ne
        sont pas exposées.
      operationId: listFolders
      parameters:
        - name: updatedSince
          required: false
          in: query
          description: Retourne uniquement les ressources créées ou modifiées depuis cette
            date.
          schema:
            format: date-time
            pattern: (?:Z|[+-]\d{2}:\d{2})$
            example: 2025-03-20T14:10:00.000Z
            type: string
        - name: offset
          required: false
          in: query
          description: Décalage (0-based).
          schema:
            minimum: 0
            default: 0
            type: integer
        - name: limit
          required: false
          in: query
          description: Taille de page.
          schema:
            minimum: 1
            maximum: 1000
            default: 20
            type: integer
        - name: operationId
          required: false
          in: query
          description: Filtre les dossiers rattachés à une opération via son identifiant
            stable.
          schema:
            type: string
      responses:
        "200":
          description: Liste paginée des dossiers
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationPaginatedFolderResponseDto"
        "400":
          description: Requête invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
        "401":
          description: Authentification Bearer invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="invalid_token"
        "403":
          description: Scope insuffisant ou accès refusé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="insufficient_scope", scope="integration:read"
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
      security:
        - OAuth2ClientCredentials:
            - integration:read
      summary: Lister les dossiers
      tags:
        - Folders
  /document:
    get:
      description: Retourne les documents, hors brouillons et opérations supprimées.
        Les opérations archivées sont incluses. Sans type, les dossiers non
        vides sont filtrés par updatedSince et paginés selon folder.updatedAt.
        tous leurs documents admissibles sont retournés. Avec type, les
        documents sont filtrés et paginés selon leur updatedAt Le updatedAt
        documentaire conserve le même calcul dans les deux modes.
      operationId: listDocuments
      parameters:
        - name: updatedSince
          required: false
          in: query
          description: Filtre inclusif sur folder.updatedAt sans type, sur updatedAt du
            document avec type.
          schema:
            format: date-time
            pattern: (?:Z|[+-]\d{2}:\d{2})$
            example: 2025-03-20T14:10:00.000Z
            type: string
        - name: offset
          required: false
          in: query
          description: Décalage en dossiers sans type, en documents avec type.
          schema:
            minimum: 0
            default: 0
            type: integer
        - name: limit
          required: false
          in: query
          description: Nombre de dossiers sans type, nombre de documents avec type. Tous
            les documents admissibles des dossiers sélectionnés sont retournés.
          schema:
            minimum: 1
            maximum: 1000
            default: 20
            type: integer
        - name: type
          required: false
          in: query
          description: Filtre exact parmi les neuf types spécialisés documentés. Avec
            type, pagination et synchronisation par document. Sans type, toutes
            les familles publiques sont retournées avec une pagination et une
            synchronisation par dossier.
          schema:
            $ref: "#/components/schemas/DocumentFilterType"
        - name: operationId
          required: false
          in: query
          description: Filtre les documents rattachés à une opération via son identifiant
            stable.
          schema:
            type: string
        - name: folderId
          required: false
          in: query
          description: Filtre les documents rattachés à un dossier.
          schema:
            type: string
        - name: supplierRegistrationNumber
          required: false
          in: query
          description: Filtre les documents rattachés à un fournisseur via son numéro
            d'immatriculation.
          schema:
            type: string
        - name: groupAccountingCode
          required: false
          in: query
          description: Code comptable de l’opération.
          schema:
            type: string
      responses:
        "200":
          description: Liste paginée des documents
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationPaginatedDocumentResponseDto"
        "400":
          description: Requête invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
        "401":
          description: Authentification Bearer invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="invalid_token"
        "403":
          description: Scope insuffisant ou accès refusé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="insufficient_scope", scope="integration:read"
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
      security:
        - OAuth2ClientCredentials:
            - integration:read
      summary: Lister les documents
      tags:
        - Documents
  /document-file/{fileKey}/download:
    get:
      description: Télécharge en flux le fichier référencé par mainDocument.key,
        annexes[].key ou administrativeDocuments[].file.key. Transmettre la clé
        opaque encodée dans l’URL. Les règles de visibilité des listes sont
        appliquées, y compris pour les annexes privées. Seule la pièce
        administrative courante est accessible. Une clé invalide ou inaccessible
        retourne 404. Une absence explicitement signalée par le stockage
        retourne 404 ; les autres erreurs de stockage retournent 503, y compris
        une absence dont la cause est masquée. Le fichier complet est retourné,
        sans prise en charge de Range.
      operationId: downloadDocumentFile
      parameters:
        - name: fileKey
          required: true
          in: path
          description: Clé opaque du fichier, encodée comme un segment d’URL.
          schema:
            type: string
      responses:
        "200":
          description: Contenu binaire du fichier ; Content-Type correspond au type MIME
            enregistré, sinon application/octet-stream.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
          headers:
            Content-Disposition:
              schema:
                type: string
              description: attachment avec filename et filename* encodé en UTF-8.
            Content-Length:
              schema:
                type: integer
              description: Taille en octets, uniquement si confirmée par le stockage.
            Cache-Control:
              schema:
                type: string
                example: no-store
        "401":
          description: Authentification Bearer invalide
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="invalid_token"
        "403":
          description: Scope insuffisant ou accès refusé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            WWW-Authenticate:
              schema:
                type: string
                example: Bearer error="insufficient_scope", scope="integration:read"
        "404":
          description: Fichier introuvable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationOAuthErrorResponseDto"
          headers:
            Retry-After:
              schema:
                type: integer
                example: 60
        "503":
          description: Fichier indisponible ou erreur de stockage non qualifiée.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IntegrationErrorResponseDto"
      security:
        - OAuth2ClientCredentials:
            - integration:read
      summary: Télécharger un fichier documentaire
      tags:
        - Documents
info:
  title: BATIS Integration API
  description: >-
    API pour accéder aux ressources BATIS.


    ## Pagination


    Pour la pagination, nous envoyons un `offset` (par défaut à 0) et `limit`
    (par défaut à 20) et recevons des listes paginées.


    ## Synchronisation incrémentale


    Les endpoints de liste exposent un filtre `updatedSince` lorsqu'ils peuvent
    être utilisés pour synchroniser les données.

    Ce filtre retourne les ressources dont la date de synchronisation est
    supérieure ou égale à la date fournie.


    Les ressources synchronisables exposent un champ `updatedAt` afin de
    permettre à l'intégrateur de conserver la dernière date de synchronisation
    réussie.

    Pour `GET /document` sans filtre `type`, la pagination compte les dossiers
    non vides et la date de synchronisation est `folder.updatedAt`.

    Tous leurs documents admissibles sont retournés. Avec `type`, la pagination
    compte les documents et utilise leur `updatedAt`.

    Conserver le même `updatedSince` pendant le parcours, avancer `offset` de
    `limit`, puis enregistrer la plus grande date pertinente après réussite de
    toutes les pages.

    Les reprises sont inclusives ; dédupliquer les documents par `(type, id)`.

    Les suppressions, détachements et changements sans évolution d'un horodatage
    pris en compte nécessitent une réconciliation par lecture complète.



    ## Authentification


    L'API utilise OAuth2 avec le flow `client_credentials`.

    Obtenez un token avec `POST /oauth/token`, des identifiants HTTP Basic et un
    corps `application/x-www-form-urlencoded`.

    Le token expire après 3600 secondes et doit être transmis dans
    `Authorization: Bearer ACCESS_TOKEN`.

    Les ressources nécessitent le scope `integration:read`. Si le scope est omis
    lors de la demande, les scopes autorisés du client sont utilisés.


    ## Limites de débit


    Pour dimensionner votre intégration, prévoyez au plus 30 demandes de token
    par minute et par IP, et 600 appels aux ressources par minute et par client.

    Un dépassement retourne HTTP 429 avec `Retry-After` (secondes).
  version: "1.0"
  contact: {}
tags:
  - name: Authentification
    description: Émission des tokens OAuth2
  - name: Operations
    description: Operations endpoints
  - name: Suppliers
    description: Fournisseurs suivis dans Batis
  - name: Folders
    description: Dossiers exposés à l’intégration
  - name: Documents
    description: Documents endpoints (exports / listes)
servers:
  - url: https://integration.batis.io/api/v1
components:
  securitySchemes:
    OAuth2ClientCredentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://integration.batis.io/api/v1/oauth/token
          scopes:
            integration:read: Lecture des ressources d’intégration de l’équipe autorisée.
  schemas:
    IntegrationOAuthTokenRequestDto:
      type: object
      properties:
        grant_type:
          type: string
          enum:
            - client_credentials
          example: client_credentials
        scope:
          type: string
          description: "Scopes séparés par des espaces. Par défaut : scopes autorisés du
            client."
          example: integration:read
      required:
        - grant_type
    IntegrationOAuthTokenResponseDto:
      type: object
      properties:
        access_token:
          type: string
          description: "Token à transmettre dans Authorization: Bearer."
          example: eyJhbGciOi...
        token_type:
          type: string
          enum:
            - Bearer
          example: Bearer
        expires_in:
          type: integer
          example: 3600
        scope:
          type: string
          example: integration:read
      required:
        - access_token
        - token_type
        - expires_in
        - scope
    IntegrationOAuthErrorResponseDto:
      type: object
      properties:
        error:
          enum:
            - invalid_request
            - invalid_client
            - unsupported_grant_type
            - invalid_scope
            - invalid_token
            - insufficient_scope
            - rate_limit_exceeded
          type: string
          example: invalid_client
        error_description:
          type: string
          example: Client credentials are invalid.
      required:
        - error
        - error_description
    IntegrationErrorResponseDto:
      type: object
      properties:
        statusCode:
          type: number
        error:
          type: string
          nullable: true
        message:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
      required:
        - statusCode
        - message
    IntegrationPaginationMetadataDto:
      type: object
      properties:
        total:
          type: integer
          description: Nombre total d’éléments correspondant à la requête.
          example: 143
        limit:
          type: integer
          description: Nombre d’éléments retournés par page.
          example: 20
        offset:
          type: integer
          description: Décalage utilisé pour la requête.
          example: 0
      required:
        - total
        - limit
        - offset
    IntegrationAddressDto:
      type: object
      properties:
        street:
          type: string
          example: 10 rue de Paris
        zipcode:
          type: string
          example: "75010"
        city:
          type: string
          example: Paris
      required:
        - street
        - zipcode
        - city
    IntegrationOperationListItemDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant dans Batis.
          example: operation_123
        code:
          type: string
          description: Code opération
          example: BB01019796
        title:
          type: string
          description: Titre de l'opération.
          example: Rénovation - Bâtiment A
        status:
          enum:
            - notified
            - in-progress
            - received
            - archived
          type: string
          description: Statut métier de l'opération.
        createdAt:
          type: string
          description: Date de création de l'opération.
          format: date-time
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          description: Maximum des dates de modification de l'opération, de son groupe, de
            l'entité légale et des sources des champs spécifiques configurés, à
            la milliseconde.
          format: date-time
          example: 2025-03-20T14:10:00.000Z
        groupAccountingCode:
          type: string
          nullable: true
          description: Code comptable du groupe.
          example: GRP-001
        legalEntityRegistrationNumber:
          type: string
          nullable: true
          description: Siret de l'entité légale rattachée au groupe de l'opération.
          example: "12345678900012"
        address:
          $ref: "#/components/schemas/IntegrationAddressDto"
        customFields:
          type: object
          additionalProperties:
            oneOf:
              - type: string
                nullable: true
              - type: number
              - type: boolean
          description: Champs configurés pour le client OAuth. Une donnée absente vaut
            null. Les dates sont des chaînes ISO 8601.
      required:
        - id
        - code
        - title
        - status
        - createdAt
        - updatedAt
        - groupAccountingCode
        - legalEntityRegistrationNumber
        - address
    IntegrationPaginatedOperationListResponseDto:
      type: object
      properties:
        metadata:
          $ref: "#/components/schemas/IntegrationPaginationMetadataDto"
        data:
          type: array
          items:
            $ref: "#/components/schemas/IntegrationOperationListItemDto"
      required:
        - metadata
        - data
    SupplierRiskType:
      type: string
      enum:
        - SCORING-ADMINISTRATIVE
        - URSSAF-RATIO
        - FINANCIAL-SCORE
        - PQQ
        - EVALUATION
        - ECONOMICAL-DEPENDENCY
    IntegrationSupplierContactDto:
      type: object
      properties:
        firstname:
          type: string
          nullable: true
          example: Jean
        lastname:
          type: string
          nullable: true
          example: Martin
        email:
          type: string
          nullable: true
          format: email
          example: contact@exemplo.fr
        phone:
          type: string
          nullable: true
          example: "+33102030405"
    IntegrationSupplierGroupDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du groupe ou périmètre comptable.
          example: Groupe Sogetrel
        accountingCode:
          type: string
          nullable: true
          description: Code comptable du groupe.
          example: GRP-001
        legalEntityRegistrationNumber:
          type: string
          nullable: true
          description: Numéro d'immatriculation de l'entité légale rattachée au groupe.
          example: "12345678900012"
      required:
        - name
        - accountingCode
        - legalEntityRegistrationNumber
    IntegrationSupplierRiskUrssafMetadataDto:
      type: object
      properties:
        payroll:
          type: number
          nullable: true
          description: Masse salariale déclarée utilisée par le calcul du risque URSSAF.
          example: 615000
        staff:
          type: number
          nullable: true
          description: Effectif déclaré utilisé par le calcul du risque URSSAF.
          example: 18
    IntegrationSupplierRiskMetadataDto:
      type: object
      properties:
        urssaf:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierRiskUrssafMetadataDto"
    IntegrationSupplierRiskDto:
      type: object
      properties:
        isScoringAdministrativeAtRisk:
          type: boolean
          description: Risque lié au scoring administratif documentaire.
          example: true
        isUrssafRatioAtRisk:
          type: boolean
          description: Risque lié au ratio URSSAF.
          example: false
        isFinancialScoreAtRisk:
          type: boolean
          description: Risque lié au score financier.
          example: true
        isEvaluationAtRisk:
          type: boolean
          description: Risque lié aux évaluations de l'entreprise.
          example: false
        isEconomicalDependencyAtRisk:
          type: boolean
          description: Risque lié à la dépendance économique.
          example: false
        isPqqAtRisk:
          type: boolean
          description: Risque lié à la préqualification (PQQ).
          example: false
        metadata:
          nullable: true
          description: Métadonnées disponibles pour documenter certains calculs de risque.
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierRiskMetadataDto"
      required:
        - isScoringAdministrativeAtRisk
        - isUrssafRatioAtRisk
        - isFinancialScoreAtRisk
        - isEvaluationAtRisk
        - isEconomicalDependencyAtRisk
        - isPqqAtRisk
    IntegrationSupplierFinancialSituationDto:
      type: object
      properties:
        score:
          type: number
          nullable: true
          description: Score de situation financière, disponible lorsque le fournisseur
            d'information financière est configuré.
          example: 7.2
    PreQualificationStatus:
      type: string
      enum:
        - NOT_INVITED
        - INVITED_PENDING
        - COMPLETED
        - EXPIRED
        - ALERT
        - UNKNOWN
    IntegrationSupplierPrequalificationDto:
      type: object
      properties:
        status:
          description: Statut de préqualification.
          allOf:
            - $ref: "#/components/schemas/PreQualificationStatus"
        hasRisk:
          type: boolean
          description: Indique si la préqualification est en risque.
          example: false
        updatedAt:
          type: string
          nullable: true
          format: date-time
          description: Date de dernière mise à jour du statut de préqualification.
    IntegrationSupplierEvaluationDto:
      type: object
      properties:
        score:
          type: number
          nullable: true
          description: Score moyen d'évaluation du fournisseur.
          example: 4.2
    SupplierAdministrativeDocumentType:
      type: string
      enum:
        - kbis
        - urssaf
        - foreign-staff-list
        - tax-certificate
        - no-collective-procedure
        - business-capacity
        - civil-liability-insurance
        - decennial-liability-insurance
        - paid-vacation-certificate
        - retirement
        - rib
        - honnour-statment
        - transport-insurance
        - transport-license
        - practice-authorization
        - financial-guarantee
        - power-delegation
        - qualibat
        - qualibat-rge
        - qualifelec
        - qualigaz
        - mase
        - tp
        - charte
        - rse
        - no-subcontractor-certificate
    SupplierAdministrativeDocumentState:
      type: string
      enum:
        - valid
        - deprecated-soon
        - deprecated
        - missing
        - not-valid
    AdministrativeFileDepositSource:
      type: string
      enum:
        - manual
        - alg
        - actradis
        - aprovall
    IntegrationDocumentFileDto:
      type: object
      properties:
        key:
          type: string
          description: Clé opaque à transmettre à l'endpoint de téléchargement.
          example: main:asset_001
        name:
          type: string
          description: Nom du fichier.
          example: Contrat n°855-051-040.pdf
      required:
        - key
        - name
    IntegrationAdministrativeFileDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant stable et opaque du couple fournisseur/type de pièce.
          example: supplier_001:urssaf
        documentId:
          type: string
          nullable: true
          description: Identifiant du dépôt courant, absent si la pièce est manquante.
        createdAt:
          type: string
          nullable: true
          format: date-time
          example: 2025-03-18T09:20:00.000Z
        updatedAt:
          type: string
          format: date-time
          example: 2025-03-20T14:10:00.000Z
        supplierRegistrationNumber:
          type: string
          description: Numéro d'immatriculation du fournisseur associé.
          example: "12345678900012"
        documentType:
          description: Typologie de document administratif Batis.
          example: urssaf
          allOf:
            - $ref: "#/components/schemas/SupplierAdministrativeDocumentType"
        name:
          type: string
          example: Attestation assurance RC
        state:
          nullable: true
          description: État du scoring enregistré pour le dépôt courant, ou null sans
            scoring applicable. Aucun recalcul à la lecture.
          allOf:
            - $ref: "#/components/schemas/SupplierAdministrativeDocumentState"
        startAt:
          type: string
          nullable: true
          format: date-time
          description: Date de début de validité du document.
          example: 2025-03-01T00:00:00.000Z
        endAt:
          type: string
          nullable: true
          format: date-time
          description: Date de fin de validité du document.
          example: 2025-04-03T00:00:00.000Z
        depositDate:
          type: string
          nullable: true
          format: date-time
          description: Date de dépôt du document.
          example: 2025-03-18T09:20:00.000Z
        depositSource:
          nullable: true
          description: Source de dépôt du document administratif.
          example: manual
          allOf:
            - $ref: "#/components/schemas/AdministrativeFileDepositSource"
        depositUsername:
          type: string
          nullable: true
          description: Utilisateur ou source déclarée lors du dépôt.
          example: Jean Martin
        file:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
      required:
        - id
        - documentId
        - createdAt
        - updatedAt
        - supplierRegistrationNumber
        - documentType
        - name
        - state
        - depositDate
        - depositSource
    IntegrationSupplierListItemDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant Batis stable du fournisseur.
          example: supplier_001
        createdAt:
          type: string
          format: date-time
          description: Date de création du fournisseur dans Batis.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Date de modification de la fiche fournisseur, également actualisée
            lorsqu’un recalcul global des risques détecte un changement de
            risque. Les mises à jour ciblées de risque et les changements de
            métadonnées URSSAF seuls ne sont pas propagés. Les dates des
            indicateurs et de la conformité administrative ne sont pas agrégées.
          example: 2025-03-20T14:10:00.000Z
        name:
          type: string
          description: Nom du fournisseur.
          example: EXEMPLO
        accountingCode:
          type: string
          nullable: true
          description: Code MDM utilisé lors d'intégrations avec le SI.
          example: null
        country:
          type: string
          description: Code pays ISO 3166-1 alpha-2 du fournisseur.
          example: FR
        registrationNumber:
          type: string
          description: Numéro d’immatriculation unique du fournisseur. En France,
            correspond au SIRET.
          example: "12345678900012"
        vatNumber:
          type: string
          nullable: true
          description: Numéro de TVA intracommunautaire.
          example: FR00123456789
        address:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationAddressDto"
        contact:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierContactDto"
        iban:
          type: string
          nullable: true
          description: IBAN connu dans Batis lorsque l'accès est autorisé.
          example: FR7612345987650123456789014
        isClosed:
          type: boolean
          description: Indique si l'entreprise est fermée.
          example: false
        activityList:
          description: Activités du fournisseur.
          example:
            - Gros oeuvre
            - Electricité
          type: array
          items:
            type: string
        areaList:
          description: Périmètres d'intervention du fournisseur.
          example:
            - Ile-de-France
            - Normandie
          type: array
          items:
            type: string
        groupList:
          description: Groupes ou périmètres comptables auxquels le fournisseur est
            rattaché.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationSupplierGroupDto"
        risk:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierRiskDto"
        financialSituation:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierFinancialSituationDto"
        prequalification:
          nullable: true
          description: Informations de préqualification lorsque le module est configuré.
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierPrequalificationDto"
        evaluation:
          nullable: true
          allOf:
            - $ref: "#/components/schemas/IntegrationSupplierEvaluationDto"
        administrativeDocuments:
          nullable: true
          description: Documents administratifs embarqués lorsque
            `includeAdministrativeDocuments=true` est demandé.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationAdministrativeFileDto"
      required:
        - id
        - createdAt
        - updatedAt
        - name
        - country
        - registrationNumber
        - groupList
        - risk
    IntegrationPaginatedSupplierListResponseDto:
      type: object
      properties:
        metadata:
          $ref: "#/components/schemas/IntegrationPaginationMetadataDto"
        data:
          type: array
          items:
            $ref: "#/components/schemas/IntegrationSupplierListItemDto"
      required:
        - metadata
        - data
    IntegrationEvaluationDetailsDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant interne de l'évaluation.
          example: eval_99
        note:
          type: number
          description: Note sur l'échelle définie avec le maître d'ouvrage.
          example: 4.2
        comment:
          type: string
          nullable: true
          description: Commentaire libre associé à l'évaluation.
          example: Très bonne qualité d'exécution et respect des délais.
      required:
        - id
        - note
    EnterpriseDocumentState:
      type: string
      enum:
        - missing
        - not-requested
        - draft
        - under-budget
        - deprecated-soon
        - deprecated
        - not-sps-signed
        - validation-not-started
        - validation-in-progress
        - validation-accepted
        - validation-rejected
        - signature-not-started
        - not-moe-signed
        - not-moa-signed
        - not-mandator-signed
        - not-eg-signed
        - not-st-signed
        - not-st2-signed
        - signature-accepted
        - signature-rejected
        - not-requested-since-eg-payment
        - not-requested-since-moa-payment
        - ready
    IntegrationDocumentInfoDto:
      type: object
      properties:
        state:
          description: >-
            État du contrôle ou du document.


            États génériques :

            - missing : document manquant

            - not-requested : document non demandé

            - draft : brouillon

            - ready : document valide / conforme


            États liés à la validation :

            - validation-not-started : à envoyer en validation

            - validation-in-progress : validation en cours

            - validation-accepted : validé

            - validation-rejected : validation refusée


            États liés à la signature :

            - signature-not-started : à envoyer en signature

            - not-moe-signed : en attente de signature MOE

            - not-moa-signed : en attente de signature MOA

            - not-mandator-signed : en attente de signature du mandataire

            - not-eg-signed : en attente de signature de l'entreprise générale
            (EG)

            - not-st-signed : en attente de signature du sous-traitant (ST)

            - not-st2-signed : en attente de signature du sous-traitant de rang
            2 (ST2)

            - signature-accepted : document signé

            - signature-rejected : signature refusée

            - not-sps-signed : en attente de signature SPS


            États économiques ou spécifiques :

            - under-budget : montant insuffisant

            - deprecated-soon : document bientôt expiré

            - deprecated : document expiré

            - not-requested-since-eg-payment : délégation de paiement non
            demandée (paiement entreprise)

            - not-requested-since-moa-payment : caution non demandée (paiement
            MOA)
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        details:
          nullable: true
          oneOf:
            - $ref: "#/components/schemas/IntegrationEvaluationDetailsDto"
            - type: object
              additionalProperties: true
          description: "Présent uniquement pour les contrôles exposant des détails publics
            structurés : id, note et comment pour les évaluations ; id du
            document administratif pour l'assurance décennale."
      required:
        - state
        - name
    IntegrationDocumentaryControlDto:
      type: object
      properties:
        state:
          description: >-
            État du contrôle ou du document.


            États génériques :

            - missing : document manquant

            - not-requested : document non demandé

            - draft : brouillon

            - ready : document valide / conforme


            États liés à la validation :

            - validation-not-started : à envoyer en validation

            - validation-in-progress : validation en cours

            - validation-accepted : validé

            - validation-rejected : validation refusée


            États liés à la signature :

            - signature-not-started : à envoyer en signature

            - not-moe-signed : en attente de signature MOE

            - not-moa-signed : en attente de signature MOA

            - not-mandator-signed : en attente de signature du mandataire

            - not-eg-signed : en attente de signature de l'entreprise générale
            (EG)

            - not-st-signed : en attente de signature du sous-traitant (ST)

            - not-st2-signed : en attente de signature du sous-traitant de rang
            2 (ST2)

            - signature-accepted : document signé

            - signature-rejected : signature refusée

            - not-sps-signed : en attente de signature SPS


            États économiques ou spécifiques :

            - under-budget : montant insuffisant

            - deprecated-soon : document bientôt expiré

            - deprecated : document expiré

            - not-requested-since-eg-payment : délégation de paiement non
            demandée (paiement entreprise)

            - not-requested-since-moa-payment : caution non demandée (paiement
            MOA)
          example: ready
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        documentInfoList:
          nullable: true
          description: Documents rattachés à ce contrôle. La liste peut être absente si
            aucun document n'est attendu, ou vide si le contrôle existe sans
            document disponible.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentInfoDto"
      required:
        - state
    IntegrationFolderOperationSummaryDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant stable de l'opération dans Batis.
          example: operation_123
      required:
        - id
    IntegrationEnterpriseDto:
      type: object
      properties:
        name:
          type: string
          description: Nom de l'entreprise.
          example: EXEMPLO
        accountingCode:
          type: string
          nullable: true
          description: Code MDM utilisé lors d'intégrations avec le SI.
          example: null
        country:
          type: string
          description: Code pays ISO 3166-1 alpha-2 de l'entreprise.
          example: FR
        registrationNumber:
          type: string
          description: Numéro d'immatriculation de l'entreprise dans son pays. En France,
            correspond au SIRET.
          example: "12345678900012"
      required:
        - name
        - country
        - registrationNumber
    ContractorType:
      type: string
      enum:
        - st
        - st2
        - be
        - supplier
        - provider
        - eg
    IntegrationFolderDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant interne du dossier.
          example: folder_123
        operation:
          description: Référence stable de l'opération rattachée au dossier.
          allOf:
            - $ref: "#/components/schemas/IntegrationFolderOperationSummaryDto"
        enterprise:
          description: Entreprise rattachée au dossier. Le pays provient de son adresse,
            avec FR par défaut s'il est absent. L'immatriculation est le SIRET
            lorsqu'il est disponible, sinon l'identifiant stocké dans siren.
          allOf:
            - $ref: "#/components/schemas/IntegrationEnterpriseDto"
        contractorType:
          description: "Rôle de l'entreprise dans le dossier : st (sous-traitant), st2
            (sous-traitant de 2nd rang), be (bureau d'étude), supplier
            (fournisseur), provider (prestataire), eg (entreprise générale). Les
            rôles moa et moe ne sont pas exposés dans ce sous-ensemble."
          example: st
          allOf:
            - $ref: "#/components/schemas/ContractorType"
        parentFolderId:
          type: string
          nullable: true
          description: Identifiant du dossier parent d'un ST2. Null pour les autres types
            ou en l'absence de parent.
          example: folder_parent_123
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du dossier et des sources des
            champs spécifiques configurés, à la milliseconde.
          example: 2025-03-20T14:10:00.000Z
        activity:
          type: string
          nullable: true
          description: Activité de l'entreprise sur l'opération.
          example: Plomberie sanitaire
        stateCorps:
          type: string
          nullable: true
          description: Libellé du corps d'état.
          example: CVC / Plomberie
        interventionStartDate:
          type: string
          nullable: true
          format: date-time
          description: Date de début d'intervention.
          example: 2025-03-10T00:00:00.000Z
        interventionEndDate:
          type: string
          nullable: true
          format: date-time
          description: Date de fin d'intervention.
          example: 2026-02-20T00:00:00.000Z
        controlStateList:
          type: object
          description: Liste de l'ensemble des contrôles documentaires pour ce dossier.
            Chaque clé correspond à un type de contrôle (agreementControl,
            contractControl, ppspsControl, vicControl, cautionControl,
            evaluationControl, etc.).
          additionalProperties:
            $ref: "#/components/schemas/IntegrationDocumentaryControlDto"
          example:
            agreementControl:
              state: signature-accepted
              documentInfoList:
                - state: signature-accepted
                  name: Agrément n°4
            contractControl:
              state: signature-accepted
              documentInfoList:
                - state: signature-accepted
                  name: Contrat n°855-051-040
            ppspsControl:
              state: ready
              documentInfoList:
                - state: ready
                  name: PPSPS
            cautionControl:
              state: ready
              documentInfoList:
                - state: ready
                  name: Caution n°24
            evaluationControl:
              state: ready
              documentInfoList:
                - state: ready
                  name: Évaluation entreprise
                  details:
                    id: eval_99
                    note: 4.2
                    comment: Très bonne qualité d'exécution et respect des délais.
        customFields:
          type: object
          additionalProperties:
            oneOf:
              - type: string
                nullable: true
              - type: number
              - type: boolean
          description: Champs spécifiques configurés pour le client OAuth. Valeurs
            scalaires ou null ; dates au format ISO 8601 UTC.
      required:
        - id
        - operation
        - enterprise
        - contractorType
        - updatedAt
        - controlStateList
    IntegrationPaginatedFolderResponseDto:
      type: object
      properties:
        metadata:
          $ref: "#/components/schemas/IntegrationPaginationMetadataDto"
        data:
          type: array
          items:
            $ref: "#/components/schemas/IntegrationFolderDto"
      required:
        - metadata
        - data
    SignatoryIdentityType:
      type: string
      enum:
        - moa
        - moe
        - mandator
        - eg
        - st
        - st2
        - sps
        - validator
    SignatureType:
      type: string
      enum:
        - manual
        - electronic
        - disabled
    IntegrationDocumentSignatoryDto:
      type: object
      properties:
        firstname:
          type: string
          description: Prénom enregistré dans le circuit du document.
          example: Jean
        lastname:
          type: string
          description: Nom enregistré dans le circuit du document.
          example: Martin
        email:
          type: string
          nullable: true
          format: email
          example: jean.martin@example.com
        identityType:
          description: Rôle du signataire dans le document.
          allOf:
            - $ref: "#/components/schemas/SignatoryIdentityType"
        position:
          type: number
          description: Position dans le circuit de signature.
          example: 1
        signatureType:
          allOf:
            - $ref: "#/components/schemas/SignatureType"
        signedAt:
          type: string
          nullable: true
          format: date-time
          description: Date de signature enregistrée, ou null si absente.
      required:
        - firstname
        - lastname
        - email
        - identityType
        - position
        - signatureType
        - signedAt
    IntegrationDocumentOperationSummaryDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant stable de l'opération dans Batis.
          example: operation_123
      required:
        - id
    IntegrationDocumentFolderSummaryDto:
      type: object
      properties:
        id:
          type: string
          description: Identifiant interne du dossier.
          example: folder_123
        updatedAt:
          type: string
          format: date-time
          description: Date de modification du dossier. Date de synchronisation de la
            liste des documents sans filtre type.
        interventionStartDate:
          type: string
          nullable: true
          format: date-time
          description: Date de début d'intervention du dossier.
        interventionEndDate:
          type: string
          nullable: true
          format: date-time
          description: Date de fin d'intervention du dossier.
        activity:
          type: string
          nullable: true
          description: Activité déclarée sur le dossier.
          example: Gros oeuvre
        manager:
          type: string
          nullable: true
          description: Responsable du dossier, formaté pour affichage.
          example: Jean Martin
      required:
        - id
        - updatedAt
    IntegrationDocumentSupplierSummaryDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du fournisseur concerné par le document.
          example: EXEMPLO
        registrationNumber:
          type: string
          nullable: true
          description: Numéro d'immatriculation du fournisseur. En France, correspond au
            SIRET.
          example: "12345678900012"
      required:
        - name
    StandardDocumentType:
      type: string
      enum:
        - ftm
        - client-amendment
        - client-estimate
        - cr
        - market-piece
        - client-caution
        - planning
        - pv
        - ppsps
        - correspondence
        - quitus
        - invoice
        - dgd
        - st-estimate
        - vic
        - situation
        - caution-request
        - payment-delegation
        - nominative-insurance
        - consultation-result
    IntegrationStandardDocumentDto:
      type: object
      properties:
        type:
          description: Document standard exposé sans champs métier additionnels.
          example: ftm
          allOf:
            - $ref: "#/components/schemas/StandardDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: &a1
            type: array
            items:
              $ref: "#/components/schemas/IntegrationDocumentSignatoryDto"
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    LeadingContractDocumentType:
      type: string
      enum:
        - leading-contract
    IntegrationLeadingContractDocumentDto:
      type: object
      properties:
        type:
          description: Contrat cadre.
          example: leading-contract
          allOf:
            - $ref: "#/components/schemas/LeadingContractDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        startAt:
          type: string
          nullable: true
          format: date-time
          description: Date de début du contrat cadre.
        endAt:
          type: string
          nullable: true
          format: date-time
          description: Date de fin du contrat cadre.
        status:
          type: string
          nullable: true
          description: Libellé en français de l’état propre du contrat cadre.
        detail:
          type: string
          nullable: true
          description: Information d’attente, de refus ou date ISO d’acceptation ou
            d’expiration ; null en son absence.
        template:
          type: string
          nullable: true
          description: Nom du modèle documentaire utilisé, ou null pour un document sans
            modèle.
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    OsDocumentType:
      type: string
      enum:
        - os
    IntegrationOsDocumentDto:
      type: object
      properties:
        type:
          description: Ordre de service.
          example: os
          allOf:
            - $ref: "#/components/schemas/OsDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        amount:
          type: number
          nullable: true
          description: Montant HT de l’ordre de service en euros.
        insertionHours:
          type: number
          nullable: true
          description: Réservé ; null car les OS ne disposent pas de source métier pour
            les heures d’insertion.
        signatureType:
          nullable: true
          description: Mode de signature du document.
          allOf:
            - $ref: "#/components/schemas/SignatureType"
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    ContractDocumentType:
      type: string
      enum:
        - st-contract
        - st-amendment
        - command-leading-contract
        - command-with-no-contract
    StContractType:
      type: string
      enum:
        - initial
        - amendment
        - command-leading-contract
        - command-with-no-contract
    PaymentType:
      type: string
      enum:
        - eg
        - moa
    PriceVariationType:
      type: string
      enum:
        - firm
        - actualisable
        - revisable
    VatType:
      type: string
      enum:
        - auto
        - regular
    IntegrationContractDocumentDto:
      type: object
      properties:
        type:
          description: Contrat, avenant ou commande sous-traitant.
          example: st-contract
          allOf:
            - $ref: "#/components/schemas/ContractDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        contractType:
          nullable: true
          description: Sous-type interne du contrat Batis.
          example: initial
          allOf:
            - $ref: "#/components/schemas/StContractType"
        leadingContractNum:
          type: string
          nullable: true
          description: Numéro du contrat cadre rattaché, lorsque le contrat dépend d’un
            marché.
        startAt:
          type: string
          nullable: true
          format: date-time
          description: Date de début du contrat.
        duration:
          type: number
          nullable: true
          description: Durée du contrat, en mois lorsque l’information est disponible.
        amount:
          type: number
          nullable: true
          description: Montant HT du contrat en euros (conversion depuis les centimes
            stockés dans Batis).
        advance:
          type: number
          nullable: true
          description: Montant HT de l’avance en euros.
        paymentType:
          nullable: true
          description: Payeur des situations liées au contrat.
          allOf:
            - $ref: "#/components/schemas/PaymentType"
        priceVariationType:
          nullable: true
          description: Mode de variation de prix du contrat.
          allOf:
            - $ref: "#/components/schemas/PriceVariationType"
        vatType:
          nullable: true
          description: Mode de TVA du contrat.
          allOf:
            - $ref: "#/components/schemas/VatType"
        status:
          type: string
          nullable: true
          description: Libellé en français de l’état propre du document.
        detail:
          type: string
          nullable: true
          description: Information d’attente, de refus ou date ISO d’acceptation, selon
            l’état documentaire ; null en son absence.
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    CautionDocumentType:
      type: string
      enum:
        - caution
    StCautionType:
      type: string
      enum:
        - st
        - retenue
        - bonne-fin
        - parfait-achevement
        - restitution
        - other
    IntegrationCautionDocumentDto:
      type: object
      properties:
        type:
          description: Caution sous-traitant.
          example: caution
          allOf:
            - $ref: "#/components/schemas/CautionDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        cautionType:
          nullable: true
          description: Type de caution.
          example: st
          allOf:
            - $ref: "#/components/schemas/StCautionType"
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    AgreementDocumentType:
      type: string
      enum:
        - agreement
    IntegrationAgreementDocumentDto:
      type: object
      properties:
        type:
          description: Agrément sous-traitant.
          example: agreement
          allOf:
            - $ref: "#/components/schemas/AgreementDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        amount:
          type: number
          nullable: true
          description: Montant HT de l’agrément en euros.
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    EvaluationDocumentType:
      type: string
      enum:
        - evaluation
    IntegrationEvaluationNoteDetailDto:
      type: object
      properties:
        note:
          type: number
          nullable: true
          description: Note du critère.
        label:
          type: string
          description: Libellé du critère.
          example: Qualité
        subtitle:
          type: string
          nullable: true
          description: Sous-libellé ou aide à la lecture du critère.
        category:
          type: string
          nullable: true
          description: Catégorie du critère.
        key:
          type: string
          description: Clé technique du critère.
          example: quality
        type:
          type: string
          description: Type de critère.
          example: rating
      required:
        - label
        - key
        - type
    IntegrationEvaluationDocumentDto:
      type: object
      properties:
        type:
          description: Évaluation fournisseur.
          example: evaluation
          allOf:
            - $ref: "#/components/schemas/EvaluationDocumentType"
        id:
          type: string
          description: Identifiant interne du document.
          example: doc_001
        name:
          type: string
          description: Nom du document.
          example: Contrat n°855-051-040
        createdAt:
          type: string
          format: date-time
          description: Date de création du document.
          example: 2025-01-15T09:30:00.000Z
        updatedAt:
          type: string
          format: date-time
          description: Maximum des dates de modification du document, de son état, de son
            fichier principal et du circuit de signature si les signataires sont
            configurés, à la milliseconde. Les dates des annexes sont ignorées.
          example: 2025-03-20T14:10:00.000Z
        customFields:
          type: object
          additionalProperties: *a1
          description: Données additionnelles configurées pour le client OAuth. La liste
            des signataires est disponible sur demande, sous la clé configurée
            (par exemple signatoryList). Liste vide sans circuit ou signataire
            enregistré ; customFields est absent sans champ documentaire
            configuré.
        date:
          type: string
          nullable: true
          format: date-time
          description: Date métier portée par le document Batis lorsque le type en définit
            une.
          example: 2025-03-20T00:00:00.000Z
        num:
          type: string
          nullable: true
          description: Numéro métier du document, lorsqu’il existe.
          example: 855-051-040
        operation:
          description: Référence stable de l'opération associée au document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentOperationSummaryDto"
        folder:
          nullable: true
          description: Résumé du dossier rattaché au document, notamment activité et dates
            d’intervention.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFolderSummaryDto"
        supplier:
          nullable: true
          description: Résumé du fournisseur concerné par le document.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentSupplierSummaryDto"
        mainDocument:
          nullable: true
          description: Fichier principal disponible du document, ou null lorsque le
            fichier n’a pas encore été généré ou a été retiré.
          allOf:
            - $ref: "#/components/schemas/IntegrationDocumentFileDto"
        annexes:
          nullable: true
          description: Annexes disposant d’un fichier, y compris les annexes privées,
            triées par ordre puis identifiant. Liste vide en leur absence.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationDocumentFileDto"
        state:
          nullable: true
          description: >-
            État propre du document : état enregistré de validation/signature.
            Les données historiques sans état enregistré retournent null, sans
            recalcul.

            Les types sans état documentaire dédié, notamment les évaluations,
            sont prêts (`ready`). Les brouillons sont exclus de la liste.

            Les contrôles économiques agrégés du dossier, notamment
            `under-budget`, sont exposés par /folder et ne remplacent pas cet
            état.
          example: signature-accepted
          allOf:
            - $ref: "#/components/schemas/EnterpriseDocumentState"
        authorEmail:
          type: string
          nullable: true
          description: Email de l'auteur du document.
          example: jean.martin@example.com
        status:
          type: string
          nullable: true
          description: Libellé en français de l’état propre de l’évaluation.
        note:
          type: number
          nullable: true
          description: Note globale de l’évaluation.
        noteDetails:
          nullable: true
          description: Détail des notes par critère d’évaluation.
          type: array
          items:
            $ref: "#/components/schemas/IntegrationEvaluationNoteDetailDto"
      required:
        - type
        - id
        - name
        - createdAt
        - updatedAt
        - operation
        - state
    IntegrationDocumentPaginationMetadataDto:
      type: object
      properties:
        total:
          type: integer
          description: Nombre total de dossiers admissibles sans type, de documents avec
            type.
          example: 143
        limit:
          type: integer
          description: Taille de page en dossiers sans type, en documents avec type.
          example: 20
        offset:
          type: integer
          description: Décalage en dossiers sans type, en documents avec type.
          example: 0
      required:
        - total
        - limit
        - offset
    IntegrationPaginatedDocumentResponseDto:
      type: object
      properties:
        metadata:
          $ref: "#/components/schemas/IntegrationDocumentPaginationMetadataDto"
        data:
          type: array
          items:
            oneOf:
              - $ref: "#/components/schemas/IntegrationStandardDocumentDto"
              - $ref: "#/components/schemas/IntegrationLeadingContractDocumentDto"
              - $ref: "#/components/schemas/IntegrationOsDocumentDto"
              - $ref: "#/components/schemas/IntegrationContractDocumentDto"
              - $ref: "#/components/schemas/IntegrationCautionDocumentDto"
              - $ref: "#/components/schemas/IntegrationAgreementDocumentDto"
              - $ref: "#/components/schemas/IntegrationEvaluationDocumentDto"
            discriminator:
              propertyName: type
              mapping:
                ftm: "#/components/schemas/IntegrationStandardDocumentDto"
                client-amendment: "#/components/schemas/IntegrationStandardDocumentDto"
                client-estimate: "#/components/schemas/IntegrationStandardDocumentDto"
                cr: "#/components/schemas/IntegrationStandardDocumentDto"
                market-piece: "#/components/schemas/IntegrationStandardDocumentDto"
                client-caution: "#/components/schemas/IntegrationStandardDocumentDto"
                planning: "#/components/schemas/IntegrationStandardDocumentDto"
                pv: "#/components/schemas/IntegrationStandardDocumentDto"
                ppsps: "#/components/schemas/IntegrationStandardDocumentDto"
                correspondence: "#/components/schemas/IntegrationStandardDocumentDto"
                quitus: "#/components/schemas/IntegrationStandardDocumentDto"
                invoice: "#/components/schemas/IntegrationStandardDocumentDto"
                dgd: "#/components/schemas/IntegrationStandardDocumentDto"
                st-estimate: "#/components/schemas/IntegrationStandardDocumentDto"
                vic: "#/components/schemas/IntegrationStandardDocumentDto"
                situation: "#/components/schemas/IntegrationStandardDocumentDto"
                caution-request: "#/components/schemas/IntegrationStandardDocumentDto"
                payment-delegation: "#/components/schemas/IntegrationStandardDocumentDto"
                nominative-insurance: "#/components/schemas/IntegrationStandardDocumentDto"
                consultation-result: "#/components/schemas/IntegrationStandardDocumentDto"
                leading-contract: "#/components/schemas/IntegrationLeadingContractDocumentDto"
                os: "#/components/schemas/IntegrationOsDocumentDto"
                st-contract: "#/components/schemas/IntegrationContractDocumentDto"
                st-amendment: "#/components/schemas/IntegrationContractDocumentDto"
                command-leading-contract: "#/components/schemas/IntegrationContractDocumentDto"
                command-with-no-contract: "#/components/schemas/IntegrationContractDocumentDto"
                caution: "#/components/schemas/IntegrationCautionDocumentDto"
                agreement: "#/components/schemas/IntegrationAgreementDocumentDto"
                evaluation: "#/components/schemas/IntegrationEvaluationDocumentDto"
      required:
        - metadata
        - data
    DocumentFilterType:
      type: string
      enum:
        - os
        - leading-contract
        - st-contract
        - st-amendment
        - command-leading-contract
        - command-with-no-contract
        - caution
        - agreement
        - evaluation
