openapi: 3.0.0
paths:
  /api/v1/up:
    get:
      operationId: AppController_appHealth
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - App Health Check
  /api/v1/synchro-all:
    get:
      operationId: AppController_synchroAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - App Synchronization
  /api/v1/notification/find-unreads-by-user:
    get:
      operationId: NotificationController_findUnreadsByUser
      summary: Récupérer les notifications non lues d'un utilisateur
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/notification/mail-preference:
    get:
      operationId: NotificationController_getMailPreference
      summary: Récupérer la préférence email des alertes internes
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: NotificationController_updateMailPreference
      summary: Mettre à jour la préférence email des alertes internes
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMailPreferenceDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/notification/mark-as-read/{id}:
    put:
      operationId: NotificationController_markAsRead
      summary: Marquer une notification comme lue
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/notification/mark-all-as-read:
    put:
      operationId: NotificationController_markAllAsRead
      summary: Marquer toutes les notifications comme lues
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/notification/{id}:
    delete:
      operationId: NotificationController_remove
      summary: Supprimer une notification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SERVICE DE NOTIFICATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/auth/verify-email:
    get:
      operationId: VerifyEmailController_verifyEmailByCode
      summary: Vérifier l'email
      parameters:
        - name: token
          required: true
          in: query
          description: Le token d'authentification
          schema:
            type: string
        - name: email
          required: true
          in: query
          description: L'email de l'utilisateur
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/verify-email/resend:
    post:
      operationId: VerifyEmailController_resendEmail
      summary: Renvoyer l'email de vérification
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OtpRequestDto'
      responses:
        '201':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/password-reset/send-email:
    post:
      operationId: PasswordResetController_sendResetPasswordEmail
      summary: Envoyer un email de réinitialisation de mot de passe
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequestDto'
      responses:
        '200':
          description: Email envoyé avec succès
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/password-reset/verify-code:
    get:
      operationId: PasswordResetController_verifyResetCode
      summary: Vérifier le code de réinitialisation de mot de passe
      parameters:
        - name: code
          required: true
          in: query
          schema:
            type: string
        - name: email
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/password-reset:
    post:
      operationId: PasswordResetController_resetPassword
      summary: Réinitialisation de mot de passe
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetDto'
      responses:
        '201':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/password-reset/send-by-email-link:
    post:
      operationId: PasswordResetController_sendPasswordResetLink
      summary: Envoyer un lien de réinitialisation de mot de passe
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PasswordResetRequestDto'
      responses:
        '201':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/password-reset/check-email-token-access:
    get:
      operationId: PasswordResetController_checkEmailAndTokenAccess
      summary: Vérifier l accès par email et token
      parameters:
        - name: email
          required: true
          in: query
          schema:
            type: string
        - name: token
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/signup:
    post:
      operationId: AuthController_signup
      summary: Inscription d'un utilisateur (admin d'Entreprise) avec le mail
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignupDto'
      responses:
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
        '409':
          description: ''
      tags:
        - Authentification
  /api/v1/auth/api-key:
    get:
      operationId: AuthController_getApiKey
      summary: Get API key
      description: Get API key for the dashboard
      parameters: []
      responses:
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Authentification
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/auth/complete-registration:
    put:
      operationId: AuthController_updateProfile
      summary: Compléter un profil
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateUserDto'
      responses:
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/authenticate-company-user:
    post:
      operationId: AuthController_signInCompanyUser
      summary: Connexion d'un utilisateur Membre de compagnie
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignInDto'
      responses:
        '401':
          description: 'Accès refusé: utilisateur authentifié.'
      tags:
        - Authentification
  /api/v1/auth/context/switch:
    post:
      operationId: AuthController_switchContext
      summary: Activer un service et son contexte de travail
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SwitchAuthContextDto'
      responses:
        '201':
          description: ''
      tags:
        - Authentification
      security:
        - cookieAuth: []
  /api/v1/auth/authenticate-client:
    post:
      operationId: AuthController_signInClient
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignInDto'
      responses:
        '201':
          description: ''
      tags:
        - Authentification
  /api/v1/auth/logout:
    post:
      operationId: AuthController_logout
      summary: Déconnexion
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Authentification
      security:
        - cookieAuth: []
  /api/v1/auth/check-auth:
    get:
      operationId: AuthController_checkAuth
      summary: Vérifier l'authentification
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Authentification
      security:
        - cookieAuth: []
  /api/v1/auth/refresh-token:
    post:
      operationId: AuthController_refreshToken
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Authentification
  /api/v1/auth/unlock-screen:
    post:
      operationId: AuthController_checkPassword
      summary: Vérifier le mot de passe
      parameters: []
      responses:
        '201':
          description: ''
      tags:
        - Authentification
      security:
        - cookieAuth: []
  /api/v1/client-activity/track/page-visit:
    post:
      operationId: ClientActivityTrackingController_trackPageVisit
      summary: Enregistrer une visite de page
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrackPageVisitDto'
      responses:
        '201':
          description: Visite enregistrée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/track/download:
    post:
      operationId: ClientActivityTrackingController_trackDownload
      summary: Enregistrer un téléchargement
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrackDownloadDto'
      responses:
        '201':
          description: Téléchargement enregistré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/by-provider:
    get:
      operationId: ClientActivityTrackingController_getProviderActivity
      summary: Obtenir l'activité par fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/stats/user/{userId}:
    get:
      operationId: ClientActivityTrackingController_getUserActivityStats
      summary: Obtenir les statistiques d'activité d'un utilisateur
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            example: '2024-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            example: '2024-12-31'
            type: string
        - name: period
          required: false
          in: query
          description: Période d'agrégation
          schema:
            enum:
              - DAILY
              - WEEKLY
              - MONTHLY
            type: string
      responses:
        '200':
          description: Statistiques récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/stats/global:
    get:
      operationId: ClientActivityTrackingController_getGlobalActivityStats
      summary: Obtenir les statistiques globales d'activité
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            example: '2024-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            example: '2024-12-31'
            type: string
        - name: period
          required: false
          in: query
          description: Période d'agrégation
          schema:
            enum:
              - DAILY
              - WEEKLY
              - MONTHLY
            type: string
      responses:
        '200':
          description: Statistiques globales récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/users/login-issues:
    get:
      operationId: ClientActivityTrackingController_getUsersWithLoginIssues
      summary: Obtenir les utilisateurs avec des problèmes de connexion
      parameters:
        - name: minFailedAttempts
          required: false
          in: query
          description: Nombre minimum de tentatives échouées
          schema:
            default: 3
            type: number
        - name: days
          required: false
          in: query
          description: Nombre de jours à analyser
          schema:
            default: 7
            type: number
      responses:
        '200':
          description: Liste des utilisateurs avec problèmes récupérée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/alerts:
    get:
      operationId: ClientActivityTrackingController_getActiveAlerts
      summary: Obtenir les alertes actives
      parameters:
        - name: userId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Alertes récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/client-activity/alerts/{alertId}/resolve:
    patch:
      operationId: ClientActivityTrackingController_resolveAlert
      summary: Résoudre une alerte
      parameters:
        - name: alertId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Alerte résolue avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Client Activity Tracking
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/user/{id}/profile:
    put:
      operationId: UserController_updateProfile
      summary: Récuperer un utilisateur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProfileDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/user/add-signature:
    put:
      operationId: UserController_addSignature
      summary: Ajouter une signature
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/user/add-signature-by-admin/{userId}:
    put:
      operationId: UserController_addSignatureByAdmin
      summary: Ajouter une signature
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/admin/get-one-user/{id}:
    get:
      operationId: UserController_getOneUser
      summary: Récuperer un utilisateur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Super Admin global
  /api/v1/super-admin/get-all-users:
    get:
      operationId: UserController_getAllUsers
      summary: Récuperer tous les utilisateurs de la plateforme
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Super Admin global
  /api/v1/user/change-password/{id}:
    put:
      operationId: UserController_changePasswor
      summary: Changer le mot de passe
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangePasswordDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/user/change-email:
    put:
      operationId: UserController_changeEmail
      summary: Change email
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeEmailDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/user/me:
    get:
      operationId: UserController_getMe
      summary: Récuperer l utilisateur connecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Tous les utilisateurs
  /api/v1/laboratory/create:
    post:
      operationId: LaboratoryController_create
      summary: Créer un laboratoire
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateLaboratoryDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/this:
    get:
      operationId: LaboratoryController_findCurrentServiceProviderLaboratories
      summary: >-
        Récupérer les laboratoires du fournisseur de service de l'utilisateur
        actuel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/this-without-include:
    get:
      operationId: >-
        LaboratoryController_findCurrentServiceProviderLaboratoriesWithoutInclude
      summary: >-
        Récupérer les laboratoires du fournisseur de service de l'utilisateur
        actuel (sans les relations)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
        - Laboratoire
  /api/v1/laboratory/with-responsible-name:
    get:
      operationId: LaboratoryController_findLabsWithResponsibleName
      summary: >-
        Récupérer les laboratoires du fournisseur de service avec le nom du
        responsable
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
        - Laboratoire
  /api/v1/laboratory/this-by-status:
    get:
      operationId: LaboratoryController_findCurrentServiceProviderLaboratoriesByStatus
      summary: Récupérer tous les laboratoires active du fournisseur de service
      parameters:
        - name: status
          required: true
          in: query
          schema:
            enum:
              - ACTIVE
              - INACTIVE
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/{id}:
    get:
      operationId: LaboratoryController_findOne
      summary: Récupérer un laboratoire par son id
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/update/{id}:
    put:
      operationId: LaboratoryController_update
      summary: Mise à jour d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateLaboratoryDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/delete/{id}:
    delete:
      operationId: LaboratoryController_remove
      summary: Suppression d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/laboratory/company/{id}:
    get:
      operationId: LaboratoryController_getByCompany
      summary: Récupérer les laboratoires d une compagnie
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
        - Laboratoire
  /api/v1/laboratory/delete-complet/{id}:
    delete:
      operationId: LaboratoryController_deleteCompletely
      summary: Suppression définive d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Laboratoire
  /api/v1/certificate-groups/create:
    post:
      operationId: CertificateGroupsController_create
      summary: Créer un nouveau groupe de certificats
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCertificateGroupDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de Certificats
        - Laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/certificate-groups/this:
    get:
      operationId: CertificateGroupsController_findAll
      summary: Récupérer tous les groupes de certificats du fournisseur
      parameters:
        - name: laboratoryId
          required: false
          in: query
          description: ID du laboratoire pour filtrer
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de Certificats
        - Laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/certificate-groups/{id}:
    get:
      operationId: CertificateGroupsController_findOne
      summary: Récupérer un groupe de certificats par son ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de Certificats
        - Laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/certificate-groups/update/{id}:
    put:
      operationId: CertificateGroupsController_update
      summary: Mettre à jour un groupe de certificats
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCertificateGroupDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de Certificats
        - Laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/certificate-groups/delete/{id}:
    delete:
      operationId: CertificateGroupsController_remove
      summary: Supprimer un groupe de certificats
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de Certificats
        - Laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/matrix/create:
    post:
      operationId: MatrixController_create
      summary: Créer une matrice
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMatrixDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/lab/{id}:
    get:
      operationId: MatrixController_findByLabId
      summary: Recupérer les matrices d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/one/{id}:
    get:
      operationId: MatrixController_findOne
      summary: Recupérer une matrice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/update/{id}:
    put:
      operationId: MatrixController_update
      summary: Mettre à jour une matrice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMatrixDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/delete/{id}:
    delete:
      operationId: MatrixController_remove
      summary: Supprimer une matrice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/create/bulk:
    post:
      operationId: MatrixController_createBulk
      summary: Créer plusieurs matrices
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateMatrixDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/delete/bulk:
    put:
      operationId: MatrixController_removeBulk
      summary: Supprimer plusieurs matrices
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulKDeleteBody'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/matrix/merge:
    post:
      operationId: MatrixController_mergeMatrices
      summary: Fusionner plusieurs matrices
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeMatricesDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Matrice
  /api/v1/laboratory/parameter/create:
    post:
      operationId: ParameterController_create
      summary: Créer un paramètre
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateParameterDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/lab/{id}:
    get:
      operationId: ParameterController_findByLabId
      summary: Liste des paramètres d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/one/{id}:
    get:
      operationId: ParameterController_findOne
      summary: Détails d'un paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/company:
    get:
      operationId: ParameterController_findByCompanyId
      summary: Liste des paramètres d'une entreprise
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/matrix/{id}:
    get:
      operationId: ParameterController_findAllByMatrixId
      summary: Liste des paramètres d'une matrice
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/by-lab/{id}:
    get:
      operationId: ParameterController_findByLab
      summary: Liste des paramètres d'un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/lab/{id}/catalog-grid:
    get:
      operationId: ParameterController_getCatalogGrid
      summary: Catalogue classique (non moléculaire) d’un laboratoire — grille Excel
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/lab/{id}/catalog-grid/sync:
    put:
      operationId: ParameterController_syncCatalogGrid
      summary: >-
        Synchroniser le catalogue classique (ajout / modification, sans
        suppression)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncCatalogGridDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/catalog-grid/sync-jobs/{jobId}:
    get:
      operationId: ParameterController_getCatalogSyncJobStatus
      summary: Statut du job de synchronisation du catalogue
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/update/{id}:
    put:
      operationId: ParameterController_update
      summary: Mettre à jour un paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateParameterDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/update-status/{id}:
    put:
      operationId: ParameterController_updateStatus
      summary: Mettre à jour le statut d'un paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/set-bulk-unit-measure:
    put:
      operationId: ParameterController_setBulkUnitMeasure
      summary: Mettre à jour l'unité de mesure d'un paramètre
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/delete/{id}:
    delete:
      operationId: ParameterController_remove
      summary: Supprimer un paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/delete-critere/{id}:
    delete:
      operationId: ParameterController_removeCritere
      summary: Supprimer un critère
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/delete/bulk:
    put:
      operationId: ParameterController_removeBulk
      summary: Supprimer plusieurs éléments, la requêtte est transaccitonnelle..
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulKDeleteBody'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/download/template:
    get:
      operationId: ParameterController_downloadTemplate
      summary: Télécharger le modèle d'import
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/import-params/{labId}:
    post:
      operationId: ParameterController_ImportParameters
      summary: Importer les paramètres
      parameters:
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/export-params/{labId}:
    get:
      operationId: ParameterController_ExportParameters
      summary: Exporter les paramètres
      parameters:
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/laboratory/parameter/export/excel:
    get:
      operationId: ParameterController_exportParametersToExcel
      summary: Exporter tous les paramètres vers Excel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Paramètre
  /api/v1/lab-package/create:
    post:
      operationId: LabPackageController_create
      summary: Créer un package de laboratoire
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLabPackageDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/create-molecular:
    post:
      operationId: LabPackageController_createMolecular
      summary: Créer un package moléculaire (molécules importées = paramètres enfants)
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMolecularLabPackageDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/by-lab/{id}:
    get:
      operationId: LabPackageController_findAll
      summary: Trouver tous les packages de laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/molecular/by-lab/{id}:
    get:
      operationId: LabPackageController_findMolecularByLab
      summary: Trouver les packages moléculaires d’un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/this-provider:
    get:
      operationId: LabPackageController_findAllByLab
      summary: Trouver tous les packages
      parameters:
        - name: includeDeleted
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/one/{id}:
    get:
      operationId: LabPackageController_findOne
      summary: Trouver un package de laboratoire par identifiant
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/update/{id}:
    put:
      operationId: LabPackageController_update
      summary: Mettre à jour un package de laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLabPackageDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/delete/{id}:
    delete:
      operationId: LabPackageController_remove
      summary: Supprimer un package de laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/restore/{id}:
    patch:
      operationId: LabPackageController_restore
      summary: Réactiver un package de laboratoire supprimé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/set-molecular/{id}:
    patch:
      operationId: LabPackageController_setMolecular
      summary: Marquer/démarquer un package comme moléculaire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetMolecularDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules:
    get:
      operationId: LabPackageController_getMolecularMolecules
      summary: Liste des molécules d'un package pour l'éditeur web
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules/sync:
    put:
      operationId: LabPackageController_syncMolecularMolecules
      summary: Synchroniser les molécules depuis la grille web (sans Excel)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncMolecularMoleculesDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/molecules/sync-jobs/{jobId}:
    get:
      operationId: LabPackageController_getMolecularSyncJobStatus
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules/export:
    get:
      operationId: LabPackageController_exportMolecularPackage
      summary: Exporter les molécules d'un package moléculaire en Excel
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/molecules/import-template:
    get:
      operationId: LabPackageController_exportMolecularImportTemplate
      summary: Télécharger le modèle Excel d'import de molécules
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/molecules/parse-excel:
    post:
      operationId: LabPackageController_parseMolecularExcel
      summary: Analyser un fichier Excel de molécules (création de package)
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules/import-preview:
    post:
      operationId: LabPackageController_previewMolecularPackageImport
      summary: Prévisualiser l'impact d'un import de molécules
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: mode
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules/import:
    post:
      operationId: LabPackageController_importMolecularPackage
      summary: Importer des molécules depuis un fichier Excel
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: mode
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/{id}/molecules/import-async:
    post:
      operationId: LabPackageController_importMolecularPackageAsync
      summary: Importer des molécules en tâche de fond
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: mode
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/molecules/import-jobs/{jobId}:
    get:
      operationId: LabPackageController_getMolecularImportJobStatus
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/assign-parameter/{labPackageId}:
    post:
      operationId: LabPackageController_assignParameter
      summary: Assigner un paramètre à un package de laboratoire
      parameters:
        - name: labPackageId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLabPackageParameterDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-package/remove-parameter/{parameterId}/{labPackageId}:
    delete:
      operationId: LabPackageController_removeParameter
      summary: Supprimer un paramètre d'un package de laboratoire
      parameters:
        - name: parameterId
          required: true
          in: path
          schema:
            type: string
        - name: labPackageId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY PACKAGE
        - LABORATORY PACKAGE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/action-log/company/logs:
    get:
      operationId: ActionLogController_companyLogs
      summary: Liste des actions effectuées par la companie de l'utilisateur actuel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/action-log/delete/{id}:
    delete:
      operationId: ActionLogController_remove
      summary: Supprimer un historique d'actions
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Super Admin global
  /api/v1/audit-logs:
    post:
      operationId: AuditLogController_create
      summary: Créer un log d'audit
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAuditLogDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
    get:
      operationId: AuditLogController_findAll
      summary: Récupérer tous les logs d'audit
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/audit-logs/{id}:
    get:
      operationId: AuditLogController_findOne
      summary: Récupérer un log d'audit par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/audit-logs/entity/{entityType}/{entityId}:
    get:
      operationId: AuditLogController_findEntityHistory
      summary: Récupérer l'historique d'une entité
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/audit-logs/statistics/overview:
    get:
      operationId: AuditLogController_getStatistics
      summary: Récupérer les statistiques des logs
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/audit-logs/archive:
    post:
      operationId: AuditLogController_archiveOldLogs
      summary: Archiver les anciens logs
      parameters:
        - name: daysToKeep
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/audit-logs/export/{format}:
    get:
      operationId: AuditLogController_exportLogs
      summary: Exporter les logs
      parameters:
        - name: format
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Journal d'audit
  /api/v1/proforma/create-full:
    post:
      operationId: ProformaController_create
      summary: >-
        Créer une proforma complète (proforma, items, paramètres, coûts
        supplémentaires)
      parameters:
        - name: isgenerated_by_customer
          required: true
          in: query
          schema:
            type: boolean
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/create-from-contract:
    post:
      operationId: ProformaController_createFromContract
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaFromContractDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/add-item:
    post:
      operationId: ProformaController_addItemToProforma
      summary: Ajouter un type d'analyse à une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaItemsDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/add-item-from-contract:
    post:
      operationId: ProformaController_addItemFromContract
      summary: Ajouter un item du contrat à une proforma contractuelle
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddProformaItemFromContractDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/add-matrix-parameters/{proformaItemId}:
    post:
      operationId: ProformaController_addParametersToProforma
      summary: Ajouter des paramètres à une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: proformaItemId
          required: true
          in: path
          description: Identifiant de l item  de la proforma
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateProformaItemAnalyseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/add-additional-costs:
    post:
      operationId: ProformaController_addAdditionalCostsToProforma
      summary: Ajouter des coûts supplémentaires à une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAdditionalCostDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/add-viewers:
    post:
      operationId: ProformaController_addViewersToProforma
      summary: Ajouter des viewers à une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/synch-viewers:
    get:
      operationId: ProformaController_synchProformaViewers
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/status/{status}:
    get:
      operationId: ProformaController_getProformaByStatus
      summary: Récuperer les proformas par statut
      parameters:
        - name: status
          required: true
          in: path
          description: Status de la proforma
          schema:
            enum:
              - EN_ATTENTE
              - VALIDEE
              - EN_COURS_DE_TRAITEMENT
              - TRAITEE
              - NON_VALIDEE
              - ANNULEE
              - EXPIREE
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/this-provider/get-all:
    get:
      operationId: ProformaController_getAllCurrentProviderProformas
      summary: Récuperer les proformas du service connecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/this-provider/deleted:
    get:
      operationId: ProformaController_getAllCurrentProviderProformasDeleted
      summary: Récuperer les proformas supprimé du service connecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/this-provider/filter-no-prelevement:
    get:
      operationId: ProformaController_filterProviderProformas
      summary: Récuperer les proformas d'un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/customer-company/{companyId}/get-all:
    get:
      operationId: ProformaController_getAllProviderClientProformas
      summary: Récuperer les proformas d'un client d'un fournisseur de service
      parameters:
        - name: companyId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/one/{proformaId}:
    get:
      operationId: ProformaController_getProforma
      summary: Récuperer une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/all-by-customer:
    get:
      operationId: ProformaController_getProformaByCustomer
      summary: Récuperer une proforma par client
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/chart-stats/{year}:
    get:
      operationId: ProformaController_getStats
      summary: Récupérer les statistiques des proformas par année
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/donut-stats/{year}:
    get:
      operationId: ProformaController_getDonutStats
      summary: Récupérer les statistiques des proformas par année
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/stats-company/get/{year}:
    get:
      operationId: ProformaController_getStatsByCompany
      summary: Récupérer les meilleurs clients par nombre de proformas
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/stats-client/get/{year}:
    get:
      operationId: ProformaController_getStatsByIndividualClient
      summary: Récupérer les statistiques des proformas par client
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/this-provider/get-no-echantillon:
    get:
      operationId: ProformaController_getProformaWithoutEchantillon
      summary: Récuperer les proformas sans échantillon
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/this-provider/source-stats:
    get:
      operationId: ProformaController_getSourceStats
      summary: Récupérer les statistiques des proformas par source
      parameters:
        - name: year
          required: false
          in: query
          schema:
            type: number
        - name: month
          required: false
          in: query
          schema:
            type: number
        - name: day
          required: false
          in: query
          schema:
            type: number
        - name: all
          required: false
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/customer-validate/{proformaId}:
    put:
      operationId: ProformaController_customerValidateProforma
      summary: Valider ou rejeter une proforma par le client
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          description: Action à effectuer sur la proforma
          schema:
            enum:
              - validate
              - reject
            type: string
      requestBody:
        required: true
        description: >-
          Bon pour accord pour validation, ou motif obligatoire pour une
          annulation client
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                signedFile:
                  type: string
                  format: binary
                  description: >-
                    Fichier PDF de la proforma portant le bon pour accord du
                    client
                includeIncertitude:
                  type: boolean
                  description: Autoriser les incertitudes de mesure
                reasonCode:
                  type: string
                  enum:
                    - DEMANDE_CLIENT
                    - ECHANTILLON_NON_CONFORME
                    - ECHANTILLON_NON_RECU
                    - ERREUR_SAISIE
                    - DOUBLON
                    - DELAI_DEPASSE
                    - LITIGE
                    - AUTRE
                  description: Obligatoire quand action=reject
                reason:
                  type: string
                  description: >-
                    Précision obligatoire pour le motif AUTRE (au moins 10
                    caractères)
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/update/{proformaId}:
    put:
      operationId: ProformaController_updateProforma
      summary: Mettre à jour une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProformaDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/update-analyses/{itemId}:
    put:
      operationId: ProformaController_updateItem
      summary: Mettre à jour une proforma
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/UpdateProformaItemAnalyseDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/update-item-infos/{itemId}:
    put:
      operationId: ProformaController_updateNbEchantillon
      summary: Mettre à jour une proforma
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateItemInfoDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/update/status/{proformaId}:
    put:
      operationId: ProformaController_updateProformaStatus
      summary: Mettre à jour le statut d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatusProformaDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/mark-as-paid/{proformaId}:
    put:
      operationId: ProformaController_markProformaAsPaid
      summary: Marquer une proforma validée comme payée
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarkProformaAsPaidDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/update-signed-file/{proformaId}:
    put:
      operationId: ProformaController_updateSignedProformaFile
      summary: Mettre à jour le fichier bon pour accord d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        description: Fichier PDF signé de la proforma (bon pour accord)
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                signedFile:
                  type: string
                  format: binary
                  description: >-
                    Fichier PDF de la proforma portant le bon pour accord du
                    client
              required:
                - signedFile
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/provider-upload-signed-file/{proformaId}:
    put:
      operationId: ProformaController_uploadSignedFileByProviderUser
      summary: Upload manuel du fichier bon pour accord par le fournisseur
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        description: >-
          Fichier PDF signé de la proforma (bon pour accord) reçu par un autre
          canal (email, physique, etc.)
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                signedFile:
                  type: string
                  format: binary
                  description: >-
                    Fichier PDF scanné ou reçu du client portant le bon pour
                    accord
              required:
                - signedFile
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/allow-signed-file-update/{proformaId}:
    put:
      operationId: ProformaController_allowSignedFileUpdate
      summary: Autoriser ou interdire la mise à jour du fichier bon pour accord
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        description: Action à effectuer
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  enum:
                    - allow
                    - not_allow
                  description: Autoriser (allow) ou interdire (not_allow) la mise à jour
                reason:
                  type: string
                  description: Raison de l'autorisation ou de l'interdiction
              required:
                - action
                - reason
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/excel:
    get:
      operationId: ProformaController_exportProformasToExcel
      summary: Exporter les proformas vers Excel avec filtres avancés
      parameters:
        - name: status
          required: false
          in: query
          description: Statut(s) des proformas (séparés par virgule)
          schema:
            example: VALIDEE,EN_ATTENTE
            type: string
        - name: startDate
          required: false
          in: query
          description: Date de début (YYYY-MM-DD)
          schema:
            example: '2025-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (YYYY-MM-DD)
          schema:
            example: '2025-12-31'
            type: string
        - name: customerType
          required: false
          in: query
          description: Type de client (INDIVIDUAL ou COMPANY)
          schema:
            example: COMPANY
            type: string
        - name: reference
          required: false
          in: query
          description: Recherche par référence
          schema:
            example: PRO-2025
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/customer-revenue:
    get:
      operationId: ProformaController_exportCustomerRevenueToExcel
      summary: Exporter les données de chiffre d'affaires par client vers Excel
      description: >-
        Génère un fichier Excel contenant une feuille globale et une feuille par
        mois avec les revenus par client
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (format ISO)
          schema:
            example: '2025-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (format ISO)
          schema:
            example: '2025-12-31'
            type: string
        - name: customerType
          required: false
          in: query
          description: Type de client (INDIVIDUAL ou COMPANY)
          schema:
            example: COMPANY
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/customer-revenue-by-month:
    get:
      operationId: ProformaController_exportCustomerRevenueByMonth
      summary: Export des revenus par mois avec feuille globale
      description: >-
        Génère un fichier Excel contenant une feuille globale et une feuille par
        mois avec les revenus par client
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (format ISO)
          schema:
            example: '2025-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (format ISO)
          schema:
            example: '2025-12-31'
            type: string
        - name: customerType
          required: false
          in: query
          description: Type de client (INDIVIDUAL ou COMPANY)
          schema:
            example: COMPANY
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/all-datasets:
    get:
      operationId: ProformaController_exportAllDatasetsToExcel
      summary: Export complet des statistiques du laboratoire
      description: >-
        Génère un fichier Excel avec 9 feuilles contenant toutes les
        statistiques : proformas, bordereaux, échantillons, top natures, top
        paramètres, demandes, rapports, conversion et top clients
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (format ISO)
          schema:
            example: '2025-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (format ISO)
          schema:
            example: '2025-12-31'
            type: string
        - name: forFullYear
          required: false
          in: query
          description: Exporter pour une année complète
          schema:
            example: true
            type: boolean
        - name: year
          required: false
          in: query
          description: Année à exporter (si forFullYear=true)
          schema:
            example: 2025
            type: number
        - name: includeSheetByMonth
          required: false
          in: query
          description: Inclure les détails mensuels
          schema:
            example: true
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/parameter-revenue:
    get:
      operationId: ProformaController_exportParameterRevenueToExcel
      summary: Exporter le chiffre d'affaires par paramètre vers Excel
      description: >-
        Génère un fichier Excel avec les CA des paramètres standards, packages
        moléculaires et packages commerciaux à partir des analyses ayant un
        résultat.
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début des résultats (format ISO)
          schema:
            example: '2026-05-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin des résultats (format ISO)
          schema:
            example: '2026-06-18'
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: Filtrer sur un laboratoire spécifique
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/enable-customer-view:
    put:
      operationId: ProformaController_enableCustomerToView
      summary: Activer la visibilité client et envoyer la notification
      description: >-
        Met canCustomerView à true et envoie la notification email au client
        selon le type
      parameters:
        - name: proformaId
          required: true
          in: path
          description: ID de la proforma
          schema:
            type: string
        - name: notificationType
          required: false
          in: query
          description: 'Type de notification : creation ou modification'
          schema:
            enum:
              - creation
              - modification
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/lock/{proformaId}:
    put:
      operationId: ProformaController_lockProforma
      summary: Verrouiller la proforma (empêcher validation client)
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/unlock/{proformaId}:
    put:
      operationId: ProformaController_unlockProforma
      summary: Déverrouiller la proforma (permettre validation client)
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/export/client-usage-rate:
    get:
      operationId: ProformaController_exportClientUsageRate
      summary: Export du taux d'utilisation de l'espace client
      description: >-
        Génère un fichier Excel avec 4 feuilles : proformas validées par les
        clients, demandes de proforma, rapports envoyés, et KPIs d'utilisation
      parameters:
        - name: year
          required: false
          in: query
          description: Année à analyser (par défaut l'année courante)
          schema:
            example: 2025
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/finalize-partial-reception/preview:
    get:
      operationId: ProformaController_previewFinalizePartialReception
      summary: >-
        Prévisualiser la finalisation d'une réception partielle (proforma →
        source de vérité: bordereaux)
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/finalize-partial-reception/preview/from-bordereau/{bordereauId}:
    get:
      operationId: ProformaController_previewFinalizePartialReceptionFromBordereau
      summary: >-
        Prévisualiser la finalisation depuis un bordereau (résout la proforma
        associée)
      parameters:
        - name: bordereauId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/finalize-partial-reception:
    post:
      operationId: ProformaController_finalizePartialReception
      summary: >-
        Finaliser une réception partielle : ajuste la proforma sur ce qui a été
        reçu
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinalizePartialReceptionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/delete/{proformaId}:
    delete:
      operationId: ProformaDeleteController_deleteProforma
      summary: Suppression logique d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/delete-bulk:
    delete:
      operationId: ProformaDeleteController_deleteBulkProforma
      summary: Suppression logique en masse de proformas
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/delete-item/{proformaId}/{itemId}:
    delete:
      operationId: ProformaDeleteController_deleteItemProforma
      summary: Suppression d'un lot d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: itemId
          required: true
          in: path
          description: Identifiant du lot de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/soft-delete-item/{proformaId}/{itemId}:
    delete:
      operationId: ProformaDeleteController_softDeleteItemProforma
      summary: Suppression logique d'un lot d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: itemId
          required: true
          in: path
          description: Identifiant du lot de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/delete-parameter/{id}:
    delete:
      operationId: ProformaDeleteController_deleteAnalyseProforma
      summary: Suppression d'un paramètre d'un lot de proforma
      parameters:
        - name: id
          required: true
          in: path
          description: Identifiant du paramètre de l item  de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/delete-additional-cost/{additionalCostId}:
    delete:
      operationId: ProformaDeleteController_deleteAdditionalCostProforma
      summary: Suppression d'un coût supplémentaire d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: additionalCostId
          required: true
          in: path
          description: Identifiant du coût supplémentaire
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/soft-delete-additional-cost/{additionalCostId}:
    delete:
      operationId: ProformaDeleteController_softDeleteAdditionalCostProforma
      summary: Suppression logique d'un coût supplémentaire d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: additionalCostId
          required: true
          in: path
          description: Identifiant du coût supplémentaire
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/{proformaId}/restore-additional-cost/{additionalCostId}:
    put:
      operationId: ProformaDeleteController_restoreAdditionalCostProforma
      summary: Restaurer un coût supplémentaire d'une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
        - name: additionalCostId
          required: true
          in: path
          description: Identifiant du coût supplémentaire
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/hard-delete/{proformaId}:
    delete:
      operationId: ProformaDeleteController_deleteHardProforma
      summary: Suppression définitive d'une proforma (hard delete)
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/hard-delete-bulk:
    delete:
      operationId: ProformaDeleteController_deleteBulkHardProforma
      summary: Suppression définitive en masse de proformas (hard delete)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/restore/{proformaId}:
    put:
      operationId: ProformaDeleteController_restoreProforma
      summary: Restaurer une proforma supprimée
      parameters:
        - name: proformaId
          required: true
          in: path
          description: Identifiant de la proforma
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma/restore-bulk:
    put:
      operationId: ProformaDeleteController_restoreBulkProforma
      summary: Restaurer plusieurs proformas supprimées
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/search:
    get:
      operationId: FacturationAdvController_search
      summary: >-
        Recherche paginée et filtrée des ADV, avec agrégats — remplace le
        chargement complet suivi d’un filtrage côté client
      parameters:
        - name: search
          required: false
          in: query
          description: >-
            Recherche sur le nom du client, la référence proforma ou le
            bordereau
          schema:
            type: string
        - name: status
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - NON_FACTUREE
                - PARTIELLEMENT_FACTUREE
                - FACTUREE
                - RECOUVREE
        - name: billabilityStatus
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - A_FACTURER
                - EN_STAND_BY
                - NON_FACTURABLE
                - ANNULEE
        - name: billingStatus
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - NON_FACTUREE
                - PARTIELLEMENT_FACTUREE
                - FACTUREE
                - FACTUREE_HORS_LIMS
                - SANS_OBJET
        - name: settlementStatus
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - NON_ENCAISSEE
                - PARTIELLEMENT_ENCAISSEE
                - ENCAISSEE
                - TROP_PERCU
        - name: nonBillableReason
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - ANNULATION_CLIENT
                - CONTRE_ANALYSE_INTERLABO
                - CONTRE_ANALYSE_LITIGE
                - CLIENT_EXEMPTE_DE_PAIEMENT
                - ACCORD_COMMERCIAL
                - GESTE_COMMERCIAL
                - ECHANTILLON_NON_CONFORME
                - ERREUR_SAISIE
                - DOUBLON
                - ANALYSE_INTERNE
                - ESSAI_INTERLABORATOIRE
                - EN_ATTENTE_ADRESSE_FACTURATION
                - AUTRE
        - name: customerType
          required: false
          in: query
          schema:
            enum:
              - INDIVIDUAL
              - COMPANY
            type: string
        - name: customerId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: labName
          required: false
          in: query
          description: Nom de laboratoire, correspondance partielle
          schema:
            type: string
        - name: traitementStatus
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - EN_ATTENTE
                - EN_COURS
                - TRAITE
        - name: rapportTransmitted
          required: false
          in: query
          description: Rapport transmis au client
          schema:
            type: boolean
        - name: dateField
          required: false
          in: query
          description: >-
            Champ de date auquel s’appliquent startDate/endDate. Par défaut :
            réception, avec repli sur la facturation comme le faisait le front.
          schema:
            default: reception
            enum:
              - reception
              - facturation
              - reglement
              - creation
            type: string
        - name: startDate
          required: false
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          schema:
            example: '2026-12-31'
            type: string
        - name: minAmount
          required: false
          in: query
          schema:
            type: number
        - name: maxAmount
          required: false
          in: query
          schema:
            type: number
        - name: onlyOutstanding
          required: false
          in: query
          description: ADV avec un reste à recouvrer strictement positif
          schema:
            type: boolean
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            maximum: 200
            default: 25
            type: number
        - name: sortBy
          required: false
          in: query
          schema:
            default: createdAt
            enum:
              - createdAt
              - dateReception
              - dateFacturation
              - netAPayer
              - customerName
            type: string
        - name: sortOrder
          required: false
          in: query
          schema:
            default: desc
            enum:
              - asc
              - desc
            type: string
        - name: withHeavyRelations
          required: false
          in: query
          description: >-
            Inclut la facture liée et les versions de proforma. Charge lourde :
            ne l’activer que sur un détail.
          schema:
            default: false
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/transmission-tracking:
    get:
      operationId: FacturationAdvController_transmissionTracking
      summary: >-
        Valeurs disponibles pour les filtres (laboratoires, répartition par
        statut), sans charger la liste
      parameters:
        - name: onlyLate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/facets:
    get:
      operationId: FacturationAdvController_facets
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/this-provider:
    get:
      operationId: FacturationAdvController_findAll
      summary: >-
        [DÉPRÉCIÉ — préférer /search] Récupérer TOUS les avis de crédit, sans
        pagination
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/one/{id}:
    get:
      operationId: FacturationAdvController_findOne
      summary: recuperer un avis de crédit par son ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/facture/{id}:
    put:
      operationId: FacturationAdvController_update
      summary: Facturer un avis de crédit
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFacturationAdvDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-adv/checkout/{id}:
    put:
      operationId: FacturationAdvController_withDraw
      summary: Facturer un avis de crédit
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFacturationAdvDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV: FACTURATION DES AVIS DE CREDIT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures:
    post:
      operationId: FactureController_create
      summary: Créer une nouvelle facture
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFactureDto'
      responses:
        '201':
          description: Facture créée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: FactureController_findAll
      summary: Récupérer toutes les factures
      parameters: []
      responses:
        '200':
          description: Liste des factures.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/partial:
    post:
      operationId: FactureController_createPartial
      summary: Créer une facture partielle à montant HT libre pour une proforma
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePartialFactureDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/from-proformas:
    post:
      operationId: FactureController_createFromProformas
      summary: >-
        Créer une facture unique à partir de plusieurs proformas (contrat
        client)
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFactureFromProformasDto'
      responses:
        '201':
          description: Facture groupée créée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/reference/{reference}:
    get:
      operationId: FactureController_findByReference
      summary: Récupérer une facture par sa référence
      parameters:
        - name: reference
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Détails de la facture.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/client:
    get:
      operationId: FactureController_findByClient
      summary: Récupérer les factures d'un client
      parameters:
        - name: customerType
          required: true
          in: query
          schema:
            type: string
        - name: clientId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Liste des factures du client.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/rapport/{rapportId}:
    get:
      operationId: FactureController_findByRapportAnalyse
      summary: Récupérer les factures d'un rapport d'analyse
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Liste des factures du rapport d'analyse.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/proforma/{proformaId}:
    get:
      operationId: FactureController_findByProforma
      summary: Récupérer les factures d'un proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Liste des factures du proforma.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/proforma/{proformaId}/partial-balance:
    get:
      operationId: FactureController_getPartialInvoiceBalance
      summary: Récupérer le total déjà facturé et le reste HT d’une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/{id}:
    get:
      operationId: FactureController_findOne
      summary: Récupérer une facture par son ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Détails de la facture.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: FactureController_update
      summary: Mettre à jour une facture
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFactureDto'
      responses:
        '200':
          description: Facture mise à jour avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: FactureController_remove
      summary: Supprimer une facture
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Facture supprimée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/{id}/mark-as-paid:
    post:
      operationId: FactureController_markAsPaid
      summary: Marquer une facture comme payée
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Facture marquée comme payée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/factures/{id}/mark-as-partially-paid:
    post:
      operationId: FactureController_markAsPartiallyPaid
      summary: Enregistrer un paiement partiel (acompte) sur une facture
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Paiement partiel enregistré avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - factures
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-addresses:
    post:
      operationId: FacturationAddressController_create
      summary: Créer une nouvelle adresse de facturation
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFacturationAddressDto'
      responses:
        '201':
          description: Adresse créée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: FacturationAddressController_findAll
      summary: Récupérer toutes les adresses de facturation
      parameters: []
      responses:
        '200':
          description: Liste des adresses de facturation.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-addresses/by-customer/{clientId}:
    get:
      operationId: FacturationAddressController_findByClient
      summary: Récupérer les adresses de facturation d'un client
      parameters:
        - name: customerId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Liste des adresses de facturation du client.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-addresses/default:
    get:
      operationId: FacturationAddressController_findDefaultAddress
      summary: Récupérer l'adresse de facturation par défaut d'un client
      parameters:
        - name: clientId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Adresse de facturation par défaut du client.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-addresses/{id}:
    get:
      operationId: FacturationAddressController_findOne
      summary: Récupérer une adresse de facturation par son ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Détails de l'adresse de facturation.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: FacturationAddressController_update
      summary: Mettre à jour une adresse de facturation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFacturationAddressDto'
      responses:
        '200':
          description: Adresse mise à jour avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: FacturationAddressController_remove
      summary: Supprimer une adresse de facturation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Adresse supprimée avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/facturation-addresses/{id}/set-default:
    put:
      operationId: FacturationAddressController_setDefaultAddress
      summary: Définir une adresse comme adresse par défaut
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Adresse définie comme par défaut avec succès.
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - facturation-addresses
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/financial-dashboard:
    get:
      operationId: BusinessStatsController_getFinancialDashboard
      summary: Obtenir le tableau de bord financier
      parameters:
        - name: year
          required: true
          in: query
          description: Année
          schema:
            example: 2025
            type: number
        - name: month
          required: false
          in: query
          description: Mois (1-12)
          schema:
            example: 7
            type: number
        - name: day
          required: false
          in: query
          description: Jour du mois
          schema:
            example: 15
            type: number
      responses:
        '200':
          description: Tableau de bord financier récupéré avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialDashboardResponseDto'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/operational-overview:
    get:
      operationId: BusinessStatsController_getOperationalOverview
      summary: Obtenir un aperçu des opérations
      parameters:
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/predictive-analysis:
    get:
      operationId: BusinessStatsController_getPredictiveAnalysis
      summary: Obtenir l'analyse prédictive
      parameters: []
      responses:
        '200':
          description: Analyse prédictive récupérée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/parameter-trends:
    get:
      operationId: BusinessStatsController_getParameterTrends
      summary: Obtenir les tendances des paramètres
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/performance-metrics:
    get:
      operationId: BusinessStatsController_getPerformanceMetrics
      summary: Obtenir les métriques de performance
      parameters:
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
        - name: period
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/client-analysis:
    get:
      operationId: BusinessStatsController_getClientAnalysis
      summary: Obtenir l'analyse des clients
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/lab-analysis:
    get:
      operationId: BusinessStatsController_getLabAnalysis
      summary: Obtenir l'analyse des laboratoires
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/alerts:
    get:
      operationId: BusinessStatsController_getActiveAlerts
      summary: Obtenir les alertes actives
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/alerts/{alertId}/resolve:
    put:
      operationId: BusinessStatsController_resolveAlert
      summary: Résoudre une alerte
      parameters:
        - name: alertId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/generate-manual-stats:
    post:
      operationId: BusinessStatsController_generateManualStats
      summary: Générer manuellement les statistiques
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/export/{type}:
    get:
      operationId: BusinessStatsController_exportStats
      summary: Exporter les données statistiques
      parameters:
        - name: type
          required: true
          in: path
          schema:
            type: string
        - name: format
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/kpi-summary:
    get:
      operationId: BusinessStatsController_getKPISummary
      summary: Obtenir un résumé des KPI principaux
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/trends-comparison:
    get:
      operationId: BusinessStatsController_getTrendsComparison
      summary: Comparer les tendances sur plusieurs périodes
      parameters:
        - name: periods
          required: true
          in: query
          schema:
            type: number
        - name: metric
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/forecast/{months}:
    get:
      operationId: BusinessStatsController_getForecast
      summary: Obtenir les prévisions pour les prochains mois
      parameters:
        - name: months
          required: true
          in: path
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/facture-stats:
    get:
      operationId: BusinessStatsController_getFactureStats
      summary: Obtenir les statistiques basées sur les factures
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Statistiques des factures récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/enhanced-lab-analysis:
    get:
      operationId: BusinessStatsController_getEnhancedLabAnalysis
      summary: Analyse détaillée des laboratoires basée sur FactureLaboratoryData
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Analyse détaillée des laboratoires récupérée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/business-stats/recalculate-all:
    post:
      operationId: BusinessStatsController_recalculateAllStats
      summary: Recalculer toutes les statistiques
      parameters:
        - name: period
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
        - name: day
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: Statistiques recalculées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Business Analytics
        - Business Analytics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me:
    get:
      operationId: CommercialCatalogController_getMine
      summary: Consulter mon catalogue commercial
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/auto-rule:
    put:
      operationId: CommercialCatalogController_upsertAutoRule
      summary: Configurer la règle auto (nouveaux clients)
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertAutoRuleDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/check-conflict:
    get:
      operationId: CommercialCatalogController_checkConflict
      summary: Vérifier si un client est déjà dans un catalogue
      parameters:
        - name: customerId
          required: false
          in: query
          schema:
            type: string
        - name: customerCompanyId
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/entries:
    post:
      operationId: CommercialCatalogController_addEntry
      summary: Ajouter un client à mon catalogue
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCatalogEntryDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/entries/bulk:
    post:
      operationId: CommercialCatalogController_addEntriesBulk
      summary: Ajouter plusieurs clients à mon catalogue
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCatalogEntriesBulkDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/entries/{id}/prefs:
    patch:
      operationId: CommercialCatalogController_updatePrefs
      summary: Mettre à jour les préférences de notification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCatalogEntryPrefsDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/me/entries/{id}:
    delete:
      operationId: CommercialCatalogController_removeEntry
      summary: Retirer un client de mon catalogue
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}:
    get:
      operationId: CommercialCatalogController_getForCommercial
      summary: Consulter le catalogue d'un commercial (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/auto-rule:
    put:
      operationId: CommercialCatalogController_upsertAutoRuleForCommercial
      summary: Configurer la règle auto d'un commercial (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertAutoRuleDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/check-conflict:
    get:
      operationId: CommercialCatalogController_checkConflictForCommercial
      summary: Vérifier conflit pour le catalogue cible (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
        - name: customerId
          required: false
          in: query
          schema:
            type: string
        - name: customerCompanyId
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/entries:
    post:
      operationId: CommercialCatalogController_addEntryForCommercial
      summary: Ajouter un client au catalogue d'un commercial (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCatalogEntryDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/entries/bulk:
    post:
      operationId: CommercialCatalogController_addEntriesBulkForCommercial
      summary: Ajouter plusieurs clients au catalogue d'un commercial (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCatalogEntriesBulkDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/entries/{id}/prefs:
    patch:
      operationId: CommercialCatalogController_updatePrefsForCommercial
      summary: Mettre à jour les prefs d'une entrée (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCatalogEntryPrefsDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/commercial-catalog/for/{commercialUserId}/entries/{id}:
    delete:
      operationId: CommercialCatalogController_removeEntryForCommercial
      summary: Retirer un client du catalogue d'un commercial (admin)
      parameters:
        - name: commercialUserId
          required: true
          in: path
          schema:
            type: string
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/referential:
    get:
      operationId: BillabilityController_getReferential
      summary: Référentiel des statuts, motifs et types de contre-analyse
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/non-billed:
    get:
      operationId: BillabilityController_listNonBilled
      summary: >-
        Liste des ADV non facturées, avec ancienneté, motif et décideur —
        l’écran de qualification
      parameters:
        - name: status
          required: false
          in: query
          schema:
            enum:
              - A_FACTURER
              - EN_STAND_BY
              - NON_FACTURABLE
              - ANNULEE
            type: string
        - name: reasonCode
          required: false
          in: query
          schema:
            enum:
              - ANNULATION_CLIENT
              - CONTRE_ANALYSE_INTERLABO
              - CONTRE_ANALYSE_LITIGE
              - CLIENT_EXEMPTE_DE_PAIEMENT
              - ACCORD_COMMERCIAL
              - GESTE_COMMERCIAL
              - ECHANTILLON_NON_CONFORME
              - ERREUR_SAISIE
              - DOUBLON
              - ANALYSE_INTERNE
              - ESSAI_INTERLABORATOIRE
              - EN_ATTENTE_ADRESSE_FACTURATION
              - AUTRE
            type: string
        - name: withoutReason
          required: false
          in: query
          description: ADV non facturées et sans motif renseigné
          schema:
            type: boolean
        - name: customerId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: startDate
          required: false
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          schema:
            example: '2026-12-31'
            type: string
        - name: minAgeDays
          required: false
          in: query
          description: Ancienneté minimale en jours
          schema:
            example: 30
            type: number
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/non-billed/summary:
    get:
      operationId: BillabilityController_summarizeNonBilled
      summary: Synthèse des motifs des ADV non facturées
      parameters:
        - name: status
          required: false
          in: query
          schema:
            enum:
              - A_FACTURER
              - EN_STAND_BY
              - NON_FACTURABLE
              - ANNULEE
            type: string
        - name: reasonCode
          required: false
          in: query
          schema:
            enum:
              - ANNULATION_CLIENT
              - CONTRE_ANALYSE_INTERLABO
              - CONTRE_ANALYSE_LITIGE
              - CLIENT_EXEMPTE_DE_PAIEMENT
              - ACCORD_COMMERCIAL
              - GESTE_COMMERCIAL
              - ECHANTILLON_NON_CONFORME
              - ERREUR_SAISIE
              - DOUBLON
              - ANALYSE_INTERNE
              - ESSAI_INTERLABORATOIRE
              - EN_ATTENTE_ADRESSE_FACTURATION
              - AUTRE
            type: string
        - name: withoutReason
          required: false
          in: query
          description: ADV non facturées et sans motif renseigné
          schema:
            type: boolean
        - name: customerId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: startDate
          required: false
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          schema:
            example: '2026-12-31'
            type: string
        - name: minAgeDays
          required: false
          in: query
          description: Ancienneté minimale en jours
          schema:
            example: 30
            type: number
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/{advId}:
    patch:
      operationId: BillabilityController_update
      summary: Qualifier la facturabilité d’une ADV
      parameters:
        - name: advId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBillabilityDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/{advId}/cancel:
    post:
      operationId: BillabilityController_cancel
      summary: >-
        Annuler la seule ligne ADV (affaire commerciale) sans toucher au
        workflow labo
      parameters:
        - name: advId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelAdvLineDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/{advId}/reactivate:
    post:
      operationId: BillabilityController_reactivate
      summary: Remettre une ADV en « à facturer »
      parameters:
        - name: advId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReactivateBillabilityDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/bulk:
    post:
      operationId: BillabilityController_bulk
      summary: Qualification de masse — purge du stock historique
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkBillabilityDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/billability/recompute:
    post:
      operationId: BillabilityController_recompute
      summary: Rejouer les règles de facturabilité sur un périmètre
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURABILITÉ'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/counter-analysis/candidates:
    get:
      operationId: CounterAnalysisController_candidates
      summary: Recherche d’une proforma d’origine par son numéro pour un litige
      parameters:
        - name: proformaId
          required: true
          in: query
          schema:
            type: string
        - name: customerId
          required: true
          in: query
          schema:
            type: string
        - name: companyId
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: CONTRE-ANALYSE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/counter-analysis/proforma/{proformaId}:
    get:
      operationId: CounterAnalysisController_tree
      summary: Arbre origine ↔ contre-analyses d’une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: CONTRE-ANALYSE'
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: CounterAnalysisController_set
      summary: Déclarer une proforma comme contre-analyse — le montant est conservé
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetCounterAnalysisDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: CONTRE-ANALYSE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/counter-analysis/proforma/{proformaId}/unset:
    post:
      operationId: CounterAnalysisController_unset
      summary: Retirer la qualification de contre-analyse
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnsetCounterAnalysisDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: CONTRE-ANALYSE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions/referential:
    get:
      operationId: ExemptionController_getReferential
      summary: Référentiel des portées, durées et motifs d’exemption
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions:
    get:
      operationId: ExemptionController_list
      summary: Lister les exemptions
      parameters:
        - name: scope
          required: false
          in: query
          schema:
            enum:
              - CLIENT
              - PROFORMA_ADV
            type: string
        - name: reasonCode
          required: false
          in: query
          schema:
            enum:
              - ACCORD_COMMERCIAL
              - CONVENTION_PARTENARIAT
              - CLIENT_INSTITUTIONNEL
              - PRISE_EN_CHARGE_INTERNE
              - GESTE_COMMERCIAL
              - GRATUITE_PROMOTIONNELLE
              - AUTRE
            type: string
        - name: isActive
          required: false
          in: query
          schema:
            type: boolean
        - name: pendingApproval
          required: false
          in: query
          description: Exemptions proposées, en attente d’approbation
          schema:
            type: boolean
        - name: customerId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: ExemptionController_create
      summary: Proposer une exemption — elle ne prend effet qu’après approbation
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateExemptionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions/resolve:
    get:
      operationId: ExemptionController_resolve
      summary: >-
        Ce client est-il exempté à une date donnée ? Renvoie l’exemption
        applicable ou null
      parameters:
        - name: customerId
          required: true
          in: query
          schema:
            type: string
        - name: companyId
          required: true
          in: query
          schema:
            type: string
        - name: at
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions/{id}/impact:
    get:
      operationId: ExemptionController_impact
      summary: 'Prévisualiser l’impact : quelles ADV et quels montants seraient touchés'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions/{id}/approve:
    post:
      operationId: ExemptionController_approve
      summary: >-
        Approuver — active l’exemption et requalifie les ADV concernées. Le
        proposeur ne peut pas approuver.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/exemptions/{id}/revoke:
    post:
      operationId: ExemptionController_revoke
      summary: Révoquer — les ADV non facturées redeviennent facturables
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RevokeExemptionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: EXEMPTIONS DE PAIEMENT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations/referential:
    get:
      operationId: CancellationController_getReferential
      summary: Référentiel des portées, motifs et origines d’annulation
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations:
    get:
      operationId: CancellationController_list
      summary: Lister les annulations
      parameters:
        - name: reasonCode
          required: false
          in: query
          schema:
            enum:
              - DEMANDE_CLIENT
              - ECHANTILLON_NON_CONFORME
              - ECHANTILLON_NON_RECU
              - ERREUR_SAISIE
              - DOUBLON
              - DELAI_DEPASSE
              - CAPACITE_INDISPONIBLE
              - LITIGE
              - AUTRE
            type: string
        - name: origin
          required: false
          in: query
          schema:
            enum:
              - CLIENT
              - COMMERCIAL
              - LABORATOIRE
              - ADV
              - QUALITE
            type: string
        - name: scope
          required: false
          in: query
          schema:
            enum:
              - TOTALE
              - BORDEREAU
              - RAPPORT
            type: string
        - name: restoredOnly
          required: false
          in: query
          description: Annulations restaurées uniquement
          schema:
            type: boolean
        - name: startDate
          required: false
          in: query
          schema:
            type: string
        - name: endDate
          required: false
          in: query
          schema:
            type: string
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: CancellationController_cancel
      summary: >-
        Appliquer la cascade : rapports → demandes → bordereau → ADV → proforma.
        Motif obligatoire.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelChainDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations/{id}:
    get:
      operationId: CancellationController_findOne
      summary: Détail d’une annulation avec toutes ses cibles
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations/proforma/{proformaId}:
    get:
      operationId: CancellationController_history
      summary: Historique des annulations d’une proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations/simulate:
    post:
      operationId: CancellationController_simulate
      summary: >-
        Simuler : liste ce qui sera annulé et les blocages détectés, sans rien
        écrire
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulateCancellationDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/cancellations/{id}/restore:
    post:
      operationId: CancellationController_restore
      summary: 'Restaurer : rejoue les statuts d’origine. Motif obligatoire.'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestoreCancellationDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ANNULATION EN CASCADE'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/referential:
    get:
      operationId: PaymentController_getReferential
      summary: Référentiel des méthodes, statuts et types de preuve
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/outstanding:
    get:
      operationId: PaymentController_outstanding
      summary: >-
        Reste à recouvrer d’un client : factures et ADV imputables, plus son
        solde
      parameters:
        - name: customerId
          required: true
          in: query
          schema:
            type: string
        - name: companyId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/legacy-reconciliation:
    get:
      operationId: PaymentController_legacyReconciliation
      summary: >-
        Stock des encaissements saisis avant le ledger ADV, à reprendre ou
        compléter
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/legacy-reconciliation/backfill:
    post:
      operationId: PaymentController_backfillLegacy
      summary: >-
        Créer les écritures ledger correspondant aux anciens paiements marqués
        payés
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments:
    get:
      operationId: PaymentController_list
      summary: Lister les encaissements
      parameters:
        - name: status
          required: false
          in: query
          schema:
            enum:
              - BROUILLON
              - ENREGISTRE
              - REJETE
              - ANNULE
            type: string
        - name: view
          required: false
          in: query
          description: >-
            recorded = enregistrés hors écritures d’annulation ; drafts =
            brouillons ; cancelled = annulés / rejetés et leurs écritures miroir
          schema:
            enum:
              - recorded
              - drafts
              - cancelled
            type: string
        - name: method
          required: false
          in: query
          schema:
            enum:
              - ESPECES
              - CHEQUE
              - VIREMENT
              - MOBILE_MONEY
              - TRAITE
              - CARTE
              - COMPENSATION
              - WALLET
              - NON_RENSEIGNE
              - AUTRE
            type: string
        - name: customerId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: startDate
          required: false
          in: query
          schema:
            type: string
        - name: endDate
          required: false
          in: query
          schema:
            type: string
        - name: search
          required: false
          in: query
          description: >-
            Recherche : référence d’encaissement, client, facture, proforma ou
            n° de preuve
          schema:
            type: string
        - name: withoutProof
          required: false
          in: query
          description: Encaissements sans aucune preuve saisie
          schema:
            type: boolean
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: PaymentController_create
      summary: >-
        Enregistrer un versement : moyens de paiement, preuves, imputations,
        reliquat au wallet
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}:
    get:
      operationId: PaymentController_findOne
      summary: 'Détail d’un encaissement : moyens, preuves, imputations, wallet'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: PaymentController_discardDraft
      summary: Supprimer un encaissement encore en brouillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/simulate:
    post:
      operationId: PaymentController_simulate
      summary: >-
        Simuler la ventilation : reliquat, financement wallet, statuts
        résultants. Aucune écriture.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulatePaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/cancel-bulk:
    post:
      operationId: PaymentController_cancelMany
      summary: Annuler plusieurs encaissements enregistrés. Motif obligatoire.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkReversePaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/discard-bulk:
    post:
      operationId: PaymentController_discardManyDrafts
      summary: Supprimer plusieurs encaissements encore en brouillon
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDiscardDraftsDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}/apply:
    post:
      operationId: PaymentController_apply
      summary: Appliquer un encaissement resté en brouillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplyPaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}/complete-legacy:
    post:
      operationId: PaymentController_completeLegacy
      summary: Compléter le moyen et la preuve d’un encaissement historique
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompleteLegacyPaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}/cancel:
    post:
      operationId: PaymentController_cancel
      summary: Annuler un encaissement enregistré. Motif obligatoire.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReversePaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}/reject:
    post:
      operationId: PaymentController_reject
      summary: 'Chèque ou virement rejeté : contre-passation, la créance se ré-ouvre'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReversePaymentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/payments/{id}/tenders/{tenderId}/proofs:
    post:
      operationId: PaymentController_addProof
      summary: Ajouter une preuve à un moyen de paiement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: tenderId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddProofDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: ENCAISSEMENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets:
    get:
      operationId: WalletController_list
      summary: Clients avec un solde non nul — l’argent non encore affecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/reconcile:
    get:
      operationId: WalletController_reconcile
      summary: 'Contrôle : les soldes concordent-ils avec leurs mouvements ?'
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/resolve:
    get:
      operationId: WalletController_resolve
      summary: Résoudre le solde d’un client
      parameters:
        - name: customerId
          required: true
          in: query
          schema:
            type: string
        - name: companyId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/{id}:
    get:
      operationId: WalletController_findOne
      summary: 'Relevé de compte : solde et mouvements paginés'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: pageSize
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/{id}/impute:
    post:
      operationId: WalletController_impute
      summary: Consommer le solde sur des factures ou des ADV
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImputeWalletDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/{id}/adjust:
    post:
      operationId: WalletController_adjust
      summary: Ajustement manuel du solde. Motif obligatoire, journalisé.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletAdjustmentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/wallets/{id}/refund:
    post:
      operationId: WalletController_refund
      summary: 'Remboursement : sortie d’argent réelle. Motif et preuve requis.'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletRefundDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: SOLDES CLIENTS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/eligible:
    get:
      operationId: ContractInvoiceController_eligible
      summary: >-
        Proformas sélectionnables pour un client sur une période. Exige
        seulement un contrat enregistré dans LIMS.
      parameters:
        - name: companyId
          required: true
          in: query
          schema:
            format: uuid
            type: string
        - name: periodStart
          required: true
          in: query
          schema:
            example: '2026-06-01'
            type: string
        - name: periodEnd
          required: true
          in: query
          schema:
            example: '2026-06-30'
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/include-advs:
    post:
      operationId: ContractInvoiceController_includeAdvs
      summary: >-
        Déclarer que des ADV entrent dans le contrat de leur client (clients
        multiples acceptés)
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/exclude-advs:
    post:
      operationId: ContractInvoiceController_excludeAdvs
      summary: >-
        Retirer la déclaration d’inclusion : les ADV repartent en facturation
        standard
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/pending-advs:
    get:
      operationId: ContractInvoiceController_pendingAdvs
      summary: >-
        Lister les ADV directement rattachées à un contrat et non encore
        facturées
      parameters:
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices:
    get:
      operationId: ContractInvoiceController_list
      summary: Lister les factures contrat, avec l’écart cumulé LIMS / facturé
      parameters:
        - name: companyId
          required: false
          in: query
          schema:
            format: uuid
            type: string
        - name: status
          required: false
          in: query
          schema:
            enum:
              - VALIDEE
              - ANNULEE
            type: string
        - name: periodStart
          required: false
          in: query
          schema:
            type: string
        - name: periodEnd
          required: false
          in: query
          schema:
            type: string
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: pageSize
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: ContractInvoiceController_create
      summary: >-
        Émettre la facture contrat du montant réellement facturé, avec son
        dossier justificatif
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContractInvoiceDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/{id}:
    get:
      operationId: ContractInvoiceController_findOne
      summary: 'Détail d’un dossier : lignes, contrats couverts, facture, encaissé'
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/contract-invoices/{id}/cancel:
    post:
      operationId: ContractInvoiceController_cancel
      summary: >-
        Annuler le dossier et sa facture, libérant les proformas. Refusé si des
        encaissements subsistent.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelContractInvoiceDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: FACTURATION CONTRAT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/summary:
    get:
      operationId: AdvKpiController_summary
      summary: >-
        Synthèse : CA facturé, encaissé, reste à recouvrer, pipeline, perdu,
        écart contrat, trésorerie
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/summary/export:
    get:
      operationId: AdvKpiController_exportSummary
      summary: Exporter la synthèse ADV depuis le même snapshot que les KPI affichés
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/non-billed:
    get:
      operationId: AdvKpiController_nonBilled
      summary: >-
        Non facturé ventilé par motif, avec le décideur — la réponse au «
        pourquoi ce n’est pas facturé »
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/aging:
    get:
      operationId: AdvKpiController_aging
      summary: Balance âgée des créances ouvertes, par tranche et par client
      parameters:
        - name: asOf
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/payment-methods:
    get:
      operationId: AdvKpiController_byMethod
      summary: Répartition des encaissements par méthode, et preuves manquantes
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/kpi/reconciliation:
    get:
      operationId: AdvKpiController_reconciliation
      summary: >-
        Contrôle d’intégrité : les montants dérivés concordent-ils avec le
        ledger ?
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: INDICATEURS'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/audit:
    get:
      operationId: AdvAuditController_byEntity
      summary: Journal d’une entité, du plus récent au plus ancien
      parameters:
        - name: entity
          required: true
          in: query
          schema:
            type: string
        - name: entityId
          required: true
          in: query
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: JOURNAL PROBANT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/audit/actor/{actorId}:
    get:
      operationId: AdvAuditController_byActor
      summary: >-
        Tout ce qu’une personne a fait sur une période. Accès restreint, et
        lui-même journalisé.
      parameters:
        - name: actorId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: JOURNAL PROBANT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/adv/audit/verify-chain:
    get:
      operationId: AdvAuditController_verifyChain
      summary: Vérifier l’intégrité du chaînage par empreinte
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - 'MODULE ADV v2: JOURNAL PROBANT'
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider/one:
    get:
      operationId: ServiceProviderController_findAll
      summary: Récuperer tous les fournisseurs de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Super Admin global
  /api/v1/service-provider/{id}:
    get:
      operationId: ServiceProviderController_findOne
      summary: Récuperer un fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
    put:
      operationId: ServiceProviderController_update
      summary: Mettre à jour un fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateServiceProviderDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/global:
    get:
      operationId: ServiceProviderController_getGlobalStats
      summary: Statistiques globales (KPIs généraux)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/proformas:
    get:
      operationId: ServiceProviderController_getProformasStats
      summary: Statistiques des proformas
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/demandes:
    get:
      operationId: ServiceProviderController_getDemandesStats
      summary: Statistiques des demandes d'analyse
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/rapports:
    get:
      operationId: ServiceProviderController_getRapportsStats
      summary: Statistiques des rapports d'analyse
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/bordereaux:
    get:
      operationId: ServiceProviderController_getBordereauxStats
      summary: Statistiques des bordereaux
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/echantillons:
    get:
      operationId: ServiceProviderController_getEchantillonsStats
      summary: Statistiques des échantillons
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/adv:
    get:
      operationId: ServiceProviderController_getADVStats
      summary: Statistiques ADV (facturation)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/top-natures:
    get:
      operationId: ServiceProviderController_getTopNatures
      summary: Top 15 des natures d'échantillons
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/top-clients:
    get:
      operationId: ServiceProviderController_getTopClients
      summary: Top 15 des clients par revenus
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/top-parameters:
    get:
      operationId: ServiceProviderController_getTopParameters
      summary: Top 30 des paramètres analysés
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/top-clients-adv:
    get:
      operationId: ServiceProviderController_getTopClientsADV
      summary: Top 15 des clients par nombre d'ADV et montant (tous statuts)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/dashboard:
    get:
      operationId: ServiceProviderController_getDashboardStats
      summary: Récupérer toutes les statistiques du tableau de bord en une requête
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/{year}:
    get:
      operationId: ServiceProviderController_getStats
      summary: Récupérer les statistiques d un fournisseur de service  par année
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider/stats/export/excel:
    get:
      operationId: ServiceProviderController_exportStatsToExcel
      summary: Exporter les statistiques du dashboard en Excel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-provider-user/add-new:
    post:
      operationId: ServiceProviderUserController_addProviderUser
      summary: Ajouter un utilisateur à un fournisseur de service
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateProviderUserDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users:
    get:
      operationId: ServiceProviderUserController_getProviderUsers
      summary: Récuperer tous les utilisateurs d'un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}:
    get:
      operationId: ServiceProviderUserController_getProviderUser
      summary: Récuperer un utilisateur d'un fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Utilisateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ServiceProviderUserController_updateProviderUser
      summary: Mettre à jour un utilisateur de fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateProviderUserDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Utilisateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ServiceProviderUserController_removeProviderUser
      summary: Désactiver un utilisateur (soft — ne peut plus se connecter)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/laboratory-users:
    get:
      operationId: ServiceProviderUserController_getServiceProviderLabUsers
      summary: >-
        Récuperer les utilisateurs d'un fournisseur de service qui sont affectés
        à un laboratoire
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Utilisateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/update-email-pass:
    put:
      operationId: ServiceProviderUserController_updateEmailAndPass
      summary: Mettre à jour l email et le mot de passe d un utilisateur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/change-roles:
    put:
      operationId: ServiceProviderUserController_changeRoles
      summary: Changer les rôles d un utilisateur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/change-services:
    put:
      operationId: ServiceProviderUserController_changeServices
      summary: Changer les services métier d'un utilisateur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeUserServicesDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/set-preleveurs:
    post:
      operationId: ServiceProviderUserController_setUsersAsPrelveurs
      summary: Définir les utilisateurs comme préleveurs
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/set-responsable-preleveur:
    put:
      operationId: ServiceProviderUserController_setAsResponsablePreleveur
      summary: Définir un utilisateur comme responsable préleveur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/remove-responsable-preleveur:
    delete:
      operationId: ServiceProviderUserController_removeResponsablePreleveur
      summary: Supprimer le rôle de responsable préleveur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/remove-preleveur-role:
    delete:
      operationId: ServiceProviderUserController_removePreleveurRole
      summary: Supprimer le rôle de préleveur
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/set-reclamation-manager:
    put:
      operationId: ServiceProviderUserController_setAsReclamationManager
      summary: Définir un utilisateur comme responsable des réclamations
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/remove-reclamation-manager:
    delete:
      operationId: ServiceProviderUserController_removeReclamationManager
      summary: Supprimer le rôle de responsable des réclamations
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/{id}/reactivate:
    put:
      operationId: ServiceProviderUserController_reactivateProviderUser
      summary: Réactiver un utilisateur désactivé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/users/force/{id}:
    delete:
      operationId: ServiceProviderUserController_forceRemoveProviderUser
      summary: Supprimer définitivement un utilisateur de fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/import:
    post:
      operationId: ServiceProviderUserController_addMultipleProviderUsers
      summary: Ajouter plusieurs utilisateurs à un fournisseur de service
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FileDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/export:
    get:
      operationId: ServiceProviderUserController_exportProviderUsers
      summary: Exporter tous les utilisateurs d un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-provider-user/notify-all-users:
    post:
      operationId: ServiceProviderUserController_notifyAllProviderUsers
      summary: Notifier tous les utilisateurs d un fournisseur de service
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer-company/add-company:
    post:
      operationId: ServiceCustomerCompanyController_addProviderCompany
      summary: Ajouter une entreprise cliente à un fournisseur de service
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateCustomerCompanyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/get-all:
    get:
      operationId: ServiceCustomerCompanyController_getProviderCompanies
      summary: Récuperer toutes les entreprises clientes d un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/one/{id}:
    get:
      operationId: ServiceCustomerCompanyController_getProviderCompany
      summary: Récuperer une entreprise cliente d'un fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/update/{id}:
    put:
      operationId: ServiceCustomerCompanyController_updateProviderCompany
      summary: Mettre à jour une entreprise cliente de fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateCustomerCompanyDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/set-as-test/{id}:
    post:
      operationId: ServiceCustomerCompanyController_setAsTestCompany
      summary: Définir une entreprise cliente comme entreprise de test
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/delete/{id}:
    delete:
      operationId: ServiceCustomerCompanyController_forceRemoveProviderCompany
      summary: Supprimer complètement une entreprise cliente de fournisseur de service
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/all/delete/bulk:
    delete:
      operationId: ServiceCustomerCompanyController_removeBulkProviderCompanies
      summary: Supprimer complètement une entreprise cliente de fournisseur de service
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/export:
    get:
      operationId: ServiceCustomerCompanyController_exportProviderCompanies
      summary: Exporter toutes les entreprises clientes d un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/getall/{companyId}/employees:
    get:
      operationId: ServiceCustomerCompanyController_exportProviderCompaniesEmployees
      summary: >-
        Exporter les employés d une entreprise cliente d un fournisseur de
        service
      parameters:
        - name: companyId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer-company/export-all-customers:
    get:
      operationId: ServiceCustomerCompanyController_exportAllCustomersToExcel
      summary: >-
        Exporter tous les clients (entreprises + particuliers) en Excel avec
        design avancé
      parameters:
        - name: createdFrom
          required: false
          in: query
          description: Créés à partir de cette date (ISO 8601)
          schema:
            example: '2025-01-01'
            type: string
        - name: createdTo
          required: false
          in: query
          description: Créés jusqu'à cette date (ISO 8601, inclus)
          schema:
            example: '2025-12-31'
            type: string
        - name: hasProforma
          required: false
          in: query
          description: Ne retenir que les clients ayant au moins une proforma
          schema:
            type: boolean
        - name: proformaPreset
          required: false
          in: query
          description: Preset de statut appliqué au filtre proforma
          schema:
            enum:
              - VALIDATED
              - PENDING
              - REFUSED
            type: string
        - name: hasSentReport
          required: false
          in: query
          description: Ne retenir que les clients ayant au moins un rapport envoyé
          schema:
            type: boolean
        - name: hasAnyEchantillon
          required: false
          in: query
          description: >-
            Ne retenir que les clients ayant au moins un échantillonItem
            enregistré (quel que soit le statut du bordereau)
          schema:
            type: boolean
        - name: logic
          required: false
          in: query
          description: >-
            Logique entre les critères d'activité (proforma / rapport /
            échantillon)
          schema:
            default: OR
            enum:
              - AND
              - OR
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service-customer/add-new:
    post:
      operationId: ServiceProviderCustomerController_addProviderCompanyUser
      summary: Ajouter un utilisateur à une entreprise cliente ou un client individuel
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateProviderCustomerDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/import:
    post:
      operationId: ServiceProviderCustomerController_importProviderCompanyUsers
      summary: >-
        Importer des utilisateurs à une entreprise cliente ou un client
        individuel
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FileDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/convert-to-company/{customerId}:
    put:
      operationId: ServiceProviderCustomerController_convertToCompany
      summary: Convertir un client individuel en entreprise cliente
      parameters:
        - name: customerId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConvertCustomerToCompanyDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/update/{id}:
    put:
      operationId: ServiceProviderCustomerController_updateProviderCompanyUser
      summary: >-
        Mettre à jour un utilisateur d"une entreprise cliente ou un client
        individuel
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateProviderCustomerDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/set-as-test/{id}:
    post:
      operationId: ServiceProviderCustomerController_setAsTestCustomer
      summary: Définir un client individuel comme client de test
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/customers/individual:
    get:
      operationId: ServiceProviderCustomerController_getIndividualCustomer
      summary: Récupérer tous les clients qui n'ont pas d'entreprise cliente
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/customers/all:
    get:
      operationId: ServiceProviderCustomerController_getAllCustomers
      summary: >-
        Récupérer tous les clients (employée d'entreprise cliente et client
        individuel)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/chart-data-for/{year}:
    get:
      operationId: ServiceProviderCustomerController_getChartData
      summary: Récupérer toutes les statistiques des clients
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/export:
    get:
      operationId: ServiceProviderCustomerController_exportProviderCompanies
      summary: Exporter toutes les clientes d un fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/delete-user/{id}:
    delete:
      operationId: ServiceProviderCustomerController_deleteCustomer
      summary: Supprimer complètement un client
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/one/{id}:
    get:
      operationId: ServiceProviderCustomerController_findOne
      summary: Récupérer un client
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/quality-insights/{clientId}:
    get:
      operationId: ServiceProviderCustomerController_getQualityInsights
      summary: Évolution qualité des analyses par nature d'échantillon pour un client
      parameters:
        - name: clientId
          required: true
          in: path
          schema:
            type: string
        - name: customerType
          required: true
          in: query
          description: Type de client (INDIVIDUAL ou COMPANY)
          schema:
            enum:
              - INDIVIDUAL
              - COMPANY
            type: string
        - name: months
          required: false
          in: query
          description: 'Nombre de mois à analyser (défaut: 12)'
          schema:
            default: 12
            type: number
        - name: from
          required: false
          in: query
          description: Date de début personnalisée au format YYYY-MM-DD
          schema:
            example: '2025-01-01'
            type: string
        - name: to
          required: false
          in: query
          description: Date de fin personnalisée au format YYYY-MM-DD
          schema:
            example: '2025-03-31'
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service-customer/quality-insights/{clientId}/export:
    get:
      operationId: ServiceProviderCustomerController_exportQualityInsights
      summary: Exporter le bulletin qualité client en Excel (graphiques + données)
      parameters:
        - name: clientId
          required: true
          in: path
          schema:
            type: string
        - name: customerType
          required: true
          in: query
          description: Type de client (INDIVIDUAL ou COMPANY)
          schema:
            enum:
              - INDIVIDUAL
              - COMPANY
            type: string
        - name: months
          required: false
          in: query
          description: 'Nombre de mois à analyser (défaut: 12)'
          schema:
            default: 12
            type: number
        - name: from
          required: false
          in: query
          description: Date de début personnalisée au format YYYY-MM-DD
          schema:
            example: '2025-01-01'
            type: string
        - name: to
          required: false
          in: query
          description: Date de fin personnalisée au format YYYY-MM-DD
          schema:
            example: '2025-03-31'
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Fournisseur de service
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/plan/subscription/activate:
    post:
      operationId: SubscriptionController_create
      summary: Souscire un abonnement
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubscriptionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Souscription de plan
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/plan/subscription/all/this:
    get:
      operationId: SubscriptionController_findCompanySubscription
      summary: Récupérer les abonnements du fournisseur de service
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Souscription de plan
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/plan/subscription/{id}:
    get:
      operationId: SubscriptionController_findOne
      summary: Récupérer un abonnement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Souscription de plan
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: SubscriptionController_remove
      summary: Annuler un abonnement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Souscription de plan
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/plan/subscription/{id}/change-plan/{plan_id}:
    put:
      operationId: SubscriptionController_update
      summary: Modifier un abonnement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: plan_id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Souscription de plan
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/roles:
    get:
      operationId: RolesController_findAll
      summary: Récupérer tous les rôles
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Roles
  /api/v1/roles/permissions:
    post:
      operationId: RolesController_findOne
      summary: Récupérer les permissions d'un rôle
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRoleDto'
      responses:
        '201':
          description: ''
      tags:
        - Roles
  /api/v1/roles/add-roles:
    post:
      operationId: RolesController_addRolesToUser
      summary: Ajouter des rôles à un utilisateur
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddRolesToUserDto'
      responses:
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Roles
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/roles/bulk-add-roles:
    post:
      operationId: RolesController_bulkAddRolesToUsers
      summary: Ajouter des rôles à des utilisateurs
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BullkAddRoleDto'
      responses:
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Roles
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/roles/remove-roles:
    post:
      operationId: RolesController_removeRolesToUser
      summary: Supprimer des rôles à un utilisateur
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Roles
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/create:
    post:
      operationId: ParameterNormController_create
      summary: Créer une norme de paramètre
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateParameterNormDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/create/bulk:
    post:
      operationId: ParameterNormController_createBulk
      summary: Créer plusieurs normes de paramètres
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateParameterNormDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/parameter/{parameterId}:
    get:
      operationId: ParameterNormController_findAllByParameterId
      summary: Récupérer les normes de paramètres
      parameters:
        - name: parameterId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ParameterNormController_removeByParameterId
      summary: Supprimer les normes de paramètres par paramètreId
      parameters:
        - name: parameterId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/{id}/usage:
    get:
      operationId: ParameterNormController_getUsage
      summary: Usage d'une norme (proformas, demandes, bordereaux)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/{id}:
    get:
      operationId: ParameterNormController_findOne
      summary: Récupérer une normes de paramètres
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ParameterNormController_update
      summary: Mettre à jour une norme de paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateParameterNormDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ParameterNormController_remove
      summary: Supprimer une norme de paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/parameter-norm/delete/bulk:
    put:
      operationId: ParameterNormController_removeMany
      summary: Supprimer plusieurs normes de paramètres
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulKDeleteBody'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Normes de paramètres
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/create:
    post:
      operationId: PrelevementController_create
      summary: Créer un nouveau prélèvement
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePrelevementDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/this:
    get:
      operationId: PrelevementController_findAll
      summary: >-
        Récupérer les prélèvements du fournisseur de service de l'utilisateur
        actuel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/paged:
    get:
      operationId: PrelevementController_findPaged
      summary: Liste paginée des prélèvements (missions)
      parameters:
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: limit
          required: false
          in: query
          schema:
            default: 15
            type: number
        - name: status
          required: false
          in: query
          description: 'Statut affiché: EN_ATTENTE | EN_COURS | TERMINE | REJETE'
          schema:
            type: string
        - name: search
          required: false
          in: query
          description: Recherche référence / lieu / observation
          schema:
            type: string
        - name: dateFrom
          required: false
          in: query
          schema:
            type: string
        - name: dateTo
          required: false
          in: query
          schema:
            type: string
        - name: preleveurId
          required: false
          in: query
          description: Filtrer par préleveur (userId)
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/paged-by-technician:
    get:
      operationId: PrelevementController_findPagedByTechnician
      summary: Liste paginée des missions du technicien connecté
      parameters:
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: limit
          required: false
          in: query
          schema:
            default: 15
            type: number
        - name: status
          required: false
          in: query
          description: 'Statut affiché: EN_ATTENTE | EN_COURS | TERMINE | REJETE'
          schema:
            type: string
        - name: search
          required: false
          in: query
          description: Recherche référence / lieu / observation
          schema:
            type: string
        - name: dateFrom
          required: false
          in: query
          schema:
            type: string
        - name: dateTo
          required: false
          in: query
          schema:
            type: string
        - name: preleveurId
          required: false
          in: query
          description: Filtrer par préleveur (userId)
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/this-provider:
    get:
      operationId: PrelevementController_findByProvider
      summary: >-
        Récupérer les prélèvements du fournisseur de service de l'utilisateur
        actuel
      parameters:
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/this-provider-by-reference:
    get:
      operationId: PrelevementController_findByReference
      summary: Récupérer un prélèvement par référence
      parameters:
        - name: reference
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/this-provider-echantillonage:
    get:
      operationId: PrelevementController_getReadyForEchantillonage
      summary: >-
        Récupérer les prélèvements du fournisseur de service de l'utilisateur
        actuel
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/one/{id}:
    get:
      operationId: PrelevementController_findOne
      summary: Récupérer un prélèvement par son id
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/without-rapports:
    get:
      operationId: PrelevementController_findWithoutRapport
      summary: Récuperer les prelevements sans rapports
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/by-customer:
    get:
      operationId: PrelevementController_findByCustomer
      summary: Récupérer les prélèvements par client
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/update/{id}:
    put:
      operationId: PrelevementController_update
      summary: Mettre à jour un prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePrelevementDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/{id}:
    delete:
      operationId: PrelevementController_remove
      summary: Supprimer un prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/bulk-delete:
    put:
      operationId: PrelevementController_bulkDelete
      summary: Supprimer un ou plusieurs prélèvements
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/stats/{year}:
    get:
      operationId: PrelevementController_getStats
      summary: Récupérer les statistiques des prélèvements par année
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/stats-company/get/{year}:
    get:
      operationId: PrelevementController_getStatsByCompany
      summary: Récupérer les meilleurs clients par nombre de prélèvements
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/stats-client/get/{year}:
    get:
      operationId: PrelevementController_getStatsByIndividualClient
      summary: Récupérer les statistiques des prélèvements par client
      parameters:
        - name: year
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/this-provider-by-technician:
    get:
      operationId: PrelevementController_getPrelevementsByTechnician
      summary: Récupérer les prélèvements par technicien
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/{id}/equipment-checklist:
    get:
      operationId: PrelevementEquipmentChecklistController_getChecklist
      summary: Checklist materiel mission (get ou generate)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT EQUIPMENT CHECKLIST
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: PrelevementEquipmentChecklistController_setChecklist
      summary: Configurer la checklist materiel (selection planificateur)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetEquipmentChecklistDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT EQUIPMENT CHECKLIST
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/{id}/equipment-checklist/generate:
    post:
      operationId: PrelevementEquipmentChecklistController_regenerateChecklist
      summary: Regenerer la checklist materiel
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT EQUIPMENT CHECKLIST
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/prelevement/{id}/equipment-checklist/confirm:
    put:
      operationId: PrelevementEquipmentChecklistController_confirmChecklist
      summary: Confirmer checklist materiel (bureau)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmEquipmentChecklistDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEMENT EQUIPMENT CHECKLIST
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/create:
    post:
      operationId: EchantillonsController_create
      summary: Créer un échantillon
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEchantillonDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/create-by-package:
    post:
      operationId: EchantillonsController_createByPackage
      summary: Créer un échantillon par contrat
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEchantillonDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/add-comment/{id}:
    post:
      operationId: EchantillonsController_addComment
      summary: Ajouter un commentaire à un échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEchantillonCommentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/add-nota-bene/{id}:
    post:
      operationId: EchantillonsController_addNotaBene
      summary: Ajouter une remarque à un échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEchantillonNotaBeneDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/this-provider:
    get:
      operationId: EchantillonsController_findAll
      summary: Liste des échantillons de ce prestataire
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the border sample
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: f_cacheKey
          required: false
          in: query
          description: Cache key for filtering
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/export/preview:
    get:
      operationId: EchantillonsController_exportPreview
      summary: 'Aperçu de l''export bordereaux : KPIs et filtres, sans générer le fichier'
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the border sample
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: f_cacheKey
          required: false
          in: query
          description: Cache key for filtering
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/export/async:
    post:
      operationId: EchantillonsController_exportAsync
      summary: Créer un job asynchrone d’export Excel des bordereaux
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the border sample
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: f_cacheKey
          required: false
          in: query
          description: Cache key for filtering
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/export/jobs/{jobId}:
    get:
      operationId: EchantillonsController_getExportJobStatus
      summary: Statut d’un job d’export bordereaux
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/export/jobs/{jobId}/download:
    get:
      operationId: EchantillonsController_downloadExportJob
      summary: Télécharger le fichier Excel d’un job d’export bordereaux
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/download/{id}:
    get:
      operationId: EchantillonsController_findForDownload
      summary: Récupérer un échantillon pour téléchargement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/pdf/{id}:
    get:
      operationId: EchantillonsController_downloadPdf
      summary: Générer le PDF du bordereau (doc_generator)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/barcode-data/{id}:
    get:
      operationId: EchantillonsController_findBarcodeData
      summary: Récupérer les données codes-barres groupées par laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/this-provider/deleted:
    get:
      operationId: EchantillonsController_findAllDeleted
      summary: Liste des échantillons supprimés de ce prestataire
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/not-send:
    get:
      operationId: EchantillonsController_findNotSend
      summary: Liste des échantillons non envoyés
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/one/{id}:
    get:
      operationId: EchantillonsController_findOne
      summary: Recuperer un échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: rapportInfo
          required: true
          in: query
          schema:
            type: string
        - name: scope
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/one-for-demande/{id}:
    get:
      operationId: EchantillonsController_findOneForDemande
      summary: Recuperer un échantillon pour une demande
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/item-parameters/{echantillonItemId}:
    get:
      operationId: EchantillonsController_findItemParameters
      summary: Récupérer les paramètres d’un échantillon
      parameters:
        - name: echantillonItemId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/by-code-bordereau:
    get:
      operationId: EchantillonsController_findByCodeBordereau
      summary: Liste des échantillons par code bordereau
      parameters:
        - name: codeBordereau
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/this-customer:
    get:
      operationId: EchantillonsController_findByCustomer
      summary: Liste des échantillons par client
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/waiting-echantillon-item:
    get:
      operationId: EchantillonsController_findWaitingEchantillonItem
      summary: Liste des bordereaux qui n'ont pas d'échantillons
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/no-demande-group:
    get:
      operationId: EchantillonsController_findNoDemandeGroup
      summary: Liste des bordereaux qui n'ont pas de groupe de demandes
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/waiting-in-situ-mesure:
    get:
      operationId: EchantillonsController_findWaitingInSituMesure
      summary: Liste des bordereaux qui n'ont pas de mesures in situ
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/without-prelevement-and-proforma:
    get:
      operationId: EchantillonsController_findWithoutPrelevementAndProforma
      summary: Liste des bordereaux qui n'ont pas de prélèvement et de proforma
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/this-provider-stats:
    get:
      operationId: EchantillonsController_getStats
      summary: Statistiques des échantillons de ce prestataire
      parameters:
        - name: year
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/chart-data:
    get:
      operationId: EchantillonsController_getNewChartData
      summary: Statistiques avancées des échantillons avec filtres temporels
      parameters:
        - name: type
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: string
        - name: month
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/update/{id}:
    put:
      operationId: EchantillonsController_update
      summary: Mettre à jour un échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEchantillonDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/delete/{id}:
    delete:
      operationId: EchantillonsController_remove
      summary: Supprimer un échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/delete-multiple:
    put:
      operationId: EchantillonsController_deleteMultiple
      summary: Supprimer plusieurs échantillons
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillons/mark-received/{id}:
    put:
      operationId: EchantillonsController_markAsReceived
      summary: Marquer un échantillon comme réceptionné
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LOT D'ÉCHANTILLONS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/laboratory/{laboratoryId}:
    get:
      operationId: LabEchantillonItemController_findAllByLaboratory
      summary: Récupérer tous les échantillons par laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/laboratory/{laboratoryId}/paginated:
    get:
      operationId: LabEchantillonItemController_findPaginatedByLaboratory
      summary: Lister les échantillons du laboratoire avec pagination serveur
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
        - name: labsHasReceived
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: sortBy
          required: true
          in: query
          schema:
            type: string
        - name: sortOrder
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/bordereaux/{laboratoryId}:
    get:
      operationId: LabEchantillonItemController_findBordereauxByLaboratory
      summary: Lister les bordereaux du laboratoire avec pagination serveur
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
        - name: receptionStatus
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/reception-stats/{laboratoryId}:
    get:
      operationId: LabEchantillonItemController_findReceptionStats
      summary: Statistiques de réception du laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/workload/{laboratoryId}:
    get:
      operationId: LabEchantillonItemController_findLabWorkload
      summary: >-
        Consultation : échantillons reçus par le laboratoire et analyses restant
        à planifier
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/by-bordereau/{laboratoryId}:
    get:
      operationId: LabEchantillonItemController_findByBordereau
      summary: >-
        Lister les échantillons d’un bordereau concernant ce laboratoire, avec
        leur état de réception
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: numBordereau
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/echantillon-item/{echantillonItemId}:
    get:
      operationId: LabEchantillonItemController_findAllByEchantillonItem
      summary: Récupérer tous les laboratoires associés à un échantillon
      parameters:
        - name: echantillonItemId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/{id}:
    get:
      operationId: LabEchantillonItemController_findOne
      summary: Récupérer un échantillon de laboratoire par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/receive/{laboratoryId}:
    put:
      operationId: LabEchantillonItemController_receiveSample
      summary: >-
        Marquer un échantillon comme reçu par le laboratoire (par ID ou
        codeLabo)
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/receive-many/{laboratoryId}:
    put:
      operationId: LabEchantillonItemController_receiveManySample
      summary: Marquer plusieurs échantillons comme reçus par le laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-echantillon-item/receive-by-bordereau/{laboratoryId}:
    put:
      operationId: LabEchantillonItemController_receiveByBordereau
      summary: Marquer les échantillons d'un bordereau comme reçus par le laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ECHANTILLON_DE_LABORATOIRE
        - ECHANTILLON_DE_LABORATOIRE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-nature-echantillon/sync/laboratory/{laboratoryId}:
    post:
      operationId: LabNatureEchantillonController_synchronizeForLaboratory
      summary: Synchroniser les natures d'échantillons pour un laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - lab-nature-echantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-nature-echantillon/sync/service-provider/{serviceProviderId}:
    post:
      operationId: LabNatureEchantillonController_synchronizeForServiceProvider
      summary: >-
        Synchroniser les natures d'échantillons pour tous les laboratoires d'un
        fournisseur
      parameters:
        - name: serviceProviderId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - lab-nature-echantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-nature-echantillon/laboratory/{laboratoryId}:
    get:
      operationId: LabNatureEchantillonController_getStatsByLaboratory
      summary: Obtenir les statistiques par nature d'échantillon pour un laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - lab-nature-echantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-nature-echantillon/service-provider/{serviceProviderId}:
    get:
      operationId: LabNatureEchantillonController_getStatsByServiceProvider
      summary: >-
        Obtenir les statistiques agrégées par nature d'échantillon pour un
        fournisseur
      parameters:
        - name: serviceProviderId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - lab-nature-echantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-nature-echantillon/grouped-by-tags/{serviceProviderId}:
    get:
      operationId: LabNatureEchantillonController_getGroupedByTags
      summary: Obtenir les natures d'échantillons regroupées par tags similaires
      parameters:
        - name: serviceProviderId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - lab-nature-echantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demandes/by-lab/{laboratoryId}:
    get:
      operationId: LabDemandeController_findAll
      summary: Récupérer les demandes pour un laboratoire avec pagination et filtrage
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: urgent
          required: false
          in: query
          description: Filtre pour les demandes urgentes
          schema:
            type: boolean
        - name: sortDirection
          required: false
          in: query
          description: Direction du tri
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: sortBy
          required: false
          in: query
          description: Champ pour le tri
          schema: {}
        - name: search
          required: false
          in: query
          description: Texte à rechercher
          schema: {}
        - name: limit
          required: false
          in: query
          description: Nombre d'éléments par page
          schema: {}
        - name: page
          required: false
          in: query
          description: Numéro de page
          schema: {}
        - name: year
          required: false
          in: query
          description: Année à filtrer
          schema: {}
        - name: status
          required: false
          in: query
          description: Statuts à filtrer (séparés par des virgules)
          schema: {}
      responses:
        '200':
          description: Liste des demandes pour le laboratoire avec pagination
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Demandes de laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demandes/one/{id}/by-lab/{laboratoryId}:
    get:
      operationId: LabDemandeController_findOne
      summary: Récupérer une demande spécifique pour un laboratoire
      parameters:
        - name: id
          required: true
          in: path
          description: ID de la demande de laboratoire
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Détails de la demande de laboratoire
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Demandes de laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demandes/intelligent-parameter-review:
    post:
      operationId: LabDemandeController_intelligentParameterReview
      summary: >-
        Revue intelligente : corriger matrice, paramètre, norme et seuil sur
        plusieurs analyses
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntelligentParameterReviewDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Demandes de laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demandes/{id}/replace-parameter:
    put:
      operationId: LabDemandeController_replaceParameter
      summary: >-
        Corriger un paramètre depuis une demande de laboratoire avant son
        traitement
      parameters:
        - name: id
          required: true
          in: path
          description: ID de la demande de laboratoire
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceDemandeParameterDto'
      responses:
        '200':
          description: >-
            Le paramètre a été remplacé dans la proforma et les données
            analytiques associées
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Demandes de laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demandes/process-create-by-reference:
    post:
      operationId: LabDemandeController_processCreateLabDemandeByReference
      summary: >-
        Lancer le traitement de création d'une demande de laboratoire par
        référence
      parameters:
        - name: reference
          required: true
          in: query
          description: Référence de la demande
          schema:
            type: string
      responses:
        '200':
          description: >-
            Traitement de la création de la demande de laboratoire lancé avec
            succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Demandes de laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/async-status:
    get:
      operationId: LabDemandeGroupController_syncStatuses
      summary: Synchroniser les statuts des groupes de demandes
      description: >-
        Cette opération met à jour les statuts des groupes de demandes en
        fonction des statuts actuels de leurs demandes associées.
      parameters:
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Statuts des groupes de demandes synchronisés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/by-lab/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_findAll
      summary: >-
        Récupérer les groupes de demandes pour un laboratoire avec pagination et
        filtrage
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Direction du tri
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: sortBy
          required: false
          in: query
          description: Champ pour le tri
          schema: {}
        - name: search
          required: false
          in: query
          description: Texte à rechercher
          schema: {}
        - name: limit
          required: false
          in: query
          description: Nombre d'éléments par page
          schema: {}
        - name: page
          required: false
          in: query
          description: Numéro de page
          schema: {}
        - name: year
          required: false
          in: query
          description: Année à filtrer
          schema: {}
        - name: status
          required: false
          in: query
          description: Statuts à filtrer (séparés par des virgules)
          schema: {}
      responses:
        '200':
          description: Liste des groupes de demandes pour le laboratoire avec pagination
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/by-lab/{laboratoryId}/not-planified:
    get:
      operationId: LabDemandeGroupController_findAllByLabAndNotPlanified
      summary: >-
        Récupérer les groupes de demandes pour un laboratoire avec pagination et
        filtrage
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/by-lab-technician/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_findAllByLaboAndTechnician
      summary: Récupérer les groupes de demandes pour un laboratoire et un technicien
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: status
          required: true
          in: query
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/by-lab-demande-group/{id}:
    get:
      operationId: LabDemandeGroupController_findOneByLabDemandeGroupForTechnician
      summary: Récupérer un groupe de demandes spécifique avec ses demandes associées
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/{id}/for-lab/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_findOneForLab
      summary: Récupérer un groupe de demandes spécifique avec ses demandes associées
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/{id}/lab-demande-report/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_getLabDemandeReport
      summary: Récupérer les rapports  d'une demande de laboratoire spécifique
      description: >-
        Fournit les rapports associés à une demande de laboratoire spécifique,
        incluant les détails des analyses et des échantillons.
      parameters:
        - name: id
          required: true
          in: path
          description: ID du groupe de demandes
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
      responses:
        '200':
          description: Rapports de la demande de laboratoire récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/stats/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_getLabStats
      summary: Récupérer les statistiques complètes pour un laboratoire
      description: >-
        Fournit des statistiques détaillées incluant les échantillons, analyses,
        natures d'échantillons, paramètres les plus demandés et tendances
        temporelles.
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: startDate
          required: false
          in: query
          description: Date de début au format ISO (YYYY-MM-DD)
          schema:
            example: '2024-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin au format ISO (YYYY-MM-DD)
          schema:
            example: '2024-12-31'
            type: string
        - name: status
          required: false
          in: query
          description: Statuts à filtrer (séparés par des virgules)
          schema:
            example: TRAITEE,EN_COURS
            type: string
        - name: year
          required: false
          in: query
          description: 'Année à analyser (par défaut: année courante)'
          schema:
            example: '2024'
            type: string
        - name: month
          required: false
          in: query
          description: Mois à analyser (1-12)
          schema:
            example: '6'
            type: string
        - name: groupByPeriod
          required: false
          in: query
          description: Regroupement temporel pour les tendances
          schema:
            enum:
              - day
              - week
              - month
              - year
            type: string
        - name: topParametersLimit
          required: false
          in: query
          description: Nombre maximum de paramètres à retourner
          schema:
            example: 10
            type: number
        - name: naturesLimit
          required: false
          in: query
          description: Nombre maximum de natures d'échantillons à retourner
          schema:
            example: 10
            type: number
      responses:
        '200':
          description: Statistiques du laboratoire récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/lab-rapport-stats-excel/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_getLabRapportStatsExcel
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: sent
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
        - Lab Statistics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/lab-demande-groups/lab-rapport-stats-json/{laboratoryId}:
    get:
      operationId: LabDemandeGroupController_getLabRapportStatsJson
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: sent
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Groupes de demandes par laboratoire
        - Lab Statistics
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/create-many/{echantillonId}:
    post:
      operationId: EchantillonItemController_createMany
      summary: Créer plusieurs items d'échantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/UpdateEchantillonItemDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/mark-received/{laboId}:
    put:
      operationId: EchantillonItemController_markAsReceived
      summary: Marquer un item d'échantillon comme reçu
      parameters:
        - name: codeLabo
          required: true
          in: query
          schema:
            type: string
        - name: laboId
          required: true
          in: path
          schema:
            type: string
        - name: type
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/mark-received-many/{laboId}:
    put:
      operationId: EchantillonItemController_markAsReceivedMany
      summary: Marquer plusieurs items d'échantillon comme reçu
      parameters:
        - name: laboId
          required: true
          in: path
          schema:
            type: string
        - name: type
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/change-proforma-item/{id}:
    put:
      operationId: EchantillonItemController_changeProformaItem
      summary: Changer le proformaItem d'un item d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/swap-proforma-items/{id}:
    put:
      operationId: EchantillonItemController_swapProformaItems
      summary: Intervertir les proformaItems de deux items d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/jobs/{jobId}:
    get:
      operationId: EchantillonItemController_getJobStatus
      summary: Statut d'un job de correction d'échantillon
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/this-provider:
    get:
      operationId: EchantillonItemController_findAll
      summary: Liste filtrée des items d'échantillon avec pagination
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/export:
    get:
      operationId: EchantillonItemController_exportByProvider
      summary: Exporter les items d'échantillon selon les filtres de la liste
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/count:
    get:
      operationId: EchantillonItemController_countByProvider
      summary: Comptage rapide des items d'échantillon avec filtres
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/search-light:
    get:
      operationId: EchantillonItemController_searchLight
      summary: Recherche rapide d'items d'échantillon pour autocomplétion
      parameters:
        - name: searchTerm
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/stats:
    get:
      operationId: EchantillonItemController_getStats
      summary: Statistiques avancées des items d'échantillon
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/natures:
    get:
      operationId: EchantillonItemController_listNatures
      summary: Liste paginée des natures d'échantillon distinctes
      parameters:
        - name: page
          required: false
          in: query
          schema:
            default: 1
            type: number
        - name: limit
          required: false
          in: query
          schema:
            default: 25
            type: number
        - name: search
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/natures/suggestions:
    get:
      operationId: EchantillonItemController_suggestNatures
      summary: Suggestions d'autocomplétion des natures d'échantillon
      parameters:
        - name: q
          required: false
          in: query
          schema:
            type: string
        - name: limit
          required: false
          in: query
          schema:
            default: 25
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/natures/rename:
    put:
      operationId: EchantillonItemController_renameNature
      summary: >-
        Corriger une nature d'échantillon, y compris si le rapport est déjà
        envoyé
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RenameNatureEchantillonDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/by-echantillon:
    get:
      operationId: EchantillonItemController_findByEchantillonCodeLabo
      summary: Récupérer les items d'échantillon d'un échantillon par le codeLabo
      parameters:
        - name: codeLabo
          required: true
          in: query
          schema:
            type: string
        - name: labId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/pluck-code-labo/{echantillonId}:
    get:
      operationId: EchantillonItemController_pluckCodeLaboByEchantillonId
      summary: >-
        Récupérer les codesLabo des items d'échantillon d'un échantillon par
        l'id de l'échantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/cleanup-duplicated-tafs:
    get:
      operationId: EchantillonItemController_cleanupDuplicatedTafs
      summary: Nettoyer les TAF en doublon dans la base de données
      parameters:
        - name: bordereaux
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/by-laboratory/{laboId}:
    get:
      operationId: EchantillonItemController_findByLaboratory
      summary: >-
        Récupérer les items d'échantillon d'un échantillon par l'id du
        laboratoire
      parameters:
        - name: laboId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/one/{id}:
    get:
      operationId: EchantillonItemController_findOne
      summary: Recuperer un item d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/update/{id}:
    put:
      operationId: EchantillonItemController_update
      summary: Mettre à jour un item d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEchantillonItemDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/delete/{id}:
    delete:
      operationId: EchantillonItemController_remove
      summary: Supprimer un item d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: partial
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/delete-multiple:
    put:
      operationId: EchantillonItemController_deleteMultiple
      summary: Supprimer plusieurs items d'échantillon
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/echantillon-item/delete-by-echantillon/{echantillonId}:
    delete:
      operationId: EchantillonItemController_removeByEchantillon
      summary: Supprimer les items d'échantillon d'un échantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ITEM D'ÉCHANTILLON
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/add/{prelevementId}:
    post:
      operationId: PreleveurController_addPreleveur
      summary: Ajouter un prélèvement
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePreleveurDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/reassign-prelevement/{prelevementId}:
    put:
      operationId: PreleveurController_reassignPreleveurs
      summary: Réassigner les préleveurs d une mission
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReassignPreleveursDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/validate-prelevement/{prelevementId}:
    put:
      operationId: PreleveurController_validatePrelevement
      summary: Valider un prélèvement
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/reject-prelevement/{prelevementId}:
    put:
      operationId: PreleveurController_rejectPrelevement
      summary: Rejeter un prélèvement
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectPrelevementDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/{id}:
    get:
      operationId: PreleveurController_findOne
      summary: Récupérer les preleveurs d un prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/list-prelevement/{userId}:
    get:
      operationId: PreleveurController_getPreleveurPrelevement
      summary: Récupérer les prélèvements du preleveur
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/preleveur/{prelevementId}/delete/{preleveurId}:
    delete:
      operationId: PreleveurController_remove
      summary: Supprimer un préleveur
      parameters:
        - name: preleveurId
          required: true
          in: path
          schema:
            type: string
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/export/excel:
    get:
      operationId: RapportsController_exportExcel
      summary: >-
        Export Excel des rapports sur une période : feuille KPIs, feuille
        globale, puis une feuille par mois si la période en couvre plusieurs
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            example: '2026-07-31'
            type: string
        - name: includeCancelled
          required: false
          in: query
          schema:
            default: false
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/export/preview:
    get:
      operationId: RapportsController_exportPreview
      summary: 'Aperçu JSON de l''export : KPIs et lignes, sans générer le fichier'
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            example: '2026-07-31'
            type: string
        - name: includeCancelled
          required: false
          in: query
          schema:
            default: false
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/export/async:
    post:
      operationId: RapportsController_exportExcelAsync
      summary: Créer un job asynchrone d’export Excel des rapports
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            example: '2026-01-01'
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            example: '2026-07-31'
            type: string
        - name: includeCancelled
          required: false
          in: query
          schema:
            default: false
            type: boolean
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/export/jobs/{jobId}:
    get:
      operationId: RapportsController_getExportJobStatus
      summary: Récupérer le statut d’un job export rapports
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/export/jobs/{jobId}/download:
    get:
      operationId: RapportsController_downloadExportJob
      summary: Télécharger le fichier d’un job export rapports
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/equalize-rapport-for-echantillon-item/{echantillonId}:
    post:
      operationId: RapportsController_equalizeRapportForEchantillonItem
      summary: Équilibrer les rapports pour un échantillon en fonction des items
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/equalize-rapport-ech-taf/{echantillonId}:
    post:
      operationId: RapportsController_equalizeRapportEchTaf
      summary: Équilibrer les rapports pour un échantillon en fonction des TAF
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/dispatch-by-number/{echantillonId}/{numberOfItemsByRapport}:
    post:
      operationId: RapportsController_dispatchByNumber
      summary: Distribuer les rapports par nombre pour un échantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
        - name: numberOfItemsByRapport
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/equalize-rapport-by-nature/{echantillonId}:
    post:
      operationId: RapportsController_equalizeRapportByNature
      summary: Regrouper les rapports par nature d'échantillon distincte
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/send-by-bordereau/{echantillonId}:
    post:
      operationId: RapportsController_sendByBordereau
      summary: Envoyer par bordereau
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SentRapportByBordereauDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/set-ok-for-lab-by-demande-group/{demandeGroupId}/{laboratoryId}:
    put:
      operationId: RapportsController_setOkForLabByDemandeGroup
      summary: Marquer un rapport comme validé pour un laboratoire par demande group
      parameters:
        - name: demandeGroupId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/set-not-ok-for-lab-by-demande-group/{demandeGroupId}/{laboratoryId}:
    put:
      operationId: RapportsController_setNotOkForLabByDemandeGroup
      summary: >-
        Marquer un rapport comme non validé pour un laboratoire par demande
        group
      parameters:
        - name: demandeGroupId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/set-not-first-generated/{rapportId}:
    put:
      operationId: RapportsController_setNotFirstGenerated
      summary: Rejeter un rapport avec motif et actions
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectRapportDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/one/{id}:
    get:
      operationId: RapportsController_findOne
      summary: Récupérer un rapport d'analyse par son id
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: valid-result
          required: true
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/this-provider:
    get:
      operationId: RapportsController_findAll
      summary: Récupérer tous les rapports d'analyse
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the rapport
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: isSent
          required: false
          in: query
          description: Filter by sent status
          schema:
            type: boolean
        - name: isFirstGenerated
          required: false
          in: query
          description: Filter by first generated status
          schema:
            type: boolean
        - name: isOkForAllLabs
          required: false
          in: query
          description: Exclude reports that are ok for all labs
          schema:
            type: boolean
        - name: trash
          required: false
          in: query
          description: >-
            Corbeille : ne renvoie que les rapports écartés (ignored) ou
            supprimés
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-bordereau:
    get:
      operationId: RapportsController_findByBordereau
      summary: Récupérer les rapports d'analyse par bordereau
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-laboratory/{laboratoryId}:
    get:
      operationId: RapportsController_findByLaboratory
      summary: Récupérer les rapports d'analyse par laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (maximum 100)
          schema:
            type: number
        - name: isOk
          required: false
          in: query
          description: Filter by isOk status for the laboratory
          schema:
            type: boolean
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-client:
    get:
      operationId: RapportsController_findByClient
      summary: Récupérer les rapports pour le client connecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-customer/{customerId}:
    get:
      operationId: RapportsController_findByCustomer
      parameters:
        - name: customerId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-echantillon/{echantillonId}:
    get:
      operationId: RapportsController_findByEchantillon
      summary: Récupérer les rapports d'analyse par échantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-demande/{demandeId}:
    get:
      operationId: RapportsController_findByDemande
      summary: Récupérer les rapports d'analyse par demande
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-proforma/{proformaId}:
    get:
      operationId: RapportsController_findByProforma
      summary: Récupérer les rapports d'analyse par proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/mark-as-first-generated/{id}:
    put:
      operationId: RapportsController_markAsGenerated
      summary: Marquer un rapport comme généré
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/toggle-ignored/{id}:
    put:
      operationId: RapportsController_toggleIgnored
      summary: Basculer l'état ignoré d'un rapport
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/mark-many-as-first-generated:
    put:
      operationId: RapportsController_markManyAsFirstGenerated
      summary: Marquer plusieurs rapports comme générés
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/multilingual-downloads:
    post:
      operationId: RapportsController_createMultilingualDownloads
      summary: Enregistrer les rapports téléchargés dans une langue cible
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMultilingualDownloadDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: RapportsController_findMultilingualDownloads
      summary: Consulter l’historique des téléchargements multilingues
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-echantillon-item/{echantillonItemId}:
    get:
      operationId: RapportsController_findByEchantillonItem
      summary: Récupérer les rapports d'analyse par item d'échantillon
      parameters:
        - name: echantillonItemId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-echantillon-item-analysis/{echantillonItemAnalysisId}:
    get:
      operationId: RapportsController_findByEchantillonItemAnalysis
      summary: Récupérer les rapports d'analyse par item d'analyse d'échantillon
      parameters:
        - name: echantillonItemAnalysisId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/all-disponible-rapport:
    get:
      operationId: RapportsController_findAllDisponbileRapport
      summary: Récupérer tous les rapports d'analyse disponibles
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/disponible/{echantillonId}:
    get:
      operationId: RapportsController_findByDisponbileRapport
      summary: Récupérer les rapports d'analyse par disponibilité
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-code-echantillon:
    get:
      operationId: RapportsController_findByCodeEchantillon
      summary: Récupérer les rapports d'analyse par code échantillon
      parameters:
        - name: codeLabo
          required: true
          in: query
          description: Code échantillon
          schema:
            type: string
        - name: type
          required: true
          in: query
          description: Type du code
          schema:
            enum:
              - full
              - alias
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/by-technician/{technicianId}:
    get:
      operationId: RapportsController_findByTechnician
      summary: Récupérer les rapports d'analyse par technicien
      parameters:
        - name: technicianId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/chart-data:
    get:
      operationId: RapportsController_getChartData
      summary: Récupérer les données de graphique de rapport
      parameters:
        - name: type
          required: true
          in: query
          description: Type de données
          schema:
            enum:
              - month
              - year
            type: string
        - name: year
          required: false
          in: query
          description: Année
          schema:
            type: number
        - name: month
          required: false
          in: query
          description: Mois
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/chart-data-by-technician/{technicianId}:
    get:
      operationId: RapportsController_getChartDataByTechnician
      summary: Récupérer les données de graphique de rapport par technicien
      parameters:
        - name: type
          required: true
          in: query
          description: Type de données
          schema:
            enum:
              - month
              - year
            type: string
        - name: year
          required: false
          in: query
          description: Année
          schema:
            type: number
        - name: month
          required: false
          in: query
          description: Mois
          schema:
            type: number
        - name: technicianId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/chart-data-by-laboratory/{laboratoryId}:
    get:
      operationId: RapportsController_getChartDataByLaboratory
      summary: Récupérer les données de graphique de rapport par laboratoire
      parameters:
        - name: type
          required: true
          in: query
          description: Type de données
          schema:
            enum:
              - month
              - year
            type: string
        - name: year
          required: false
          in: query
          description: Année
          schema:
            type: number
        - name: month
          required: false
          in: query
          description: Mois
          schema:
            type: number
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/donut-chart-data:
    get:
      operationId: RapportsController_getDonutChartData
      summary: Récupérer les données de graphique de rapport
      parameters:
        - name: type
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/donut-chart-data-by-laboratory/{laboratoryId}:
    get:
      operationId: RapportsController_getLaboratoryDonutChartData
      summary: Récupérer les données de graphique de rapport par laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: type
          required: true
          in: query
          schema:
            type: string
        - name: year
          required: true
          in: query
          schema:
            type: number
        - name: month
          required: true
          in: query
          schema:
            type: number
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/statistics-data:
    get:
      operationId: RapportsController_getStatisticsData
      summary: Récupérer les données statistiques formatées pour le frontend
      parameters:
        - name: period
          required: false
          in: query
          description: 'Période pour les statistiques (défaut: week)'
          schema:
            enum:
              - day
              - week
              - month
              - year
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/delivery-stats:
    get:
      operationId: RapportsController_getDeliveryStats
      summary: Statistiques de délai de transmission des rapports
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            example: '2024-01-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            example: '2024-12-31'
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/update/{id}:
    put:
      operationId: RapportsController_update
      summary: Mettre à jour un rapport d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRapportDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/update-sent-file/{id}:
    put:
      operationId: RapportsController_updateSentFile
      summary: Mettre à jour le fichier d'un rapport envoyé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SentRapportDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/delete/{id}:
    delete:
      operationId: RapportsController_remove
      summary: Supprimer un rapport d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/delete-many:
    put:
      operationId: RapportsController_removeMany
      summary: Supprimer plusieurs rapports d'analyse
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/mark-as-sent/{id}:
    put:
      operationId: RapportsController_markAsSent
      summary: Marquer un rapport comme envoyé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SentRapportDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/update-info/{id}:
    put:
      operationId: RapportsController_updateInfo
      summary: Mettre à jour les informations d'un rapport d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRapportDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/set-assignment/{id}:
    put:
      operationId: RapportsController_setAssignment
      summary: Affecter un rapport d'analyse à des analyses
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRapportAssignmentToAnalysesDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/certificate-comments/{laboratoryId}:
    get:
      operationId: RapportsController_getCertificateComments
      summary: Récupérer les commentaires de certificat pour des rapports
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: rapportIds
          required: false
          in: query
          description: IDs des rapports séparés par des virgules
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/add-certificate-comments:
    post:
      operationId: RapportsController_addCertificateComments
      summary: >-
        Ajouter des commentaires de certificat pour un laboratoire dans les
        rapports
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCertificateCommentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-analyse/certificate-comment/{commentId}:
    delete:
      operationId: RapportsController_deleteCertificateComment
      summary: Supprimer un commentaire de certificat
      parameters:
        - name: commentId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORTS D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations:
    post:
      operationId: ReclamationController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReclamationDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationController_findAll
      parameters:
        - name: type
          required: true
          in: query
          description: The type of the reclamation
          schema:
            example: DEMANDE_MODIFICATION
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
        - name: status
          required: true
          in: query
          description: The status of the reclamation
          schema:
            example: NOUVELLE
            enum:
              - NOUVELLE
              - EN_COURS_EVALUATION
              - EN_COURS_INVESTIGATION
              - EN_ATTENTE_VALIDATION
              - ACTIONS_CORRECTIVES
              - RESOLUE
              - FERMEE
              - ANNULEE
            type: string
        - name: priority
          required: true
          in: query
          description: The priority of the reclamation
          schema:
            example: BASSE
            enum:
              - BASSE
              - NORMALE
              - HAUTE
              - CRITIQUE
            type: string
        - name: assigneId
          required: true
          in: query
          description: The ID of the assignee
          schema:
            example: '1'
            type: string
        - name: customerId
          required: true
          in: query
          description: The ID of the customer
          schema:
            example: '1'
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            example: 10
            type: number
        - name: isEscalade
          required: true
          in: query
          description: The is escalade of the reclamation
          schema:
            example: true
            type: boolean
        - name: isRecurrente
          required: true
          in: query
          description: The is recurrente of the reclamation
          schema:
            example: true
            type: boolean
        - name: search
          required: false
          in: query
          description: Text search across title, description, and reference number
          schema:
            example: quality issue
            type: string
        - name: rapportId
          required: false
          in: query
          description: Filter by linked report ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: echantillonId
          required: false
          in: query
          description: Filter by linked sample ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: prelevementId
          required: false
          in: query
          description: Filter by linked prelevement ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/mes-reclamations:
    get:
      operationId: ReclamationController_findMyReclamations
      parameters:
        - name: type
          required: true
          in: query
          description: The type of the reclamation
          schema:
            example: DEMANDE_MODIFICATION
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
        - name: status
          required: true
          in: query
          description: The status of the reclamation
          schema:
            example: NOUVELLE
            enum:
              - NOUVELLE
              - EN_COURS_EVALUATION
              - EN_COURS_INVESTIGATION
              - EN_ATTENTE_VALIDATION
              - ACTIONS_CORRECTIVES
              - RESOLUE
              - FERMEE
              - ANNULEE
            type: string
        - name: priority
          required: true
          in: query
          description: The priority of the reclamation
          schema:
            example: BASSE
            enum:
              - BASSE
              - NORMALE
              - HAUTE
              - CRITIQUE
            type: string
        - name: assigneId
          required: true
          in: query
          description: The ID of the assignee
          schema:
            example: '1'
            type: string
        - name: customerId
          required: true
          in: query
          description: The ID of the customer
          schema:
            example: '1'
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            example: 10
            type: number
        - name: isEscalade
          required: true
          in: query
          description: The is escalade of the reclamation
          schema:
            example: true
            type: boolean
        - name: isRecurrente
          required: true
          in: query
          description: The is recurrente of the reclamation
          schema:
            example: true
            type: boolean
        - name: search
          required: false
          in: query
          description: Text search across title, description, and reference number
          schema:
            example: quality issue
            type: string
        - name: rapportId
          required: false
          in: query
          description: Filter by linked report ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: echantillonId
          required: false
          in: query
          description: Filter by linked sample ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: prelevementId
          required: false
          in: query
          description: Filter by linked prelevement ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}:
    get:
      operationId: ReclamationController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ReclamationController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateReclamationDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ReclamationController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/remove-assignation:
    delete:
      operationId: ReclamationController_removeAssignation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/assigner:
    put:
      operationId: ReclamationController_assigner
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/evaluer:
    put:
      operationId: ReclamationController_evaluer
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/escalader:
    put:
      operationId: ReclamationController_escalader
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/resoudre:
    put:
      operationId: ReclamationController_resoudre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/satisfaction:
    post:
      operationId: ReclamationController_enregistrerSatisfaction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SatisfactionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/ticket/{numeroTicket}:
    get:
      operationId: ReclamationController_findByNumeroTicket
      parameters:
        - name: numeroTicket
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/customer/{customerId}:
    get:
      operationId: ReclamationController_findByCustomer
      parameters:
        - name: customerId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/stats/overview:
    get:
      operationId: ReclamationController_getStatistiques
      parameters:
        - name: dateDebut
          required: true
          in: query
          schema:
            type: string
        - name: dateFin
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/actions-correctives:
    post:
      operationId: ReclamationController_createActionCorrective
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateActionCorrectiveDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationController_getActionsCorrectives
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/{actionId}/detail:
    get:
      operationId: ReclamationController_getActionCorrectiveById
      parameters:
        - name: actionId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/{actionId}:
    put:
      operationId: ReclamationController_updateActionCorrective
      parameters:
        - name: actionId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateActionCorrectiveDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/{actionId}/demarrer:
    put:
      operationId: ReclamationController_demarrerActionCorrective
      parameters:
        - name: actionId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/{actionId}/terminer:
    put:
      operationId: ReclamationController_terminerActionCorrective
      parameters:
        - name: actionId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/{actionId}/evaluer-efficacite:
    post:
      operationId: ReclamationController_evaluerEfficacite
      parameters:
        - name: actionId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvaluationEfficaciteDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/all:
    get:
      operationId: ReclamationController_getAllActionsCorrectives
      parameters:
        - name: page
          required: true
          in: query
          description: The page of the action corrective
          schema:
            example: 1
            type: number
        - name: limit
          required: true
          in: query
          description: The limit of the action corrective (max 100)
          schema:
            example: 10
            type: number
        - name: reclamationId
          required: true
          in: query
          description: The ID of the reclamation
          schema:
            example: '1'
            type: string
        - name: nonConformiteId
          required: true
          in: query
          description: The ID of the non-conformity
          schema:
            example: '1'
            type: string
        - name: entityType
          required: true
          in: query
          description: 'Filter by entity type: reclamation, non-conformite, or both'
          schema:
            example: reclamation
            enum:
              - reclamation
              - non-conformite
              - both
            type: string
        - name: status
          required: true
          in: query
          description: The status of the action corrective
          schema:
            example: PLANIFIEE
            enum:
              - PLANIFIEE
              - EN_COURS
              - TERMINEE
              - VERIFIEE
              - EFFICACE
            type: string
        - name: dateDebut
          required: true
          in: query
          description: The date of the start
          schema:
            example: '2025-01-01'
            type: string
        - name: dateFin
          required: true
          in: query
          description: The date of the end
          schema:
            example: '2025-01-01'
            type: string
        - name: priority
          required: true
          in: query
          description: The priority of the action corrective
          schema:
            example: BASSE
            enum:
              - BASSE
              - NORMALE
              - HAUTE
              - CRITIQUE
            type: string
        - name: responsableId
          required: true
          in: query
          description: The ID of the responsable
          schema:
            example: '1'
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/mes-actions:
    get:
      operationId: ReclamationController_getMesActionsCorrectives
      parameters:
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/stats/overview:
    get:
      operationId: ReclamationController_getStatsActionsCorrectives
      parameters:
        - name: reclamationId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/check-similar:
    post:
      operationId: ReclamationController_checkSimilarReclamations
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/link-parent:
    put:
      operationId: ReclamationController_linkToParent
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/recurring-series:
    get:
      operationId: ReclamationController_getRecurringSeries
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/validate:
    post:
      operationId: ReclamationController_validateForClosure
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/reject-validation:
    post:
      operationId: ReclamationController_rejectValidation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/close:
    post:
      operationId: ReclamationController_closeReclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/export/pdf:
    get:
      operationId: ReclamationController_exportToPdf
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/export/list:
    get:
      operationId: ReclamationController_exportList
      parameters:
        - name: type
          required: true
          in: query
          description: The type of the reclamation
          schema:
            example: DEMANDE_MODIFICATION
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
        - name: status
          required: true
          in: query
          description: The status of the reclamation
          schema:
            example: NOUVELLE
            enum:
              - NOUVELLE
              - EN_COURS_EVALUATION
              - EN_COURS_INVESTIGATION
              - EN_ATTENTE_VALIDATION
              - ACTIONS_CORRECTIVES
              - RESOLUE
              - FERMEE
              - ANNULEE
            type: string
        - name: priority
          required: true
          in: query
          description: The priority of the reclamation
          schema:
            example: BASSE
            enum:
              - BASSE
              - NORMALE
              - HAUTE
              - CRITIQUE
            type: string
        - name: assigneId
          required: true
          in: query
          description: The ID of the assignee
          schema:
            example: '1'
            type: string
        - name: customerId
          required: true
          in: query
          description: The ID of the customer
          schema:
            example: '1'
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            example: 10
            type: number
        - name: isEscalade
          required: true
          in: query
          description: The is escalade of the reclamation
          schema:
            example: true
            type: boolean
        - name: isRecurrente
          required: true
          in: query
          description: The is recurrente of the reclamation
          schema:
            example: true
            type: boolean
        - name: search
          required: false
          in: query
          description: Text search across title, description, and reference number
          schema:
            example: quality issue
            type: string
        - name: rapportId
          required: false
          in: query
          description: Filter by linked report ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: echantillonId
          required: false
          in: query
          description: Filter by linked sample ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: prelevementId
          required: false
          in: query
          description: Filter by linked prelevement ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: format
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/actions-correctives/export/list:
    get:
      operationId: ReclamationController_exportActionCorrectiveList
      parameters:
        - name: format
          required: true
          in: query
          schema:
            type: string
        - name: status
          required: true
          in: query
          schema:
            type: string
        - name: priority
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/by-rapport/{rapportId}:
    get:
      operationId: ReclamationController_findByRapport
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/by-echantillon/{echantillonId}:
    get:
      operationId: ReclamationController_findByEchantillon
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/by-prelevement/{prelevementId}:
    get:
      operationId: ReclamationController_findByPrelevement
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/commentaires:
    post:
      operationId: ReclamationController_addCommentaire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationController_getCommentaires
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/commentaires/{commentaireId}:
    delete:
      operationId: ReclamationController_deleteCommentaire
      parameters:
        - name: commentaireId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/comments:
    post:
      operationId: ReclamationCommentController_createComment
      summary: Créer un commentaire sur une réclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: Commentaire créé avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Réclamation non trouvée
      tags:
        - Réclamations - Commentaires
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationCommentController_getComments
      summary: Récupérer tous les commentaires d'une réclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Commentaires récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Commentaires
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/comments/public:
    get:
      operationId: ReclamationCommentController_getPublicComments
      summary: Récupérer les commentaires publics d'une réclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Commentaires publics récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Commentaires
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/comments/{id}:
    put:
      operationId: ReclamationCommentController_updateComment
      summary: Mettre à jour un commentaire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Commentaire mis à jour avec succès
        '400':
          description: Vous ne pouvez modifier que vos propres commentaires
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Commentaire non trouvé
      tags:
        - Réclamations - Commentaires
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ReclamationCommentController_deleteComment
      summary: Supprimer un commentaire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Commentaire supprimé avec succès
        '400':
          description: Vous ne pouvez supprimer que vos propres commentaires
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Commentaire non trouvé
      tags:
        - Réclamations - Commentaires
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/{id}/files:
    post:
      operationId: ReclamationFileController_uploadFile
      summary: Upload a file to a reclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                description:
                  type: string
                  description: Optional description of the file
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationFileController_getFiles
      summary: Get all files for a reclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/files/{id}/download:
    get:
      operationId: ReclamationFileController_getDownloadUrl
      summary: Get download URL for a file
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations/files/{id}:
    delete:
      operationId: ReclamationFileController_deleteFile
      summary: Delete a file
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-sla:
    post:
      operationId: ReclamationSLAController_createOrUpdate
      summary: Créer ou mettre à jour une configuration SLA
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSLADto'
      responses:
        '201':
          description: Configuration SLA créée ou mise à jour avec succès
        '400':
          description: Données invalides
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '403':
          description: Accès refusé - Gestionnaire qualité requis
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationSLAController_findAll
      summary: Récupérer toutes les configurations SLA
      parameters: []
      responses:
        '200':
          description: Configurations SLA récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-sla/compliance:
    get:
      operationId: ReclamationSLAController_getComplianceMetrics
      summary: Récupérer les métriques de conformité SLA
      parameters:
        - name: dateDebut
          required: true
          in: query
          schema:
            type: string
        - name: dateFin
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Métriques de conformité récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-sla/at-risk:
    get:
      operationId: ReclamationSLAController_getAtRiskReclamations
      summary: Récupérer les réclamations à risque
      parameters: []
      responses:
        '200':
          description: Réclamations à risque récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-sla/overdue:
    get:
      operationId: ReclamationSLAController_getOverdueReclamations
      summary: Récupérer les réclamations en retard
      parameters: []
      responses:
        '200':
          description: Réclamations en retard récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-sla/check/{reclamationId}:
    get:
      operationId: ReclamationSLAController_checkCompliance
      summary: Vérifier le statut de conformité d'une réclamation
      parameters:
        - name: reclamationId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Statut de conformité récupéré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Réclamation non trouvée
      tags:
        - Réclamations - SLA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-templates:
    post:
      operationId: ReclamationTemplateController_create
      summary: Créer un nouveau template de réclamation
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTemplateDto'
      responses:
        '201':
          description: Template créé avec succès
        '400':
          description: Données invalides
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '403':
          description: Accès refusé - Gestionnaire qualité requis
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ReclamationTemplateController_findAll
      summary: Récupérer tous les templates
      parameters:
        - name: includeInactive
          required: false
          in: query
          description: Inclure les templates inactifs
          schema:
            type: boolean
      responses:
        '200':
          description: Templates récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-templates/type/{type}:
    get:
      operationId: ReclamationTemplateController_findByType
      summary: Récupérer les templates par type
      parameters:
        - name: type
          required: true
          in: path
          description: Type de réclamation
          schema:
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
      responses:
        '200':
          description: Templates récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-templates/{id}:
    get:
      operationId: ReclamationTemplateController_findOne
      summary: Récupérer un template par ID
      parameters:
        - name: id
          required: true
          in: path
          description: ID du template
          schema:
            type: string
      responses:
        '200':
          description: Template récupéré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Template non trouvé
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ReclamationTemplateController_update
      summary: Mettre à jour un template
      parameters:
        - name: id
          required: true
          in: path
          description: ID du template
          schema:
            type: string
      responses:
        '200':
          description: Template mis à jour avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '403':
          description: Accès refusé - Gestionnaire qualité requis
        '404':
          description: Template non trouvé
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ReclamationTemplateController_deactivate
      summary: Désactiver un template
      parameters:
        - name: id
          required: true
          in: path
          description: ID du template
          schema:
            type: string
      responses:
        '200':
          description: Template désactivé avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '403':
          description: Accès refusé - Gestionnaire qualité requis
        '404':
          description: Template non trouvé
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-templates/{id}/apply:
    post:
      operationId: ReclamationTemplateController_applyTemplate
      summary: Appliquer un template avec substitution de variables
      parameters:
        - name: id
          required: true
          in: path
          description: ID du template
          schema:
            type: string
      responses:
        '200':
          description: Template appliqué avec succès
        '400':
          description: Template inactif
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Template non trouvé
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-templates/seed/defaults:
    post:
      operationId: ReclamationTemplateController_seedDefaultTemplates
      summary: Initialiser les templates par défaut
      parameters: []
      responses:
        '201':
          description: Templates par défaut créés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '403':
          description: Accès refusé - Gestionnaire qualité requis
      tags:
        - Réclamations - Templates
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/dashboard:
    get:
      operationId: ReclamationMetricsController_getDashboard
      summary: Récupérer les métriques du tableau de bord
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: type
          required: false
          in: query
          description: Type de réclamation
          schema:
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
      responses:
        '200':
          description: Métriques du tableau de bord récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/trends:
    get:
      operationId: ReclamationMetricsController_getTrends
      summary: Récupérer les données de tendance
      parameters:
        - name: dateDebut
          required: true
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: true
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Données de tendance récupérées avec succès
        '400':
          description: Plage de dates requise
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/sla-compliance:
    get:
      operationId: ReclamationMetricsController_getSLACompliance
      summary: Récupérer les métriques de conformité SLA
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Métriques de conformité SLA récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/satisfaction:
    get:
      operationId: ReclamationMetricsController_getSatisfaction
      summary: Récupérer les métriques de satisfaction
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Métriques de satisfaction récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/recurring:
    get:
      operationId: ReclamationMetricsController_getRecurring
      summary: Récupérer les réclamations récurrentes
      parameters: []
      responses:
        '200':
          description: Réclamations récurrentes récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/low-satisfaction:
    get:
      operationId: ReclamationMetricsController_getLowSatisfaction
      summary: Récupérer les réclamations avec satisfaction faible
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: type
          required: false
          in: query
          description: Type de réclamation
          schema:
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
      responses:
        '200':
          description: Réclamations avec satisfaction faible récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/reclamations-metrics/export:
    get:
      operationId: ReclamationMetricsController_exportMetrics
      summary: Exporter les métriques
      parameters:
        - name: format
          required: true
          in: query
          description: Format d'export (pdf ou excel)
          schema:
            enum:
              - pdf
              - excel
            type: string
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: type
          required: false
          in: query
          description: Type de réclamation
          schema:
            enum:
              - NON_CONFORMITE_RESULTAT
              - NON_CONFORMITE_DELAI
              - NON_CONFORMITE_RAPPORT
              - NON_CONFORMITE_PRELEVEMENT
              - NON_CONFORMITE_ECHANTILLON
              - NON_CONFORMITE_METHODE
              - NON_CONFORMITE_EQUIPEMENT
              - NON_CONFORMITE_TRAÇABILITE
              - DEMANDE_MODIFICATION
              - DEMANDE_REANALYSE
              - DEMANDE_ANNULATION
              - FACTURATION_INCORRECTE
              - DEVIS_INCORRECT
              - COMMUNICATION_INSUFFISANTE
              - DELAI_REPONSE_LONG
              - INFORMATION_MANQUANTE
              - INFORMATION_ERRONEE
              - PROBLEME_LIVRAISON
              - PERTE_ECHANTILLON
              - DETERIORATION_ECHANTILLON
              - CONDITIONNEMENT_INADEQUAT
              - ACCUEIL_CLIENT
              - COMPETENCE_PERSONNEL
              - CONSEIL_TECHNIQUE_INADEQUAT
              - NON_RESPECT_CONFIDENTIALITE
              - NON_CONFORMITE_NORME
              - PORTEE_ACCREDITATION
              - INCERTITUDE_MESURE
              - RECLAMATION_SOUS_TRAITANT
              - AUTRE
            type: string
      responses:
        '200':
          description: Métriques exportées avec succès
        '400':
          description: Format invalide
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Réclamations - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-events/filter-presets:
    post:
      operationId: FilterPresetController_create
      summary: Create a new filter preset
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFilterPresetDto'
      responses:
        '201':
          description: Filter preset created successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '409':
          description: Filter preset with this name already exists
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: FilterPresetController_findAll
      summary: Get all filter presets for the current user
      parameters:
        - name: entityType
          required: false
          in: query
          description: Filter by entity type
          schema:
            example: reclamation
            enum:
              - reclamation
              - non-conformite
            type: string
      responses:
        '200':
          description: Filter presets retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-events/filter-presets/default/{entityType}:
    get:
      operationId: FilterPresetController_findDefault
      summary: Get the default filter preset for an entity type
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Default filter preset retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-events/filter-presets/{id}:
    get:
      operationId: FilterPresetController_findOne
      summary: Get a filter preset by ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Filter preset retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Filter preset not found
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: FilterPresetController_update
      summary: Update a filter preset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFilterPresetDto'
      responses:
        '200':
          description: Filter preset updated successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Filter preset not found
        '409':
          description: Filter preset with this name already exists
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: FilterPresetController_remove
      summary: Delete a filter preset
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Filter preset deleted successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Filter preset not found
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-events/filter-presets/{id}/apply:
    get:
      operationId: FilterPresetController_apply
      summary: Apply a filter preset (returns filter configuration)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Filter preset applied successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Filter preset not found
      tags:
        - Filter Presets
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/parameter-revisions:
    get:
      operationId: QualityDashboardController_getParameterRevisions
      summary: Consulter l'historique des révisions de paramètres
      parameters:
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/parameter-revisions/{id}:
    get:
      operationId: QualityDashboardController_getParameterRevisionDetail
      summary: Consulter les impacts d'une révision de paramètre
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/metrics:
    get:
      operationId: QualityDashboardController_getUnifiedMetrics
      summary: Récupérer les métriques unifiées du tableau de bord qualité
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: gravite
          required: false
          in: query
          description: Gravité/Sévérité (FAIBLE, MOYENNE, CRITIQUE)
          schema:
            enum:
              - MINEURE
              - MAJEURE
              - CRITIQUE
            type: string
      responses:
        '200':
          description: Métriques unifiées récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/open-events:
    get:
      operationId: QualityDashboardController_getOpenEvents
      summary: Récupérer tous les événements qualité ouverts
      parameters: []
      responses:
        '200':
          description: Événements qualité ouverts récupérés avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/trends:
    get:
      operationId: QualityDashboardController_getTrends
      summary: Récupérer les tendances qualité dans le temps
      parameters:
        - name: dateDebut
          required: true
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: true
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Tendances qualité récupérées avec succès
        '400':
          description: Plage de dates requise
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-dashboard/compliance:
    get:
      operationId: QualityDashboardController_getComplianceStatus
      summary: Récupérer le statut de conformité qualité
      parameters: []
      responses:
        '200':
          description: Statut de conformité récupéré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Tableau de Bord Qualité
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/quality-notifications/preferences:
    get:
      operationId: NotificationPreferencesController_getPreferences
      summary: Get user notification preferences
      parameters: []
      responses:
        '200':
          description: Notification preferences retrieved successfully
      tags:
        - Quality Event Notifications
      security:
        - bearer: []
    put:
      operationId: NotificationPreferencesController_updatePreferences
      summary: Update user notification preferences
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNotificationPreferencesDto'
      responses:
        '200':
          description: Notification preferences updated successfully
      tags:
        - Quality Event Notifications
      security:
        - bearer: []
  /api/v1/quality-notifications/preferences/reset:
    put:
      operationId: NotificationPreferencesController_resetPreferences
      summary: Reset notification preferences to defaults
      parameters: []
      responses:
        '200':
          description: Notification preferences reset successfully
      tags:
        - Quality Event Notifications
      security:
        - bearer: []
  /api/v1/quality-notifications/preferences/disable-all:
    put:
      operationId: NotificationPreferencesController_disableAllNotifications
      summary: Disable all notifications
      parameters: []
      responses:
        '200':
          description: All notifications disabled successfully
      tags:
        - Quality Event Notifications
      security:
        - bearer: []
  /api/v1/quality-notifications/preferences/enable-all:
    put:
      operationId: NotificationPreferencesController_enableAllNotifications
      summary: Enable all notifications
      parameters: []
      responses:
        '200':
          description: All notifications enabled successfully
      tags:
        - Quality Event Notifications
      security:
        - bearer: []
  /api/v1/non-conformities:
    post:
      operationId: NonConformityController_create
      summary: Create a new non-conformity
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNonConformityDto'
      responses:
        '201':
          description: Non-conformity created successfully
        '400':
          description: Invalid input data
        '401':
          description: Unauthorized
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: NonConformityController_findAll
      summary: Get all non-conformities with filters
      parameters:
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            example: 10
            type: number
        - name: status
          required: false
          in: query
          description: Filter by status
          schema:
            example: DETECTEE
            enum:
              - DETECTEE
              - EN_ANALYSE
              - ACTIONS_EN_COURS
              - EN_VERIFICATION
              - CLOTUREE
              - VALIDEE
            type: string
        - name: type
          required: false
          in: query
          description: Filter by type
          schema:
            example: EQUIPEMENT
            enum:
              - TECHNIQUE
              - METHODOLOGIQUE
              - EQUIPEMENT
              - ECHANTILLON
              - PERSONNEL
              - ENVIRONNEMENTAL
              - DOCUMENTATION
              - SOUS_TRAITANCE
              - PREANALYTIQUE
              - POSTANALYTIQUE
              - ANALYTIQUE
            type: string
        - name: gravite
          required: false
          in: query
          description: Filter by severity
          schema:
            example: MAJEURE
            enum:
              - MINEURE
              - MAJEURE
              - CRITIQUE
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: Filter by laboratory ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: detectePar
          required: false
          in: query
          description: Filter by detector user ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: dateDebut
          required: false
          in: query
          description: Filter by start date (ISO 8601)
          schema:
            example: '2025-01-01'
            type: string
        - name: dateFin
          required: false
          in: query
          description: Filter by end date (ISO 8601)
          schema:
            example: '2025-12-31'
            type: string
        - name: impactClient
          required: false
          in: query
          description: Filter by customer impact
          schema:
            example: true
            type: boolean
        - name: impactValidite
          required: false
          in: query
          description: Filter by validity impact
          schema:
            example: true
            type: boolean
        - name: search
          required: false
          in: query
          description: Search text across title, description, and reference
          schema:
            example: calibration
            type: string
        - name: rapportAnalyseId
          required: false
          in: query
          description: Filter by linked report ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: echantillonId
          required: false
          in: query
          description: Filter by linked sample ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: analyseId
          required: false
          in: query
          description: Filter by linked analysis ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: reclamationId
          required: false
          in: query
          description: Filter by linked reclamation ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: Non-conformities retrieved successfully
        '401':
          description: Unauthorized
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}:
    get:
      operationId: NonConformityController_findOne
      summary: Get a non-conformity by ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformity retrieved successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: NonConformityController_update
      summary: Update a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNonConformityDto'
      responses:
        '200':
          description: Non-conformity updated successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: NonConformityController_delete
      summary: Soft delete a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformity deleted successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/status:
    put:
      operationId: NonConformityController_changeStatus
      summary: Change non-conformity status
      description: >-
        Changes the status of a non-conformity. IMPORTANT: Transitioning to
        EN_ANALYSE status requires that immediate containment actions
        (actionsImmediates) are documented first. This ensures proper workflow:
        Detection → Immediate Actions → Root Cause Analysis → Corrective
        Actions.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeStatusDto'
      responses:
        '200':
          description: Status changed successfully
        '400':
          description: >-
            Bad request - may indicate immediate actions are required before
            proceeding to EN_ANALYSE status
          content:
            application/json:
              schema:
                example:
                  statusCode: 400
                  message: >-
                    Immediate containment actions must be documented before
                    proceeding to root cause analysis. Please document the
                    immediate actions taken to contain the non-conformity.
                  error: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/link-reclamation:
    post:
      operationId: NonConformityController_linkToReclamation
      summary: Link non-conformity to a reclamation
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkEntityDto'
      responses:
        '200':
          description: Linked successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/link-sample:
    post:
      operationId: NonConformityController_linkToSample
      summary: Link non-conformity to a sample
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkEntityDto'
      responses:
        '200':
          description: Linked successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/link-report:
    post:
      operationId: NonConformityController_linkToReport
      summary: Link non-conformity to a report
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkEntityDto'
      responses:
        '200':
          description: Linked successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/link-analysis:
    post:
      operationId: NonConformityController_linkToAnalysis
      summary: Link non-conformity to an analysis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkEntityDto'
      responses:
        '200':
          description: Linked successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/root-cause/start:
    post:
      operationId: NonConformityController_startRootCauseAnalysis
      summary: Start root cause analysis for a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Root cause analysis started successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/root-cause/why:
    post:
      operationId: NonConformityController_addWhy
      summary: Add a "Why" question and answer for 5 Whys methodology
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddWhyDto'
      responses:
        '200':
          description: Why added successfully
        '400':
          description: Invalid level (must be 1-5)
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/root-cause/ishikawa:
    post:
      operationId: NonConformityController_addIshikawaCategory
      summary: Add causes to an Ishikawa diagram category
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddIshikawaCategoryDto'
      responses:
        '200':
          description: Ishikawa category added successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/root-cause/identify:
    post:
      operationId: NonConformityController_identifyRootCause
      summary: Identify and record the root cause
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentifyRootCauseDto'
      responses:
        '200':
          description: Root cause identified successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/root-cause:
    get:
      operationId: NonConformityController_getRootCauseAnalysis
      summary: Get the complete root cause analysis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Root cause analysis retrieved successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found or no analysis exists
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/actions:
    post:
      operationId: NonConformityController_createAction
      summary: Create a corrective action for a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateActionCorrectiveDto'
      responses:
        '201':
          description: Corrective action created successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: NonConformityController_getActions
      summary: Get all corrective actions for a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Corrective actions retrieved successfully
        '401':
          description: Unauthorized
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/actions/{id}:
    put:
      operationId: NonConformityController_updateAction
      summary: Update a corrective action
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateActionCorrectiveDto'
      responses:
        '200':
          description: Corrective action updated successfully
        '401':
          description: Unauthorized
        '404':
          description: Corrective action not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/actions/{id}/complete:
    post:
      operationId: NonConformityController_completeAction
      summary: Mark a corrective action as complete
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Corrective action completed successfully
        '400':
          description: Action already completed
        '401':
          description: Unauthorized
        '404':
          description: Corrective action not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/actions/{id}/verify:
    post:
      operationId: NonConformityController_verifyEffectiveness
      summary: Verify the effectiveness of a corrective action
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvaluationEfficaciteDto'
      responses:
        '200':
          description: Effectiveness verified successfully
        '400':
          description: Action must be completed before verification
        '401':
          description: Unauthorized
        '404':
          description: Corrective action not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/assess-impact:
    post:
      operationId: NonConformityController_assessImpact
      summary: Assess the impact of a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssessImpactDto'
      responses:
        '200':
          description: Impact assessed successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/impact-summary:
    get:
      operationId: NonConformityController_getImpactSummary
      summary: Get impact assessment summary for a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Impact summary retrieved successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/should-create-reclamation:
    get:
      operationId: NonConformityController_shouldCreateReclamation
      summary: Check if a reclamation should be created for this non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Reclamation suggestion retrieved successfully
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/workflow-status:
    get:
      operationId: NonConformityController_getWorkflowStatus
      summary: >-
        Get workflow status distinguishing immediate actions from corrective
        actions
      description: >-
        Returns the current workflow status showing: 1) Immediate containment
        actions (temporary measures taken upon detection), 2) Corrective actions
        (permanent solutions after root cause analysis), and 3) Workflow
        validation status. This helps UI clearly separate the two types of
        actions per ISO 17025 requirements.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Workflow status retrieved successfully
          content:
            application/json:
              schema:
                example:
                  immediateActions:
                    actions: Equipment isolated and tagged out of service
                    dateRecorded: '2025-02-05T10:30:00Z'
                    isDocumented: true
                  correctiveActions:
                    - id: 123e4567-e89b-12d3-a456-426614174000
                      description: Update calibration procedure and retrain staff
                      status: IN_PROGRESS
                      responsable: John Doe
                      deadline: '2025-02-15'
                  workflowStatus:
                    canProceedToAnalysis: true
                    requiresImmediateActions: false
                    requiresCorrectiveActions: true
                    message: >-
                      Immediate actions documented. Ready for root cause
                      analysis.
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/validate:
    post:
      operationId: NonConformityController_validateForClosure
      summary: Validate non-conformity for closure (Quality Manager only)
      description: >-
        Validates that all requirements are met before closing a non-conformity.
        Checks: 1) Root cause analysis is complete, 2) All corrective actions
        are completed, 3) Effectiveness verification is done. Only quality
        managers can perform this operation. Requirement 28.5, 19.2, 19.3.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateForClosureDto'
      responses:
        '200':
          description: Non-conformity validated successfully and status changed to VALIDEE
          content:
            application/json:
              schema:
                example:
                  id: 123e4567-e89b-12d3-a456-426614174000
                  numeroNC: NC-2025-001
                  statut: VALIDEE
                  validePar: 456e7890-e89b-12d3-a456-426614174000
                  dateValidation: '2025-02-05T14:30:00Z'
                  commentaireValidation: All requirements met. Approved for closure.
        '401':
          description: Unauthorized
        '403':
          description: Forbidden - Quality Manager role required
        '404':
          description: Non-conformity not found
        '422':
          description: Validation failed - requirements not met
          content:
            application/json:
              schema:
                example:
                  statusCode: 422
                  message: >-
                    Cannot validate for closure. Missing: Root cause analysis,
                    Effectiveness verification. Details: Root cause has not been
                    identified. 2 corrective action(s) have not been verified
                    for effectiveness.
                  error: Unprocessable Entity
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/reject:
    post:
      operationId: NonConformityController_rejectValidation
      summary: Reject validation and revert to previous status (Quality Manager only)
      description: >-
        Rejects validation of a non-conformity and reverts it to the previous
        status. Requires a reason for rejection. The status will be reverted to
        the last status before validation attempt. Requirement 19.4.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectValidationDto'
      responses:
        '200':
          description: Validation rejected successfully and status reverted
          content:
            application/json:
              schema:
                example:
                  id: 123e4567-e89b-12d3-a456-426614174000
                  numeroNC: NC-2025-001
                  statut: EN_VERIFICATION
                  validePar: null
                  dateValidation: null
                  commentaireValidation: >-
                    Effectiveness verification is incomplete. Please provide
                    more evidence.
        '400':
          description: Bad request - rejection reason is required
          content:
            application/json:
              schema:
                example:
                  statusCode: 400
                  message: Rejection reason is required
                  error: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden - Quality Manager role required
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/validation-status:
    get:
      operationId: NonConformityController_getValidationStatus
      summary: Check validation status and requirements
      description: >-
        Returns the current validation status showing which requirements are met
        and which are missing. Useful for UI to display validation checklist
        before attempting to validate for closure. Does not modify the
        non-conformity.
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Validation status retrieved successfully
          content:
            application/json:
              schema:
                example:
                  canClose: false
                  validationResults:
                    rootCauseAnalysis:
                      isComplete: true
                    actionsCompleted:
                      allCompleted: true
                    effectivenessVerification:
                      isVerified: false
                      message: >-
                        2 corrective action(s) have not been verified for
                        effectiveness.
                      unverifiedActions:
                        - id: 123e4567-e89b-12d3-a456-426614174000
                          description: Update calibration procedure
                          status: COMPLETED
                  missingItems:
                    - Effectiveness verification
        '401':
          description: Unauthorized
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/export/pdf:
    get:
      operationId: NonConformityController_exportToPdf
      summary: Export non-conformity to PDF
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: PDF exported successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Non-conformity not found
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/export/list:
    get:
      operationId: NonConformityController_exportList
      summary: Export list of non-conformities
      parameters:
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            example: 10
            type: number
        - name: status
          required: false
          in: query
          description: Filter by status
          schema:
            example: DETECTEE
            enum:
              - DETECTEE
              - EN_ANALYSE
              - ACTIONS_EN_COURS
              - EN_VERIFICATION
              - CLOTUREE
              - VALIDEE
            type: string
        - name: type
          required: false
          in: query
          description: Filter by type
          schema:
            example: EQUIPEMENT
            enum:
              - TECHNIQUE
              - METHODOLOGIQUE
              - EQUIPEMENT
              - ECHANTILLON
              - PERSONNEL
              - ENVIRONNEMENTAL
              - DOCUMENTATION
              - SOUS_TRAITANCE
              - PREANALYTIQUE
              - POSTANALYTIQUE
              - ANALYTIQUE
            type: string
        - name: gravite
          required: false
          in: query
          description: Filter by severity
          schema:
            example: MAJEURE
            enum:
              - MINEURE
              - MAJEURE
              - CRITIQUE
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: Filter by laboratory ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: detectePar
          required: false
          in: query
          description: Filter by detector user ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: dateDebut
          required: false
          in: query
          description: Filter by start date (ISO 8601)
          schema:
            example: '2025-01-01'
            type: string
        - name: dateFin
          required: false
          in: query
          description: Filter by end date (ISO 8601)
          schema:
            example: '2025-12-31'
            type: string
        - name: impactClient
          required: false
          in: query
          description: Filter by customer impact
          schema:
            example: true
            type: boolean
        - name: impactValidite
          required: false
          in: query
          description: Filter by validity impact
          schema:
            example: true
            type: boolean
        - name: search
          required: false
          in: query
          description: Search text across title, description, and reference
          schema:
            example: calibration
            type: string
        - name: rapportAnalyseId
          required: false
          in: query
          description: Filter by linked report ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: echantillonId
          required: false
          in: query
          description: Filter by linked sample ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: analyseId
          required: false
          in: query
          description: Filter by linked analysis ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: reclamationId
          required: false
          in: query
          description: Filter by linked reclamation ID
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
        - name: format
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: List exported successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/by-rapport/{rapportId}:
    get:
      operationId: NonConformityController_findByRapport
      summary: Get non-conformities linked to a specific report
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformities retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/by-echantillon/{echantillonId}:
    get:
      operationId: NonConformityController_findByEchantillon
      summary: Get non-conformities linked to a specific sample
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformities retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/by-analyse/{analyseId}:
    get:
      operationId: NonConformityController_findByAnalyse
      summary: Get non-conformities linked to a specific analysis
      parameters:
        - name: analyseId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformities retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/by-reclamation/{reclamationId}:
    get:
      operationId: NonConformityController_findByReclamation
      summary: Get non-conformities linked to a specific reclamation
      parameters:
        - name: reclamationId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Non-conformities retrieved successfully
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformities
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/{id}/files:
    post:
      operationId: NonConformityFileController_uploadFile
      summary: Upload a file to a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                description:
                  type: string
                  description: Optional description of the file
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: NonConformityFileController_getFiles
      summary: Get all files for a non-conformity
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/files/{id}/download:
    get:
      operationId: NonConformityFileController_getDownloadUrl
      summary: Get download URL for a file
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/files/{id}:
    delete:
      operationId: NonConformityFileController_deleteFile
      summary: Delete a file
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Fichiers
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/dashboard:
    get:
      operationId: NonConformityMetricsController_getDashboard
      summary: Récupérer les métriques du tableau de bord
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: gravite
          required: false
          in: query
          description: Gravité de la non-conformité
          schema:
            enum:
              - MINEURE
              - MAJEURE
              - CRITIQUE
            type: string
        - name: type
          required: false
          in: query
          description: Type de non-conformité
          schema:
            enum:
              - TECHNIQUE
              - METHODOLOGIQUE
              - EQUIPEMENT
              - ECHANTILLON
              - PERSONNEL
              - ENVIRONNEMENTAL
              - DOCUMENTATION
              - SOUS_TRAITANCE
              - PREANALYTIQUE
              - POSTANALYTIQUE
              - ANALYTIQUE
            type: string
      responses:
        '200':
          description: Métriques du tableau de bord récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/trends:
    get:
      operationId: NonConformityMetricsController_getTrends
      summary: Récupérer les données de tendance
      parameters:
        - name: dateDebut
          required: true
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: true
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Données de tendance récupérées avec succès
        '400':
          description: Plage de dates requise
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/types:
    get:
      operationId: NonConformityMetricsController_getTypeDistribution
      summary: Récupérer la distribution par type
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Distribution par type récupérée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/phases:
    get:
      operationId: NonConformityMetricsController_getPhaseDistribution
      summary: Récupérer la distribution par phase de détection
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Distribution par phase récupérée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/impact:
    get:
      operationId: NonConformityMetricsController_getImpactMetrics
      summary: Récupérer les métriques d'impact
      parameters:
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
      responses:
        '200':
          description: Métriques d'impact récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/non-conformities/metrics/export:
    get:
      operationId: NonConformityMetricsController_exportMetrics
      summary: Exporter les métriques
      parameters:
        - name: format
          required: true
          in: query
          description: Format d'export (pdf ou excel)
          schema:
            enum:
              - pdf
              - excel
            type: string
        - name: dateDebut
          required: false
          in: query
          description: Date de début (ISO 8601)
          schema:
            type: string
        - name: dateFin
          required: false
          in: query
          description: Date de fin (ISO 8601)
          schema:
            type: string
        - name: laboratoireId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: gravite
          required: false
          in: query
          description: Gravité de la non-conformité
          schema:
            enum:
              - MINEURE
              - MAJEURE
              - CRITIQUE
            type: string
        - name: type
          required: false
          in: query
          description: Type de non-conformité
          schema:
            enum:
              - TECHNIQUE
              - METHODOLOGIQUE
              - EQUIPEMENT
              - ECHANTILLON
              - PERSONNEL
              - ENVIRONNEMENTAL
              - DOCUMENTATION
              - SOUS_TRAITANCE
              - PREANALYTIQUE
              - POSTANALYTIQUE
              - ANALYTIQUE
            type: string
      responses:
        '200':
          description: Métriques exportées avec succès
        '400':
          description: Format invalide
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Non-Conformités - Métriques
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-analyse/create-many/{echantillonId}:
    post:
      operationId: DemandeAnalyseController_createMany
      summary: Créer plusieurs demandes d'analyse
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
        - name: isUrgent
          required: true
          in: query
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateDemandeAnalyseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEMANDE D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-analyse/create-failled-demande-group/{id}:
    get:
      operationId: DemandeAnalyseController_createFailledDemandeGroup
      summary: Créer un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateDemandeAnalyseDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEMANDE D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-analyse/verify-sync/{demandeGroupId}:
    get:
      operationId: DemandeAnalyseController_verifyAndSync
      summary: Vérifier et synchroniser un groupe de demandes
      parameters:
        - name: demandeGroupId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEMANDE D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/send-many:
    post:
      operationId: RapportTransmissionController_createMany
      summary: Enovyer plusieurs rapports
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateRapportTransmissionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/old-send-many:
    post:
      operationId: RapportTransmissionController_sendMany
      summary: Enovyer plusieurs rapports (import depuis l ancienne plateforme)
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/add-interlocuteur/{rapportId}:
    post:
      operationId: RapportTransmissionController_addInterlocuteur
      summary: Ajouter un interlocuteur à un rapport
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/all-rapport-sent:
    get:
      operationId: RapportTransmissionController_findAll
      summary: Recuperer les rapports envoyés d un fournisser
      parameters:
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
        - name: typeRapport
          required: true
          in: query
          schema:
            type: string
        - name: customerType
          required: true
          in: query
          schema:
            type: string
        - name: dateFrom
          required: true
          in: query
          schema:
            type: string
        - name: dateTo
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/one-rapport-sent/{id}:
    get:
      operationId: RapportTransmissionController_findOne
      summary: Recuperer un rapport envoyé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/rapport-sent-by-company/{companyId}:
    get:
      operationId: RapportTransmissionController_findByCompany
      summary: Recuperer les rapports envoyés d une entreprise cliente
      parameters:
        - name: companyId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/this-customer:
    get:
      operationId: RapportTransmissionController_findByThisCustomer
      summary: Recuperer les rapports envoyés du client connecté
      parameters:
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
        - name: search
          required: true
          in: query
          schema:
            type: string
        - name: typeRapport
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/rapport-sent-by-customer/{userId}:
    get:
      operationId: RapportTransmissionController_findByCustomer
      summary: Recuperer les rapports envoyés d un client
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/read/{id}:
    put:
      operationId: RapportTransmissionController_read
      summary: Marquer un rapport comme lu
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/rapport-sent-by-borderau/{borderauId}:
    get:
      operationId: RapportTransmissionController_findByBorderedau
      summary: Recuperer les rapports envoyés d un borderau
      parameters:
        - name: borderauId
          required: true
          in: path
          schema:
            type: string
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/update/{id}:
    put:
      operationId: RapportTransmissionController_update
      summary: Modifier un rapport envoyé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRapportTransmissionDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-transmission/delete/{id}:
    delete:
      operationId: RapportTransmissionController_remove
      summary: Supprimer un rapport envoyé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - TRANSMISSION DES RAPPORTS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys:
    post:
      operationId: SatisfactionSurveyController_createSurvey
      summary: Créer une nouvelle enquête de satisfaction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSurveyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: SatisfactionSurveyController_getSurveys
      summary: Récupérer les enquêtes de satisfaction
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/dashboard-summary:
    get:
      operationId: SatisfactionSurveyController_getDashboardSummary
      summary: Résumé enquêtes pour le dashboard qualité
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/client/pending:
    get:
      operationId: SatisfactionSurveyController_getPendingSurveysForClient
      summary: Récupérer les enquêtes de satisfaction en attente pour un client
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/client/access-status:
    get:
      operationId: SatisfactionSurveyController_checkClientAccessStatus
      summary: Vérifier si l'accès du client est bloqué en raison d'enquêtes en attente
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/client/responses:
    post:
      operationId: SatisfactionSurveyController_submitClientResponse
      summary: Soumettre les réponses d'un client à une enquête de satisfaction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitResponseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/internal/pending:
    get:
      operationId: SatisfactionSurveyController_getPendingSurveysForInternalUser
      summary: >-
        Récupérer les enquêtes de satisfaction en attente pour un utilisateur
        interne
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/internal/responses:
    post:
      operationId: SatisfactionSurveyController_submitInternalUserResponse
      summary: >-
        Soumettre les réponses d'un utilisateur interne à une enquête de
        satisfaction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitResponseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/{id}:
    get:
      operationId: SatisfactionSurveyController_getSurveyById
      summary: Récupérer une enquête de satisfaction par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: SatisfactionSurveyController_updateSurvey
      summary: Mettre à jour une enquête de satisfaction par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: SatisfactionSurveyController_deleteSurvey
      summary: Supprimer une enquête de satisfaction par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/{id}/analytics:
    get:
      operationId: SatisfactionSurveyController_getSurveyAnalytics
      summary: Récupérer les analyses d'une enquête de satisfaction par ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/triggers/rapport-delivery:
    post:
      operationId: SatisfactionSurveyController_triggerSurveyForRapportDelivery
      summary: Déclencher une enquête de satisfaction après la livraison d'un rapport
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/triggers/feature-usage:
    post:
      operationId: SatisfactionSurveyController_triggerSurveyForFeatureUsage
      summary: >-
        Déclencher une enquête de satisfaction après l'utilisation d'une
        fonctionnalité
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/satisfaction-surveys/{id}/export:
    get:
      operationId: SatisfactionSurveyController_exportSurveyResponses
      summary: Exporter les réponses d'une enquête de satisfaction en format CSV
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Enquêtes de satisfaction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/one/{id}/{labId}:
    get:
      operationId: DemandeGroupController_findOne
      summary: Recuperer un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/this-provider:
    get:
      operationId: DemandeGroupController_findAll
      summary: Recuperer tous les groupes de demande d'analyse
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the demande group
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: f_cacheKey
          required: false
          in: query
          description: Cache key for filtering
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/this-provider-deleted:
    get:
      operationId: DemandeGroupController_findAllDeleted
      summary: Recuperer tous les groupes de demande d'analyse supprimé
      parameters:
        - name: status
          required: false
          in: query
          description: Status of the demande group
          schema:
            type: array
            items:
              type: string
        - name: startDate
          required: false
          in: query
          description: Start date for filtering
          schema:
            format: date-time
            type: string
        - name: endDate
          required: false
          in: query
          description: End date for filtering
          schema:
            format: date-time
            type: string
        - name: page
          required: false
          in: query
          description: Page number for pagination
          schema:
            type: number
        - name: limit
          required: false
          in: query
          description: Number of items per page
          schema:
            type: number
        - name: search
          required: false
          in: query
          description: Search term for filtering
          schema:
            type: string
        - name: sortBy
          required: false
          in: query
          description: Field to sort by
          schema:
            type: string
        - name: sortDirection
          required: false
          in: query
          description: Sort direction
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: f_cacheKey
          required: false
          in: query
          description: Cache key for filtering
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/get-for-download/{id}:
    get:
      operationId: DemandeGroupController_getForDownload
      summary: Recuperer un groupe de demande d'analyse pour le téléchargement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/download/async/{id}:
    post:
      operationId: DemandeGroupController_downloadAsync
      summary: Générer les fiches de demande d'analyse (async — sync + PDF en queue)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/jobs/{jobId}:
    get:
      operationId: DemandeGroupController_getJobStatus
      summary: Statut d'un job de génération de fiches de demande
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/jobs/{jobId}/download:
    get:
      operationId: DemandeGroupController_downloadJob
      summary: Télécharger le ZIP d'un job de fiches de demande
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/find-one-for-provider/{id}:
    get:
      operationId: DemandeGroupController_findOneForProvider
      summary: Recuperer un groupe de demande d'analyse pour le provider
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/history/{id}:
    get:
      operationId: DemandeGroupController_getHistory
      summary: Historique d'une demande (rejets résultats/rapports et versions)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/update-demande/{id}:
    put:
      operationId: DemandeGroupController_updateDemandeGroupStatus
      summary: Mettre à jour le status d'un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDemandeGroupDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/delete/{id}:
    delete:
      operationId: DemandeGroupController_deleteDemandeGroup
      summary: Supprimer un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/restore/{id}:
    put:
      operationId: DemandeGroupController_restoreDemandeGroup
      summary: Restaurer un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/restore-many-soft:
    put:
      operationId: DemandeGroupController_restoreDemandeGroupMany
      summary: Restaurer un groupe de demande d'analyse
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/delete-hard/{id}:
    delete:
      operationId: DemandeGroupController_deleteHard
      summary: Supprimer un groupe de demande d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/demande-group/delete-many-hard:
    put:
      operationId: DemandeGroupController_deleteDemandeGroupManyHard
      summary: Supprimer un groupe de demande d'analyse
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DemandeGroup
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/find-by-rapport-id/{rapportId}:
    get:
      operationId: FinalRapportController_findFinalRapportByRapportId
      summary: Trouver le rapport final par rapport id
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/find-by-rapport-ids:
    post:
      operationId: FinalRapportController_findManyByRapportIds
      summary: Trouver les rapports finals par rapport ids
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/find-by-id/{finalRapportId}:
    get:
      operationId: FinalRapportController_findFinalRapportById
      summary: Trouver le rapport final par rapport id
      parameters:
        - name: finalRapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/get-partial/{labDemandeGroupId}/{laboratoryId}:
    get:
      operationId: FinalRapportController_getPartialRapport
      summary: Trouver le rapport partiel pour une demande d'analyse
      parameters:
        - name: labDemandeGroupId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/get-partial-by-rapport/{rapportId}/{laboratoryId}:
    get:
      operationId: FinalRapportController_getPartialRapportByRapportId
      summary: Trouver le rapport partiel par rapportId et laboratoryId
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/generate/async/{rapportId}:
    post:
      operationId: FinalRapportController_generateFinalRapportAsync
      summary: Générer le rapport final (async)
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/generate-bulk/async:
    post:
      operationId: FinalRapportController_generateBulkAsync
      summary: Générer les rapports finals en lot (async)
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/reject/async/{rapportId}:
    post:
      operationId: FinalRapportController_rejectRapportAsync
      summary: Rejeter et regénérer le rapport (async)
      parameters:
        - name: rapportId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectRapportDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/final-rapport/jobs/{jobId}:
    get:
      operationId: FinalRapportController_getJobStatus
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT FINAL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/laboratory/{laboratoryId}:
    get:
      operationId: TechnicianEchantillonItemController_findAll
      summary: Récupérer les échantillons assignés à un technicien
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/statistics/{laboratoryId}:
    get:
      operationId: TechnicianEchantillonItemController_getStatistics
      summary: Récupérer les statistiques du technicien
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: naturesLimit
          required: false
          in: query
          description: Limiter le nombre de natures d'échantillons les plus fréquentes
          schema: {}
        - name: topParametersLimit
          required: false
          in: query
          description: Limiter le nombre de paramètres les plus fréquents
          schema: {}
        - name: groupByPeriod
          required: false
          in: query
          description: Regrouper les statistiques par période
          schema:
            enum:
              - day
              - week
              - month
              - year
            type: string
        - name: month
          required: false
          in: query
          description: Mois pour les statistiques mensuelles (1-12)
          schema: {}
        - name: year
          required: false
          in: query
          description: Année pour les statistiques annuelles
          schema: {}
        - name: status
          required: false
          in: query
          description: Statut des analyses (peut être un tableau)
          schema: {}
        - name: endDate
          required: false
          in: query
          description: Date de fin au format YYYY-MM-DD
          schema: {}
        - name: startDate
          required: false
          in: query
          description: Date de début au format YYYY-MM-DD
          schema: {}
      responses:
        '200':
          description: Statistiques récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/statistics/{laboratoryId}/export:
    get:
      operationId: TechnicianEchantillonItemController_exportPersonalStats
      summary: Exporter les statistiques personnelles du technicien en Excel
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Statut des analyses (peut être un tableau)
          schema: {}
        - name: endDate
          required: false
          in: query
          description: Date de fin au format YYYY-MM-DD
          schema: {}
        - name: startDate
          required: false
          in: query
          description: Date de début au format YYYY-MM-DD
          schema: {}
      responses:
        '200':
          description: Fichier Excel des statistiques personnelles généré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/classement/json:
    get:
      operationId: TechnicianEchantillonItemController_getClassementJson
      summary: Obtenir le classement des techniciens au format JSON
      description: >-
        Génère un classement détaillé des techniciens avec métriques de
        performance
      parameters:
        - name: laboratoryId
          required: false
          in: query
          description: ID du laboratoire (optionnel)
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          description: Date de début (YYYY-MM-DD)
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          description: Date de fin (YYYY-MM-DD)
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: 'Nombre maximum de techniciens à retourner (par défaut: tous)'
          schema:
            type: number
      responses:
        '200':
          description: Classement généré au format JSON
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/classement/excel:
    get:
      operationId: TechnicianEchantillonItemController_getTechnicienClassementExcel
      summary: Exporter le classement des techniciens en Excel
      description: >-
        Génère et télécharge un fichier Excel avec le classement des techniciens
        et leurs métriques
      parameters:
        - name: limit
          required: false
          in: query
          description: 'Nombre maximum de techniciens à retourner (par défaut: tous)'
          schema:
            type: number
        - name: sortDirection
          required: false
          in: query
          description: Direction du tri
          schema:
            enum:
              - asc
              - desc
            type: string
        - name: sortBy
          required: false
          in: query
          description: Critère de tri
          schema:
            enum:
              - totalAnalyses
              - completionRate
              - avgProcessingTime
              - responseTime
              - requestFrequency
              - efficiency
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: ID du laboratoire (optionnel pour stats globales)
          schema: {}
        - name: endDate
          required: true
          in: query
          description: Date de fin (YYYY-MM-DD)
          schema: {}
        - name: startDate
          required: true
          in: query
          description: Date de début (YYYY-MM-DD)
          schema: {}
      responses:
        '200':
          description: Fichier Excel généré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/initialize/{laboratoryId}:
    post:
      operationId: TechnicianEchantillonItemController_initialize
      summary: Initialiser les statistiques des techniciens pour un laboratoire
      description: >-
        Synchronise les données LabTechnicienEchantillonItem avec les
        AnalyseExecution
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: cleanupOldRecords
          required: false
          in: query
          description: Nettoyer les anciens enregistrements (true/false)
          schema:
            type: string
      responses:
        '200':
          description: Statistiques initialisées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/initialize/{laboratoryId}/demande-group/{demandeGroupId}:
    post:
      operationId: TechnicianEchantillonItemController_initializeByDemandeGroupId
      summary: Initialiser les statistiques pour un groupe de demandes spécifique
      description: Synchronise les données pour un groupe de demandes particulier
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: demandeGroupId
          required: true
          in: path
          description: ID du groupe de demandes
          schema:
            type: string
      responses:
        '200':
          description: Statistiques du groupe initialisées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-echantillon-item/initialize-all/{laboratoryId}:
    post:
      operationId: TechnicianEchantillonItemController_initializeAll
      summary: Initialiser toutes les statistiques (échantillons + paramètres)
      description: >-
        Synchronise à la fois les LabTechnicienEchantillonItem et
        LabTechnicienParameter
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: cleanupOldRecords
          required: false
          in: query
          description: Nettoyer les anciens enregistrements (true/false)
          schema:
            type: string
      responses:
        '200':
          description: Toutes les statistiques initialisées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ÉCHANTILLONS TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/technician-parameters/laboratory/{laboratoryId}:
    get:
      operationId: TechnicianParametersController_findAll
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PARAMÈTRES TECHNICIENS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analyses-exectution:
    post:
      operationId: AnalysesExectutionController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAnalysesExectutionDto'
      responses:
        '201':
          description: ''
    get:
      operationId: AnalysesExectutionController_findAll
      parameters: []
      responses:
        '200':
          description: ''
  /api/v1/analyses-exectution/{id}:
    get:
      operationId: AnalysesExectutionController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
    patch:
      operationId: AnalysesExectutionController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAnalysesExectutionDto'
      responses:
        '200':
          description: ''
    delete:
      operationId: AnalysesExectutionController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
  /api/v1/analyse-executions/molecules/lot/catalogue:
    post:
      operationId: MolecularExecutionController_getLotCatalogue
      summary: Catalogue molécules d’un lot HAP hérités
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MolecularLotCatalogueDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ANALYSE EXECUTION MOLECULES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analyse-executions/molecules/lot:
    put:
      operationId: MolecularExecutionController_saveLotDetected
      summary: Enregistrer les molécules détectées d’un lot hérités
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveMolecularLotDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ANALYSE EXECUTION MOLECULES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analyse-executions/molecular/bulk:
    post:
      operationId: MolecularExecutionController_saveBulkDetected
      summary: Enregistrer les mêmes molécules sur plusieurs échantillons
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveMolecularBulkDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ANALYSE EXECUTION MOLECULES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analyse-executions/{id}/molecules/catalogue:
    get:
      operationId: MolecularExecutionController_getCatalogue
      summary: Catalogue molécules d'une exécution parent
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ANALYSE EXECUTION MOLECULES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analyse-executions/{id}/molecules:
    put:
      operationId: MolecularExecutionController_saveDetected
      summary: Enregistrer les molécules détectées
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveDetectedMoleculesDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - ANALYSE EXECUTION MOLECULES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/monthly:
    get:
      operationId: LaboratoryStatsController_getMonthlyStats
      summary: Récupérer les statistiques mensuelles d'un laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/multiple:
    get:
      operationId: LaboratoryStatsController_getMultipleStats
      summary: Récupérer les statistiques pour plusieurs laboratoires
      parameters:
        - name: laboratoryIds
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/aggregate:
    get:
      operationId: LaboratoryStatsController_getAggregateStats
      summary: Récupérer un résumé agrégé de tous les laboratoires
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/export/sheets:
    get:
      operationId: LaboratoryStatsController_getExportSheets
      summary: Exporter les statistiques en Excel
      parameters:
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/export:
    get:
      operationId: LaboratoryStatsController_exportToExcel
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
        - name: sheets
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/export/async:
    post:
      operationId: LaboratoryStatsController_exportToExcelAsync
      summary: Créer un job asynchrone d’export Excel des statistiques
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
        - name: sheets
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/jobs/{jobId}:
    get:
      operationId: LaboratoryStatsController_getExportJobStatus
      summary: Récupérer le statut d’un job export stats
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory-stats/jobs/{jobId}/download:
    get:
      operationId: LaboratoryStatsController_downloadExportJob
      summary: Télécharger le résultat d’un job export stats
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - LABORATORY_STATS
        - LABORATORY_STATS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ai-diagnostic:
    post:
      operationId: AiDiagnosticController_save
      summary: Enregistrer un diagnostic IA produit pour une demande
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveAiDiagnosticDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DIAGNOSTICS IA
        - DIAGNOSTICS_IA
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: AiDiagnosticController_findAll
      summary: Historique des diagnostics IA (filtrable par labo et période)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DIAGNOSTICS IA
        - DIAGNOSTICS_IA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ai-diagnostic/{id}:
    get:
      operationId: AiDiagnosticController_findOne
      summary: Détail d’un diagnostic IA, avec la réponse brute
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DIAGNOSTICS IA
        - DIAGNOSTICS_IA
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/create/{echantillonId}:
    post:
      operationId: RapportPrelevementController_create
      summary: Créer un rapport de prélèvement
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRapportPrelevementDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/this-provider/get-all:
    get:
      operationId: RapportPrelevementController_findAll
      summary: Liste des rapports de prélèvement
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/one/{id}:
    get:
      operationId: RapportPrelevementController_findOne
      summary: Recuperer un rapport de prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/getByEchantillonId/{echantillonId}:
    get:
      operationId: RapportPrelevementController_getByEchantillonId
      summary: Recuperer un rapport de prélèvement par echantillonId
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/findByProforma/{proformaId}:
    get:
      operationId: RapportPrelevementController_findByProforma
      summary: Recuperer un rapport de prélèvement par proforma
      parameters:
        - name: proformaId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/update/{id}:
    put:
      operationId: RapportPrelevementController_update
      summary: Mettre à jour un rapport de prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRapportPrelevementDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/delete/{id}:
    delete:
      operationId: RapportPrelevementController_remove
      summary: Supprimer un rapport de prélèvement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/rapport-prelevement/delete-multiple:
    put:
      operationId: RapportPrelevementController_removeMultiple
      summary: Supprimer plusieurs rapports de prélèvement
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RAPPORT DE PRÉLÈVEMENT
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/apps-configuration:
    post:
      operationId: AppsConfigurationController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAppsConfigurationDto'
      responses:
        '201':
          description: ''
      tags:
        - LES APPLICATIONS DISPONIBLES SUR LA PLATEFORME
    get:
      operationId: AppsConfigurationController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS DISPONIBLES SUR LA PLATEFORME
  /api/v1/apps-configuration/{id}:
    get:
      operationId: AppsConfigurationController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS DISPONIBLES SUR LA PLATEFORME
    patch:
      operationId: AppsConfigurationController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAppsConfigurationDto'
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS DISPONIBLES SUR LA PLATEFORME
    delete:
      operationId: AppsConfigurationController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS DISPONIBLES SUR LA PLATEFORME
  /api/v1/provider-application:
    post:
      operationId: ProviderApplicationController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProviderApplicationDto'
      responses:
        '201':
          description: ''
      tags:
        - LES APPLICATIONS D UN FOURNISSEUR
    get:
      operationId: ProviderApplicationController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS D UN FOURNISSEUR
  /api/v1/provider-application/{id}:
    get:
      operationId: ProviderApplicationController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS D UN FOURNISSEUR
    patch:
      operationId: ProviderApplicationController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProviderApplicationDto'
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS D UN FOURNISSEUR
    delete:
      operationId: ProviderApplicationController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - LES APPLICATIONS D UN FOURNISSEUR
  /api/v1/plan/create:
    post:
      operationId: PlanController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePlanDto'
      responses:
        '201':
          description: ''
      tags:
        - Plan de souscription
  /api/v1/plan/all:
    get:
      operationId: PlanController_findAll
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - Plan de souscription
  /api/v1/plan/{id}:
    get:
      operationId: PlanController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Plan de souscription
  /api/v1/plan/update/{id}:
    put:
      operationId: PlanController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePlanDto'
      responses:
        '200':
          description: ''
      tags:
        - Plan de souscription
  /api/v1/plan/delete/{id}:
    delete:
      operationId: PlanController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Plan de souscription
  /api/v1/planification/createMany:
    post:
      operationId: PlanificationController_createMany
      summary: Planifier plusieurs analyses
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreatePlanificationDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/start-all-planified/{bordereauId}/{laboId}:
    put:
      operationId: PlanificationController_startAllPlanifiedByBordereau
      summary: Mettre en cours toutes les analyses planifiées
      parameters:
        - name: bordereauId
          required: true
          in: path
          schema:
            type: string
        - name: laboId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/start-all-planified/{labId}:
    put:
      operationId: PlanificationController_startAllPlanified
      summary: Mettre en cours toutes les analyses planifiées
      parameters:
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/technician-workload/{laboratoryId}/{technicianId}:
    get:
      operationId: PlanificationController_getTechnicianWorkload
      summary: Supprimer une planification
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: technicianId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/remove/{id}:
    delete:
      operationId: PlanificationController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/removeMany:
    put:
      operationId: PlanificationController_removeMany
      summary: Supprimer plusieurs planifications
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/delete-by-demande/{demandeId}/{laboratoryId}:
    delete:
      operationId: PlanificationController_deleteByDemandeAndLab
      summary: Supprimer une planification par demande
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/delete-by-echantillon-laboratoire/{echantillonId}/{laboratoryId}:
    delete:
      operationId: PlanificationController_deleteByEchantillonAndLaboratory
      summary: Supprimer une planification par echantillon et laboratoire
      parameters:
        - name: echantillonId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/planification/delete-by-echantillon-item/{echantillonItemId}/{laboratoryId}:
    delete:
      operationId: PlanificationController_deleteByEchantillonItemAndLaboratory
      summary: Supprimer une planification echantillonItem and laboratoryId
      parameters:
        - name: echantillonItemId
          required: true
          in: path
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PLANIFICATION D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/appliquate-critere/{laboratoryId}:
    post:
      operationId: ResultatAnalyseController_applicateCritere
      summary: Appliquer le seuil de conformité
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppliquateCritereDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/edit-seuil-value:
    put:
      operationId: ResultatAnalyseController_editSeuilValue
      summary: Modifier la valeur du seuil
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditSeuilValueDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/remove-criteria/{laboratoryId}:
    post:
      operationId: ResultatAnalyseController_removeCriteria
      summary: Supprimer un critère d'un résultat d'analyse
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoveCriteriaDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/reset-seuils/{laboratoryId}:
    post:
      operationId: ResultatAnalyseController_resetSeuils
      summary: Réinitialiser les seuils et retirer les critères associés
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResetSeuilsDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/validate-without-critere:
    post:
      operationId: ResultatAnalyseController_validateWithoutCritere
      summary: Valider un échantillon sans critère
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidationWithoutCriteriaDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/create-many:
    post:
      operationId: ResultatAnalyseController_createMany
      summary: Ajouter plusieurs résultats d'analyse
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateResultatAnalyseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/delete/{id}:
    delete:
      operationId: ResultatAnalyseController_delete
      summary: Supprimer un résultat d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/validate/{id}:
    put:
      operationId: ResultatAnalyseController_validateResult
      summary: Valider un résultat d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
        - name: conformite
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/validate-many:
    put:
      operationId: ResultatAnalyseController_validateMany
      summary: Valider plusieurs résultats d'analyse
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/reject/{id}:
    put:
      operationId: ResultatAnalyseController_rejectResult
      summary: Rejeter un résultat d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvalidateResultDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/invalidate/{id}:
    put:
      operationId: ResultatAnalyseController_invalidateResult
      summary: Invalider un résultat d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvalidateResultDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/reject-off-demande/{demandeId}/{laboratory}:
    put:
      operationId: ResultatAnalyseController_rejectEchanResultOffDemandeAnalyseForLabo
      summary: Rejeter les résultats d'analyse d'un échantillon hors demande d'analyse
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
        - name: laboratory
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-hors-spec/{id}:
    put:
      operationId: ResultatAnalyseController_tooggleHorsSpec
      summary: Basculer un résultat d'analyse hors spécification
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-analyzed-in-place/{id}:
    put:
      operationId: ResultatAnalyseController_toggleAnalyzedInPlace
      summary: Analyser sur site oui/non
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-hs-by-demande-and-lab/{demandeId}/{laboratory}:
    put:
      operationId: ResultatAnalyseController_toggleHorsSpecByDemandeAndLab
      summary: Basculer un résultat d'analyse hors site par demande et laboratoire
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
        - name: laboratory
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-hs-item-and-lab/{itemId}/{laboratory}:
    put:
      operationId: ResultatAnalyseController_toggleHorsSpecByItemAndLab
      summary: Basculer un résultat d'analyse hors site par item et laboratoire
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
        - name: laboratory
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-declassified/{id}:
    put:
      operationId: ResultatAnalyseController_tooggleDeclassified
      summary: Basculer un résultat d'analyse déclassé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-declassified-by-demande-and-lab/{demandeId}/{laboratory}:
    put:
      operationId: ResultatAnalyseController_toggleDeclassifiedByDemandeAndLab
      summary: Basculer un résultat d'analyse déclassé par demande et laboratoire
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
        - name: laboratory
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/toggle-declassified-by-item-and-lab/{itemId}/{laboratory}:
    put:
      operationId: ResultatAnalyseController_toggleDeclassifiedByItemAndLab
      summary: Basculer un résultat d'analyse déclassé par item et laboratoire
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
        - name: laboratory
          required: true
          in: path
          schema:
            type: string
        - name: action
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/delete-many:
    put:
      operationId: ResultatAnalyseController_deleteMany
      summary: Rejeter plusieurs résultats d'analyse avec motif et actions
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvalidateManyResultsDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/resultat-analyse/update-result/{id}:
    put:
      operationId: ResultatAnalyseController_updateResult
      summary: Mettre à jour un résultat d'analyse
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateResultatAnalyseDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - RESULTAT D'ANALYSE
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/create:
    post:
      operationId: CriteriaController_create
      summary: Creer un critère d interpretataion
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCriterionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/load:
    post:
      operationId: CriteriaController_load
      summary: Importer
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/by-laboratory/{labId}:
    get:
      operationId: CriteriaController_findAll
      summary: Trouver la liste des criteres par laboratoire
      parameters:
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/one/{id}:
    get:
      operationId: CriteriaController_findOne
      summary: Trouver un critere
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/this-provider:
    get:
      operationId: CriteriaController_All
      summary: Trouver un critere
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/update/{id}:
    put:
      operationId: CriteriaController_update
      summary: Modifier un critere
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCriterionDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/delete/{id}:
    delete:
      operationId: CriteriaController_remove
      summary: Supprimer un critere
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/assign/{criteriaId}:
    post:
      operationId: CriteriaController_assignToParams
      summary: Associer  un critere a des parametres
      parameters:
        - name: criteriaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: CriteriaController_updateAssignToParams
      summary: Modifier l association des parametres a un critere
      parameters:
        - name: criteriaId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/laboratory/criteria/remove-parameters/{criterionId}:
    put:
      operationId: CriteriaController_removeParameters
      summary: Supprimer des parametres d un critere
      parameters:
        - name: criterionId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - CRITERE D INTERPRETATION
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/create:
    post:
      operationId: InSituMeasureController_create
      summary: Créer une mesure in situ
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInSituMeasureDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/this-provider:
    get:
      operationId: InSituMeasureController_findAll
      summary: Liste des mesures in situ de ce prestataire
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/one/{id}:
    get:
      operationId: InSituMeasureController_findOne
      summary: Recuperer une mesure
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/by-echantillon/{id}:
    get:
      operationId: InSituMeasureController_findByEchantillonId
      summary: Recuperer une mesure
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/by-laboratory/{id}:
    get:
      operationId: InSituMeasureController_findByLaboratoryId
      summary: Recuperer une mesure
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/update/{id}:
    put:
      operationId: InSituMeasureController_update
      summary: Modifier une mesure in situ
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInSituMeasureDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/{id}:
    delete:
      operationId: InSituMeasureController_remove
      summary: Supprimer une mesure in situ
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure/bulk-delete:
    put:
      operationId: InSituMeasureController_bulkDelete
      summary: Supprimer plusieurs mesures in situ
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/create/{insituId}:
    post:
      operationId: InSituMeasureItemController_create
      summary: Créer une mesure in situ item
      parameters:
        - name: insituId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInSituMeasureItemDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/create-many/{insituId}:
    post:
      operationId: InSituMeasureItemController_createMany
      summary: Créer plusieurs mesures in situ item
      parameters:
        - name: insituId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInSituMeasureItemDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/this-provider:
    get:
      operationId: InSituMeasureItemController_findAll
      summary: Liste des mesures in situ item de ce prestataire
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/one/{id}:
    get:
      operationId: InSituMeasureItemController_findOne
      summary: Recuperer une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/by-echantillon/{id}:
    get:
      operationId: InSituMeasureItemController_findByEchantillonId
      summary: Recuperer une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/by-laboratory/{id}:
    get:
      operationId: InSituMeasureItemController_findByLaboratoryId
      summary: Recuperer une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/by-insitu/{id}:
    get:
      operationId: InSituMeasureItemController_findByInSituId
      summary: Recuperer une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/update/{id}:
    put:
      operationId: InSituMeasureItemController_update
      summary: Modifier une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInSituMeasureItemDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/delete/{id}:
    delete:
      operationId: InSituMeasureItemController_remove
      summary: Supprimer une mesure in situ item
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/in-situ-measure-item/delete-many:
    put:
      operationId: InSituMeasureItemController_removeByInSitu
      summary: Supprimer une mesure in situ item
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MESURE IN SITU ITEM
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/apps-stats/all-stats:
    get:
      operationId: StatsSectionController_findAll
      summary: Recuperer les statistiques
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - STATISTIQUES
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/service/user-lab/create:
    post:
      operationId: UserLabsController_create
      summary: Ajouter un utilisateur de laboratoire
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserLabDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Administrateur de fournisseur de service
  /api/v1/service/user-lab/create/bulk:
    post:
      operationId: UserLabsController_createBulk
      summary: Ajouter plusieurs utilisateurs de laboratoire
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CreateUserLabDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/by-lab/{labId}:
    get:
      operationId: UserLabsController_findoneByLab
      summary: Trouver tous les utilisateurs de laboratoire
      parameters:
        - name: labId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/one/{id}:
    get:
      operationId: UserLabsController_findOne
      summary: Trouver un utilisateur de laboratoire
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/by-user/{userId}:
    get:
      operationId: UserLabsController_findByUser
      summary: Trouver les utilisateurs de laboratoire par utilisateur
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/by-role/{role}:
    get:
      operationId: UserLabsController_filterByRole
      summary: Trouver les utilisateurs de laboratoire par rôle
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/this:
    get:
      operationId: UserLabsController_getProviderUsers
      summary: Trouver les utilisateurs de laboratoire du fournisseur connecté
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Fournisseur de service
  /api/v1/service/user-lab/remove-completely/{id}:
    delete:
      operationId: UserLabsController_removeCompletely
      summary: Supprimer un utilisateur de laboratoire définitivement
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Administrateur de fournisseur de service
  /api/v1/service/user-lab/remove-completely-bulk:
    put:
      operationId: UserLabsController_removeCompletelyBulk
      summary: Supprimer plusieurs utilisateurs de laboratoire définitivement
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulKDeleteBody'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      security:
        - bearer: []
        - cookieAuth: []
      tags:
        - Administrateur de fournisseur de service
  /api/v1/report-signer/create:
    post:
      operationId: ReportSignerController_create
      summary: Créer un signataire de rapport
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReportSignerDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Signataires de rapports
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/report-signer/this:
    get:
      operationId: ReportSignerController_findAll
      summary: Lister les signataires de rapports du fournisseur
      parameters:
        - name: laboratoryId
          required: false
          in: query
          description: Filtrer par laboratoire ou "global" pour les signataires sans labo
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Signataires de rapports
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/report-signer/{id}:
    get:
      operationId: ReportSignerController_findOne
      summary: Récupérer un signataire de rapport
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Signataires de rapports
        - Fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/report-signer/update/{id}:
    put:
      operationId: ReportSignerController_update
      summary: Mettre à jour un signataire de rapport
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateReportSignerDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Signataires de rapports
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/report-signer/delete/{id}:
    delete:
      operationId: ReportSignerController_remove
      summary: Supprimer un signataire de rapport
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Signataires de rapports
        - Administrateur de fournisseur de service
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/create:
    post:
      operationId: DevisController_create
      summary: Créer un nouveau devis
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDeviDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/add-item/{id}:
    post:
      operationId: DevisController_addItem
      summary: Ajouter un item au devis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDeviItemDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/add-parameter/{itemId}:
    post:
      operationId: DevisController_addParameter
      summary: Ajouter un paramètre au devis
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/this-provider:
    get:
      operationId: DevisController_findAll
      summary: Récupérer tous les devis
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/one/{id}:
    get:
      operationId: DevisController_findOne
      summary: Récupérer un devis par son id
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/update/{id}:
    put:
      operationId: DevisController_update
      summary: Mettre à jour un devis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDeviDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/delete/{id}:
    delete:
      operationId: DevisController_remove
      summary: Supprimer un devis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/delete-item/{id}:
    delete:
      operationId: DevisController_removeItem
      summary: Supprimer un item du devis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/devis/delete-parameter/{id}:
    delete:
      operationId: DevisController_removeParameter
      summary: Supprimer un paramètre du devis
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DEVIS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/create:
    post:
      operationId: ProformaDraftController_create
      summary: Créer un brouillon de proforma
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaDraftDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/{proformaDraftId}/add-item:
    post:
      operationId: ProformaDraftController_addProformaDraftItem
      summary: Ajouter un item à un brouillon de proforma
      parameters:
        - name: proformaDraftId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaDraftItemDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/{proformaDraftId}/add-item-param/{proformaDraftItemId}:
    post:
      operationId: ProformaDraftController_addParametersToProformaDraft
      summary: Ajouter des analyses à un item de brouillon de proforma
      parameters:
        - name: proformaDraftId
          required: true
          in: path
          schema:
            type: string
        - name: proformaDraftItemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaDraftItemAnalyseDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/this-customer:
    get:
      operationId: ProformaDraftController_findByCustomerId
      summary: Récupérer tous les brouillons de proforma pour un client
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/this-provider:
    get:
      operationId: ProformaDraftController_findAllByServiceProviderId
      summary: Récupérer tous les brouillons de proforma pour un prestataire
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/one/{id}:
    get:
      operationId: ProformaDraftController_findOne
      summary: Récupérer un brouillon de proforma par son ID
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/update/{id}:
    put:
      operationId: ProformaDraftController_update
      summary: Mettre à jour un brouillon de proforma
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProformaDraftDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/cancel/{id}:
    put:
      operationId: ProformaDraftController_cancel
      summary: Annuler une demande de proforma avec motif
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelProformaDraftDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/update-item/{proformaDraftItemId}:
    put:
      operationId: ProformaDraftController_updateProformaDraftItem
      summary: Mettre à jour un item de brouillon de proforma
      parameters:
        - name: proformaDraftItemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProformaDraftItemDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/delete/{id}:
    delete:
      operationId: ProformaDraftController_remove
      summary: Supprimer un brouillon de proforma
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/delete-many:
    put:
      operationId: ProformaDraftController_removeMany
      summary: Supprimer plusieurs brouillons de proforma
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/hard-delete/{id}:
    delete:
      operationId: ProformaDraftController_hardDelete
      summary: Supprimer complètement un brouillon de proforma
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/hard-delete-many:
    put:
      operationId: ProformaDraftController_hardDeleteMany
      summary: Supprimer complètement plusieurs brouillons de proforma
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/delete-item/{proformaDraftId}/{proformaDraftItemId}:
    delete:
      operationId: ProformaDraftController_removeProformaDraftItem
      summary: Supprimer un item de brouillon de proforma
      parameters:
        - name: proformaDraftItemId
          required: true
          in: path
          schema:
            type: string
        - name: proformaDraftId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/proforma-draft/delete-item-param/{proformaDraftItemAnalyseId}:
    delete:
      operationId: ProformaDraftController_removeProformaDraftItemAnalyse
      summary: Supprimer un paramètre d'un item de brouillon de proforma
      parameters:
        - name: proformaDraftItemAnalyseId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Proforma des clients
        - Proforma des clients
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/customer-scores:
    get:
      operationId: AdvancedAnalyticsController_getCustomerScores
      summary: Récupérer les scores des clients
      parameters:
        - name: category
          required: false
          in: query
          schema:
            enum:
              - EXCELLENT
              - GOOD
              - AVERAGE
              - POOR
              - CRITICAL
            type: string
      responses:
        '200':
          description: Liste des scores clients
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/customer-scores/top:
    get:
      operationId: AdvancedAnalyticsController_getTopCustomers
      summary: Top clients par score
      parameters:
        - name: limit
          required: false
          in: query
          schema:
            type: number
      responses:
        '200':
          description: Top clients
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/customer-scores/at-risk:
    get:
      operationId: AdvancedAnalyticsController_getAtRiskCustomers
      summary: Clients à risque de churn
      parameters:
        - name: threshold
          required: false
          in: query
          schema:
            type: number
      responses:
        '200':
          description: Clients à risque
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/customer-scores/update:
    get:
      operationId: AdvancedAnalyticsController_updateCustomerScores
      summary: Mettre à jour les scores clients (manuel)
      parameters: []
      responses:
        '200':
          description: Scores mis à jour
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/quality/laboratory/{laboratoryId}:
    get:
      operationId: AdvancedAnalyticsController_getLabQualityReport
      summary: Rapport qualité d'un laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
        - name: year
          required: false
          in: query
          schema:
            type: number
        - name: month
          required: false
          in: query
          schema:
            type: number
      responses:
        '200':
          description: Rapport qualité du laboratoire
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/quality/parameter/{parameterId}/trends:
    get:
      operationId: AdvancedAnalyticsController_getParameterQualityTrends
      summary: Tendances qualité d'un paramètre
      parameters:
        - name: parameterId
          required: true
          in: path
          schema:
            type: string
        - name: months
          required: false
          in: query
          schema:
            type: number
      responses:
        '200':
          description: Tendances qualité du paramètre
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/quality/alerts:
    get:
      operationId: AdvancedAnalyticsController_getQualityAlerts
      summary: Alertes qualité
      parameters: []
      responses:
        '200':
          description: Liste des alertes qualité
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/quality/calculate:
    get:
      operationId: AdvancedAnalyticsController_calculateQualityMetrics
      summary: Calculer les métriques qualité (manuel)
      parameters: []
      responses:
        '200':
          description: Métriques qualité calculées
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/analytics/dashboard:
    get:
      operationId: AdvancedAnalyticsController_getAnalyticsDashboard
      summary: Dashboard analytics complet
      parameters: []
      responses:
        '200':
          description: Dashboard complet
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Analyses avancées
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs:
    get:
      operationId: NatureConfigController_getNatureConfigs
      summary: Récupérer toutes les configurations de nature d'échantillon
      parameters:
        - name: includeInactive
          required: false
          in: query
          description: Inclure les configurations inactives
          schema:
            type: boolean
      responses:
        '200':
          description: Liste des configurations de nature d'échantillon
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: NatureConfigController_createNatureConfig
      summary: Créer une nouvelle configuration de nature d'échantillon
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNatureConfigDto'
      responses:
        '201':
          description: Configuration créée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/key/{key}:
    get:
      operationId: NatureConfigController_getNatureConfigByKey
      summary: Récupérer une configuration de nature d'échantillon par sa clé
      parameters:
        - name: key
          required: true
          in: path
          description: 'Clé de la configuration (ex: "aliment", "eau", "sol")'
          schema:
            type: string
      responses:
        '200':
          description: Configuration de nature d'échantillon
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/{id}:
    put:
      operationId: NatureConfigController_updateNatureConfig
      summary: Mettre à jour une configuration de nature d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          description: ID de la configuration à mettre à jour
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNatureConfigDto'
      responses:
        '200':
          description: Configuration mise à jour
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: NatureConfigController_deleteNatureConfig
      summary: Supprimer une configuration de nature d'échantillon
      parameters:
        - name: id
          required: true
          in: path
          description: ID de la configuration à supprimer
          schema:
            type: string
        - name: reason
          required: false
          in: query
          description: Raison de la suppression
          schema:
            type: string
      responses:
        '200':
          description: Configuration supprimée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/defaults:
    post:
      operationId: NatureConfigController_createDefaultNatureConfigs
      summary: Créer les configurations de nature d'échantillon par défaut
      parameters: []
      responses:
        '201':
          description: Configurations par défaut créées
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/reorder:
    put:
      operationId: NatureConfigController_reorderNatureConfigs
      summary: Réorganiser l'ordre des configurations de nature d'échantillon
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReorderNatureConfigDto'
      responses:
        '200':
          description: Configurations réorganisées
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/stats/usage:
    get:
      operationId: NatureConfigController_getNatureConfigUsageStats
      summary: Statistiques d'utilisation des natures d'échantillon
      parameters:
        - name: days
          required: false
          in: query
          description: Période d'analyse en jours
          schema:
            type: number
      responses:
        '200':
          description: Statistiques d'utilisation
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/nature-configs/map/{natureEchantillon}:
    get:
      operationId: NatureConfigController_mapNatureToConfig
      summary: Mapper une nature d'échantillon à une configuration
      parameters:
        - name: natureEchantillon
          required: true
          in: path
          description: Nature d'échantillon à mapper
          schema:
            type: string
      responses:
        '200':
          description: Configuration correspondante ou null
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Configurations des natures d'échantillon
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/models:
    get:
      operationId: PredictionController_getModels
      summary: Récupérer tous les modèles de prédiction
      parameters:
        - name: status
          required: false
          in: query
          schema:
            enum:
              - DRAFT
              - TRAINING
              - ACTIVE
              - DEPRECATED
              - ARCHIVED
            type: string
        - name: type
          required: false
          in: query
          schema:
            enum:
              - REVENUE
              - CUSTOMER_CHURN
              - SAMPLE_DEMAND
              - RESOURCE_NEEDS
              - MARKET_TRENDS
              - COST_PROJECTION
              - CUSTOM
            type: string
      responses:
        '200':
          description: Liste des modèles de prédiction
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: PredictionController_createModel
      summary: Créer un nouveau modèle de prédiction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePredictionModelDto'
      responses:
        '201':
          description: Modèle de prédiction créé
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/models/{id}:
    get:
      operationId: PredictionController_getModel
      summary: Récupérer un modèle de prédiction spécifique
      parameters:
        - name: id
          required: true
          in: path
          description: ID du modèle
          schema:
            type: string
        - name: includePerformance
          required: false
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Modèle de prédiction
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: PredictionController_updateModel
      summary: Mettre à jour un modèle de prédiction
      parameters:
        - name: id
          required: true
          in: path
          description: ID du modèle
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePredictionModelDto'
      responses:
        '200':
          description: Modèle de prédiction mis à jour
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: PredictionController_deleteModel
      summary: Supprimer un modèle de prédiction
      parameters:
        - name: id
          required: true
          in: path
          description: ID du modèle
          schema:
            type: string
      responses:
        '200':
          description: Modèle de prédiction supprimé
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/models/{id}/train:
    post:
      operationId: PredictionController_trainModel
      summary: Entraîner un modèle de prédiction
      parameters:
        - name: id
          required: true
          in: path
          description: ID du modèle
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrainModelDto'
      responses:
        '200':
          description: Modèle entraîné avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/generate:
    post:
      operationId: PredictionController_createPrediction
      summary: Générer une nouvelle prédiction
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePredictionDto'
      responses:
        '201':
          description: Prédiction générée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/results:
    get:
      operationId: PredictionController_getPredictions
      summary: Récupérer les résultats de prédiction
      parameters:
        - name: predictionType
          required: false
          in: query
          description: Type de prédiction
          schema:
            enum:
              - REVENUE
              - CUSTOMER_CHURN
              - SAMPLE_DEMAND
              - RESOURCE_NEEDS
              - MARKET_TRENDS
              - COST_PROJECTION
              - CUSTOM
            type: string
        - name: targetPeriod
          required: false
          in: query
          description: Période de prédiction
          schema:
            enum:
              - DAILY
              - WEEKLY
              - MONTHLY
              - QUARTERLY
              - YEARLY
            type: string
        - name: targetYear
          required: false
          in: query
          description: Année ciblée
          schema:
            type: number
        - name: includeModelDetails
          required: false
          in: query
          description: Inclure les détails du modèle
          schema:
            type: boolean
        - name: limit
          required: false
          in: query
          description: Nombre maximum de résultats
          schema:
            type: number
      responses:
        '200':
          description: Résultats de prédiction
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/results/{id}/verify:
    put:
      operationId: PredictionController_verifyPrediction
      summary: Vérifier une prédiction avec des données réelles
      parameters:
        - name: id
          required: true
          in: path
          description: ID de la prédiction
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyPredictionDto'
      responses:
        '200':
          description: Prédiction VERIFIED
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/alerts:
    get:
      operationId: PredictionController_getAlerts
      summary: Récupérer les alertes actives
      parameters:
        - name: type
          required: false
          in: query
          schema:
            enum:
              - REVENUE_DROP
              - CLIENT_CHURN
              - QUALITY_ISSUE
              - CAPACITY_LIMIT
              - PAYMENT_DELAY
              - EFFICIENCY_DROP
              - SEASONAL_ANOMALY
              - PREDICTION_ALERT
            type: string
        - name: severity
          required: false
          in: query
          schema:
            enum:
              - LOW
              - MEDIUM
              - HIGH
              - CRITICAL
            type: string
      responses:
        '200':
          description: Liste des alertes actives
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: PredictionController_createAlert
      summary: Créer une nouvelle alerte
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePredictionAlertDto'
      responses:
        '201':
          description: Alerte créée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/alerts/{id}:
    put:
      operationId: PredictionController_updateAlert
      summary: Mettre à jour une alerte
      parameters:
        - name: id
          required: true
          in: path
          description: ID de l'alerte
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePredictionAlertDto'
      responses:
        '200':
          description: Alerte mise à jour
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: PredictionController_deleteAlert
      summary: Supprimer une alerte
      parameters:
        - name: id
          required: true
          in: path
          description: ID de l'alerte
          schema:
            type: string
      responses:
        '200':
          description: Alerte supprimée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/predictions/alerts/{id}/acknowledge:
    post:
      operationId: PredictionController_acknowledgeAlert
      summary: Acquitter une alerte
      parameters:
        - name: id
          required: true
          in: path
          description: ID de l'alerte
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AcknowledgeAlertDto'
      responses:
        '200':
          description: Alerte acquittée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Système de prédiction
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/my-notifications:
    get:
      operationId: UpdateNotificationController_getMyNotifications
      summary: Récupérer mes notifications non lues
      parameters: []
      responses:
        '200':
          description: Notifications récupérées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/has-critical:
    get:
      operationId: UpdateNotificationController_hasCriticalNotifications
      summary: Vérifier s'il y a des notifications critiques
      parameters: []
      responses:
        '200':
          description: Vérification effectuée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/mark-read/{recipientId}:
    patch:
      operationId: UpdateNotificationController_markAsRead
      summary: Marquer une notification comme lue
      parameters:
        - name: recipientId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Notification marquée comme lue
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/mark-all-read:
    patch:
      operationId: UpdateNotificationController_markAllAsRead
      summary: Marquer toutes mes notifications comme lues
      parameters: []
      responses:
        '200':
          description: Toutes les notifications marquées comme lues
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/history:
    get:
      operationId: UpdateNotificationController_listHistory
      summary: Historique des notes de version publiées
      parameters: []
      responses:
        '200':
          description: Historique récupéré
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/create:
    post:
      operationId: UpdateNotificationController_createNotification
      summary: Publier une note de version ciblée
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUpdateNotificationDto'
      responses:
        '201':
          description: Notification créée avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/update-notifications/sync-recipients/{id}:
    post:
      operationId: UpdateNotificationController_syncRecipients
      summary: Ajouter les destinataires manquants d’une note (ex. managers non ciblés)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Destinataires synchronisés
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Update Notifications
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts:
    post:
      operationId: ContractController_create
      summary: Créer un nouveau contrat
      description: Crée un nouveau contrat avec ses éléments associés
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContractDto'
      responses:
        '201':
          description: Contrat créé avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contract'
        '400':
          description: Données de requête invalides
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '409':
          description: Un contrat avec ce numéro existe déjà
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ContractController_findAll
      summary: Récupérer tous les contrats
      description: Récupère la liste paginée des contrats avec filtres optionnels
      parameters:
        - name: search
          required: false
          in: query
          description: Recherche dans le titre, numéro et description
          schema:
            type: string
        - name: companyId
          required: false
          in: query
          description: Filtrer par ID de compagnie
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Filtrer par statut
          schema:
            enum:
              - ACTIVE
              - INACTIVE
              - TERMINATED
              - PENDING
              - DRAFT
            type: string
        - name: limit
          required: false
          in: query
          description: 'Nombre d''éléments par page (défaut: 10)'
          schema:
            type: number
        - name: page
          required: false
          in: query
          description: 'Numéro de page (défaut: 1)'
          schema:
            type: number
      responses:
        '200':
          description: Liste des contrats récupérée avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Contract'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts/deleted:
    get:
      operationId: ContractController_findDeleted
      summary: Récupérer les contrats supprimés
      description: Récupère la liste paginée des contrats supprimés (soft delete)
      parameters:
        - name: limit
          required: false
          in: query
          description: 'Nombre d''éléments par page (défaut: 10)'
          schema:
            type: number
        - name: page
          required: false
          in: query
          description: 'Numéro de page (défaut: 1)'
          schema:
            type: number
      responses:
        '200':
          description: Liste des contrats supprimés récupérée avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Contract'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts/{id}:
    get:
      operationId: ContractController_findOne
      summary: Récupérer un contrat par ID
      description: Récupère les détails complets d'un contrat spécifique
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      responses:
        '200':
          description: Contrat trouvé avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contract'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ContractController_update
      summary: Mettre à jour un contrat
      description: Met à jour les informations d'un contrat existant
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContractDto'
      responses:
        '200':
          description: Contrat mis à jour avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contract'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
        '409':
          description: Conflit avec les données existantes
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ContractController_remove
      summary: Supprimer un contrat
      description: Supprime logiquement un contrat (soft delete)
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      responses:
        '204':
          description: Contrat supprimé avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts/companies/with-contracts:
    get:
      operationId: ContractController_findCompaniesWithContracts
      summary: Récupérer les compagnies ayant des contrats actifs
      description: Récupère la liste des compagnies ayant au moins un contrat actif
      parameters: []
      responses:
        '200':
          description: Liste des compagnies récupérée avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts/{id}/restore:
    put:
      operationId: ContractController_restore
      summary: Restaurer un contrat supprimé
      description: Restaure un contrat précédemment supprimé (annule le soft delete)
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      responses:
        '200':
          description: Contrat restauré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat supprimé non trouvé
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contracts/{id}/permanent:
    delete:
      operationId: ContractController_removePermanent
      summary: Supprimer définitivement un contrat
      description: Supprime définitivement un contrat de la base de données
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      responses:
        '204':
          description: Contrat supprimé définitivement avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
      tags:
        - Contrats
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items:
    post:
      operationId: ContractItemController_create
      summary: Créer un nouvel élément de contrat
      description: Crée un nouvel élément de contrat avec ses analyses associées
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContractItemDto'
      responses:
        '201':
          description: Élément de contrat créé avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractItem'
        '400':
          description: Données de requête invalides
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ContractItemController_findAll
      summary: Récupérer tous les éléments de contrat
      description: >-
        Récupère la liste paginée des éléments de contrat avec filtres
        optionnels
      parameters:
        - name: search
          required: false
          in: query
          description: Recherche dans le nom et description
          schema:
            type: string
        - name: isActive
          required: false
          in: query
          description: Filtrer par statut actif
          schema:
            type: boolean
        - name: contractId
          required: false
          in: query
          description: Filtrer par ID de contrat
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: 'Nombre d''éléments par page (défaut: 10)'
          schema:
            type: number
        - name: page
          required: false
          in: query
          description: 'Numéro de page (défaut: 1)'
          schema:
            type: number
      responses:
        '200':
          description: Liste des éléments de contrat récupérée avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/deleted:
    get:
      operationId: ContractItemController_findDeleted
      summary: Récupérer les éléments de contrat supprimés
      description: >-
        Récupère la liste paginée des éléments de contrat supprimés (soft
        delete)
      parameters:
        - name: contractId
          required: false
          in: query
          description: Filtrer par ID de contrat
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: 'Nombre d''éléments par page (défaut: 10)'
          schema:
            type: number
        - name: page
          required: false
          in: query
          description: 'Numéro de page (défaut: 1)'
          schema:
            type: number
      responses:
        '200':
          description: Liste des éléments de contrat supprimés récupérée avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/contract/{contractId}:
    get:
      operationId: ContractItemController_findByContract
      summary: Récupérer les éléments d'un contrat spécifique
      description: Récupère tous les éléments associés à un contrat donné
      parameters:
        - name: contractId
          required: true
          in: path
          description: ID unique du contrat
          schema:
            type: string
      responses:
        '200':
          description: Éléments du contrat récupérés avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/company/{companyId}:
    get:
      operationId: ContractItemController_findByCompany
      summary: Récupérer les éléments d'un contrat par ID de société
      description: Récupère tous les éléments associés à un contrat donné
      parameters:
        - name: companyId
          required: true
          in: path
          description: ID unique de la société
          schema:
            type: string
      responses:
        '200':
          description: Éléments du contrat récupérés avec succès
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Société non trouvée
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/{id}:
    get:
      operationId: ContractItemController_findOne
      summary: Récupérer un élément de contrat par ID
      description: Récupère les détails complets d'un élément de contrat spécifique
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      responses:
        '200':
          description: Élément de contrat trouvé avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: ContractItemController_update
      summary: Mettre à jour un élément de contrat
      description: Met à jour les informations d'un élément de contrat existant
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContractItemDto'
      responses:
        '200':
          description: Élément de contrat mis à jour avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractItem'
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ContractItemController_remove
      summary: Supprimer un élément de contrat
      description: Supprime logiquement un élément de contrat (soft delete)
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      responses:
        '204':
          description: Élément de contrat supprimé avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/{id}/restore:
    put:
      operationId: ContractItemController_restore
      summary: Restaurer un élément de contrat supprimé
      description: >-
        Restaure un élément de contrat précédemment supprimé (annule le soft
        delete)
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      responses:
        '200':
          description: Élément de contrat restauré avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat supprimé non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/{id}/delete-completely:
    delete:
      operationId: ContractItemController_deleteCompletely
      summary: Supprimer définitivement un élément de contrat
      description: Supprime définitivement un élément de contrat de la base de données
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      responses:
        '204':
          description: Élément de contrat supprimé définitivement avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contract-items/{id}/analyses:
    post:
      operationId: ContractItemController_addAnalysesToItem
      summary: Ajouter des analyses à un élément de contrat
      description: >-
        Ajoute une ou plusieurs analyses (par norme de paramètre) à un élément
        de contrat existant
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ManageAnalysesDto'
      responses:
        '201':
          description: Analyses ajoutées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat ou normes de paramètres non trouvés
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: ContractItemController_removeAnalysesFromItem
      summary: Supprimer des analyses d'un élément de contrat
      description: >-
        Supprime une ou plusieurs analyses (par norme de paramètre) d'un élément
        de contrat existant
      parameters:
        - name: id
          required: true
          in: path
          description: ID unique de l'élément de contrat
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ManageAnalysesDto'
      responses:
        '204':
          description: Analyses supprimées avec succès
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
        '404':
          description: Élément de contrat non trouvé
      tags:
        - Éléments de contrat
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies:
    post:
      operationId: PolicyController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePolicyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: PolicyController_findAll
      parameters:
        - name: type
          required: true
          in: query
          schema:
            type: string
        - name: scope
          required: true
          in: query
          schema:
            type: string
        - name: status
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/scope/{scope}:
    get:
      operationId: PolicyController_getByScope
      parameters:
        - name: scope
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/scope/{scope}/internal:
    get:
      operationId: PolicyController_getInternalPolicies
      parameters:
        - name: scope
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/scope/{scope}/external:
    get:
      operationId: PolicyController_getExternalPolicies
      parameters:
        - name: scope
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/{id}:
    get:
      operationId: PolicyController_findOne
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: PolicyController_update
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePolicyDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: PolicyController_remove
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/{id}/archive:
    put:
      operationId: PolicyController_archive
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/{id}/duplicate:
    post:
      operationId: PolicyController_duplicate
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/validations:
    post:
      operationId: PolicyController_validateChecklist
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidatePolicyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/validations/entity/{entityType}/{entityId}:
    get:
      operationId: PolicyController_getEntityValidations
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: PolicyController_deleteEntityValidations
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/validations/entity/{entityType}/{entityId}/compliance:
    get:
      operationId: PolicyController_checkEntityCompliance
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
        - name: scope
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/validations/entity/{entityType}/{entityId}/missing:
    get:
      operationId: PolicyController_getMissingPolicies
      parameters:
        - name: entityType
          required: true
          in: path
          schema:
            type: string
        - name: entityId
          required: true
          in: path
          schema:
            type: string
        - name: scope
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/validations/user/{userId}/stats:
    get:
      operationId: PolicyController_getUserValidationStats
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances:
    post:
      operationId: PolicyController_recordAcceptance
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AcceptPolicyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances/document/{documentType}/{documentId}:
    get:
      operationId: PolicyController_getDocumentAcceptances
      parameters:
        - name: documentType
          required: true
          in: path
          schema:
            type: string
        - name: documentId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances/document/{documentType}/{documentId}/check:
    get:
      operationId: PolicyController_checkAcceptance
      parameters:
        - name: documentType
          required: true
          in: path
          schema:
            type: string
        - name: documentId
          required: true
          in: path
          schema:
            type: string
        - name: customerId
          required: true
          in: query
          schema:
            type: string
        - name: userId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances/customer/{customerId}:
    get:
      operationId: PolicyController_getCustomerAcceptances
      parameters:
        - name: customerId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances/user/{userId}:
    get:
      operationId: PolicyController_getUserAcceptances
      parameters:
        - name: userId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/{id}/acceptances/stats:
    get:
      operationId: PolicyController_getPolicyAcceptanceStats
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/policies/acceptances/missing/{documentType}:
    get:
      operationId: PolicyController_getMissingAcceptances
      parameters:
        - name: documentType
          required: true
          in: path
          schema:
            type: string
        - name: scope
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Policies
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays:
    get:
      operationId: DgDashboardController_getDelaysDashboard
      parameters:
        - name: minDelayDays
          required: true
          in: query
          schema:
            type: string
        - name: includeResolved
          required: true
          in: query
          schema:
            type: string
        - name: customerId
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays/stats:
    get:
      operationId: DgDashboardController_getDelayStatsByPeriod
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays/demande/{demandeId}:
    get:
      operationId: DgDashboardController_getDemandeDelayTracking
      parameters:
        - name: demandeId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays/{id}:
    put:
      operationId: DgDashboardController_updateDelayTracking
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDelayTrackingDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays/{id}/resolve:
    put:
      operationId: DgDashboardController_resolveDelay
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/sup-dashboard/delays/update-tracking:
    post:
      operationId: DgDashboardController_forceUpdateTracking
      parameters: []
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DG Dashboard
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/dashboard/overview:
    get:
      operationId: SupervisorStatsController_getDashboardOverview
      summary: Dashboard overview - Vue d'ensemble pour le superviseur
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/financial:
    get:
      operationId: SupervisorStatsController_getFinancialStats
      summary: Statistiques financières
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/laboratory:
    get:
      operationId: SupervisorStatsController_getLaboratoryStats
      summary: Statistiques des laboratoires
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/export/eau:
    get:
      operationId: SupervisorStatsController_exportEauSamples
      summary: Export Excel – Échantillons eau
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: nature
          required: true
          in: query
          schema:
            type: string
        - name: columns
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/export/eau/async:
    post:
      operationId: SupervisorStatsController_exportEauSamplesAsync
      summary: Créer un job asynchrone d’export Excel (nature échantillons)
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: nature
          required: true
          in: query
          schema:
            type: string
        - name: columns
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/export/eau/jobs/{jobId}:
    get:
      operationId: SupervisorStatsController_getEauExportJobStatus
      summary: Statut d’un job d’export nature échantillons
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/export/eau/jobs/{jobId}/download:
    get:
      operationId: SupervisorStatsController_downloadEauExportJob
      summary: Télécharger le fichier Excel d’un job d’export nature
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/preview/customer-analytics:
    post:
      operationId: SupervisorStatsController_previewCustomerAnalytics
      summary: Aperçu analytique multi-clients
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerAnalyticsExportDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/supervisor-stats/export/customer-analytics:
    post:
      operationId: SupervisorStatsController_exportCustomerAnalytics
      summary: Export analytique Excel multi-clients
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerAnalyticsExportDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - SUPERVISOR STATISTICS
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/synch-for-all:
    get:
      operationId: OldSystemDataController_synchForAll
      summary: Synchroniser les données pour tous les fournisseurs de services
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/by-email:
    get:
      operationId: OldSystemDataController_findByEmail
      summary: Rechercher les rapports par email utilisateur
      parameters:
        - name: email
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/by-provider:
    get:
      operationId: OldSystemDataController_findAllByServiceProvider
      summary: Récupérer tous les rapports d'un service provider avec pagination
      parameters:
        - name: skip
          required: true
          in: query
          schema:
            type: string
        - name: take
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/query:
    get:
      operationId: OldSystemDataController_query
      summary: Recherche avancée avec filtres multiples
      parameters:
        - name: email
          required: true
          in: query
          schema:
            type: string
        - name: reportNumber
          required: true
          in: query
          schema:
            type: string
        - name: sentBy
          required: true
          in: query
          schema:
            type: string
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: skip
          required: true
          in: query
          schema:
            type: string
        - name: take
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/send-to-user:
    post:
      operationId: OldSystemDataController_sendManyOldReportToUser
      summary: Partager des rapports de l'ancien système avec un nouvel interlocuteur
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendReportsToUserDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/old-system-data/migrate:
    get:
      operationId: OldSystemDataController_migrate
      summary: Migrer les données depuis le fichier JSON vers la base de données
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - DONNÉES ANCIEN SYSTÈME
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment:
    get:
      operationId: EquipmentController_findAllEquipment
      parameters:
        - name: laboratoryId
          required: false
          in: query
          schema:
            type: string
        - name: categories
          required: false
          in: query
          description: 'Liste CSV: FIELD,ACCESSORY'
          schema:
            type: string
        - name: category
          required: false
          in: query
          schema:
            enum:
              - LABORATORY
              - FIELD
              - ACCESSORY
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: EquipmentController_createEquipment
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEquipmentDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/{id}:
    get:
      operationId: EquipmentController_findOneEquipment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: EquipmentController_updateEquipment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEquipmentDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: EquipmentController_deleteEquipment
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/report:
    post:
      operationId: EquipmentController_reportBreakdown
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBreakdownDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/list:
    get:
      operationId: EquipmentController_findAllBreakdowns
      parameters:
        - name: limit
          required: false
          in: query
          schema: {}
        - name: page
          required: false
          in: query
          schema: {}
        - name: isStopped
          required: false
          in: query
          schema: {}
        - name: resourceType
          required: false
          in: query
          schema:
            enum:
              - EQUIPMENT
              - HUMAN_RESOURCE
              - REAGENT
              - CONSUMABLE
            type: string
        - name: status
          required: false
          in: query
          schema:
            enum:
              - REPORTED
              - IN_REPAIR
              - RESOLVED
              - IRREPARABLE
            type: string
        - name: equipmentId
          required: false
          in: query
          schema: {}
        - name: laboratoryId
          required: false
          in: query
          schema: {}
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/stats:
    get:
      operationId: EquipmentController_getBreakdownStats
      parameters:
        - name: laboratoryId
          required: false
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/{id}:
    get:
      operationId: EquipmentController_findOneBreakdown
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
    put:
      operationId: EquipmentController_updateBreakdown
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBreakdownDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: EquipmentController_deleteBreakdown
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/{id}/stop:
    post:
      operationId: EquipmentController_stopBreakdown
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BreakdownActionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/{id}/start:
    post:
      operationId: EquipmentController_startBreakdown
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BreakdownActionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/equipment/breakdowns/{id}/events:
    post:
      operationId: EquipmentController_addBreakdownEvent
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddBreakdownEventDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Équipements & Pannes
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contact:
    post:
      operationId: ContactController_createContact
      summary: Créer une demande de contact
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactDto'
      responses:
        '201':
          description: Demande de contact créée avec succès
        '400':
          description: Données invalides
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contact
      security:
        - bearer: []
        - cookieAuth: []
    get:
      operationId: ContactController_getAllContacts
      summary: Récupérer toutes les demandes de contact (Admin)
      parameters: []
      responses:
        '200':
          description: Liste des demandes de contact
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contact
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/contact/{id}/process:
    patch:
      operationId: ContactController_markAsProcessed
      summary: Marquer une demande de contact comme traitée
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Demande marquée comme traitée
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Contact
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/gstock-access/labs:
    get:
      operationId: GstockAccessController_getLabNames
      summary: Lister les laboratoires disponibles
      description: >-
        Retourne la liste des laboratoires actifs du LIMS. Utilisé par Gstock
        pour configurer le mapping labo.
      parameters:
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Liste des laboratoires retournée avec succès
      tags:
        - Gstock Access
  /api/v1/gstock-access/sample-parameters-by-code-labo:
    get:
      operationId: GstockAccessController_getSampleParametersByCodeLabo
      summary: Récupérer les paramètres d'un échantillon par code labo
      description: >-
        Retourne les paramètres analytiques liés à un échantillon identifié par
        son code labo, pour le laboratoire associé à l'API key.
      parameters:
        - name: codeLabo
          required: true
          in: query
          description: Code laboratoire de l'échantillon dans le LIMS
          schema:
            type: string
        - name: x-lab-api-key
          in: header
          description: >-
            Clé API du laboratoire LIMS, permettant de résoudre automatiquement
            le labo cible
          required: true
          schema:
            type: string
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Gstock Access
  /api/v1/gstock-access/all-parameters:
    get:
      operationId: GstockAccessController_getParameterByLaboratory
      summary: Récupérer les paramètres analytiques disponibles pour un labo
      description: >-
        Retourne l'ensemble des paramètres/normes disponibles pour le
        laboratoire associé à l'API key.
      parameters:
        - name: x-lab-api-key
          in: header
          description: >-
            Clé API du laboratoire LIMS, permettant de résoudre automatiquement
            le labo cible
          required: true
          schema:
            type: string
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Gstock Access
  /api/v1/gstock-access/parameters-by-demande-reference:
    get:
      operationId: GstockAccessController_getParameterByDemandeReference
      summary: Récupérer les paramètres par référence de demande
      description: >-
        Retourne les paramètres analytiques associés à une demande donnée
        (référence LIMS) pour le labo résolu par API key.
      parameters:
        - name: demandeReference
          required: true
          in: query
          description: Référence de la demande dans le LIMS
          schema:
            type: string
        - name: x-lab-api-key
          in: header
          description: >-
            Clé API du laboratoire LIMS, permettant de résoudre automatiquement
            le labo cible
          required: true
          schema:
            type: string
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Gstock Access
  /api/v1/gstock-access/link-api-key:
    post:
      operationId: GstockAccessController_linkLabApiKey
      summary: Lier une clé API labo à un laboratoire LIMS
      description: >-
        Associe (ou met à jour) une clé API labo pour un Laboratory donné.
        Utilisé par le LIMS pour provisionner l'accès Gstock.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                laboratoryId:
                  type: string
                  description: Identifiant du laboratoire dans le LIMS
                apiKey:
                  type: string
                  description: Clé API labo à utiliser côté Gstock
              required:
                - laboratoryId
                - apiKey
      responses:
        '200':
          description: Clé API labo liée avec succès au laboratoire
      tags:
        - Gstock Access
  /api/v1/gstock-access/bordereau-samples-by-reference:
    get:
      operationId: GstockAccessController_getSampleParametersByBordereauReference
      summary: Récupérer les échantillons et paramètres liés à un bordereau d'analyse
      description: >-
        Retourne les informations d'un bordereau (client, échantillons,
        paramètres) pour le laboratoire associé à l'API key.
      parameters:
        - name: bordereauReference
          required: true
          in: query
          description: Référence du bordereau d'analyse (numBordereau)
          schema:
            type: string
        - name: x-lab-api-key
          in: header
          description: >-
            Clé API du laboratoire LIMS, permettant de résoudre automatiquement
            le labo cible
          required: true
          schema:
            type: string
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Gstock Access
  /api/v1/gstock-access/get-all-samples-by-lab:
    get:
      operationId: GstockAccessController_getAllSimpleNumbersByLaboratory
      summary: Lister les bordereaux accessibles pour un laboratoire
      description: >-
        Retourne une liste simplifiée de bordereaux (numéro, date, exigences
        particulières) pour le labo résolu par API key.
      parameters:
        - name: x-lab-api-key
          in: header
          description: >-
            Clé API du laboratoire LIMS, permettant de résoudre automatiquement
            le labo cible
          required: true
          schema:
            type: string
        - name: x-gstock-apikey
          in: header
          description: Clé applicative Gstock fournie par le LIMS
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - Gstock Access
  /api/v1/stats-dashboard/laboratories:
    get:
      operationId: StatsDashboardController_getLaboratories
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/overview:
    get:
      operationId: StatsDashboardController_getOverview
      summary: Get lightweight executive overview
      description: Single request used by the DG dashboard home page
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/kpis:
    get:
      operationId: StatsDashboardController_getKpisSummary
      summary: Get KPIs summary
      description: Get KPIs summary for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/commercial:
    get:
      operationId: StatsDashboardController_getStatsCommercial
      summary: Get commercial stats
      description: Get commercial stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/adv:
    get:
      operationId: StatsDashboardController_getStatsADV
      summary: Get ADV stats
      description: Get ADV stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/facturation:
    get:
      operationId: StatsDashboardController_getStatsFacturation
      summary: Get facturation stats
      description: Get facturation stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/reception:
    get:
      operationId: StatsDashboardController_getStatsReception
      summary: Get reception stats
      description: Get reception stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/analyses:
    get:
      operationId: StatsDashboardController_getStatsAnalyses
      summary: Get analyses stats
      description: Get analyses stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/rapports:
    get:
      operationId: StatsDashboardController_getStatsRapports
      summary: Get rapports stats
      description: Get rapports stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/analyses-par-bordereau:
    get:
      operationId: StatsDashboardController_getStatsAnalysesParBordereau
      summary: Get analyses par bordereau stats
      description: Get analyses par bordereau stats for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/proformas-not-factured:
    get:
      operationId: StatsDashboardController_getProformasNotFactured
      summary: Get proformas not factured
      description: Get proformas not factured for the dashboard
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/proformas-not-factured-by-customer:
    get:
      operationId: StatsDashboardController_getProformasNotFacturedByCustomer
      summary: Get proformas not factured by customer
      description: Get proformas not factured by customer for the dashboard
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/track-user-activity:
    get:
      operationId: StatsDashboardController_trackUserActivity
      summary: Track user activity
      description: Track user activity for the dashboard
      parameters:
        - name: from
          required: true
          in: query
          description: Date de début de la période
          schema:
            format: date-time
            example: '2025-01-01'
            type: string
        - name: to
          required: true
          in: query
          description: Date de fin de la période
          schema:
            format: date-time
            example: '2025-12-31'
            type: string
        - name: userId
          required: true
          in: query
          description: ID de l'utilisateur
          schema:
            example: 123e4567-e89b-12d3-a456-426614174000
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/laboratory-stats/monthly:
    get:
      operationId: StatsDashboardController_getMonthlyLaboratoryStats
      summary: Get monthly laboratory stats
      description: Get monthly laboratory stats for the dashboard
      parameters:
        - name: laboratoryId
          required: true
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO format)
          schema:
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO format)
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Alias de startDate (ISO format)
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: Alias de endDate (ISO format)
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/laboratory-stats/multiple:
    get:
      operationId: StatsDashboardController_getMultipleLaboratoryStats
      summary: Get multiple laboratory stats
      description: Get multiple laboratory stats for the dashboard
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO format)
          schema:
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO format)
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Alias de startDate (ISO format)
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: Alias de endDate (ISO format)
          schema:
            type: string
        - name: laboratoryIds
          required: true
          in: query
          description: IDs des laboratoires séparés par des virgules
          schema: {}
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/laboratory-stats/aggregate:
    get:
      operationId: StatsDashboardController_getAggregateStats
      summary: Get aggregate laboratory stats
      description: Get aggregate laboratory stats for the dashboard
      parameters:
        - name: startDate
          required: false
          in: query
          description: Date de début (ISO format)
          schema:
            type: string
        - name: endDate
          required: false
          in: query
          description: Date de fin (ISO format)
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Alias de startDate (ISO format)
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: Alias de endDate (ISO format)
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/stats-dashboard/laboratory-stats/export:
    get:
      operationId: StatsDashboardController_exportToExcel
      summary: Export laboratory stats to Excel
      description: Export laboratory stats to Excel for the dashboard
      parameters:
        - name: startDate
          required: true
          in: query
          description: Date de début (ISO format)
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          description: Date de fin (ISO format)
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: query
          description: ID du laboratoire (optionnel)
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Stats Dashboard
  /api/v1/sdk/calendar/laboratories:
    get:
      operationId: CalendarSdkController_getLaboratories
      summary: Lister les laboratoires du provider
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SDK Calendar - Technician Workload
  /api/v1/sdk/calendar/technicians/{laboratoryId}:
    get:
      operationId: CalendarSdkController_getTechnicians
      summary: Lister les techniciens d'un laboratoire
      parameters:
        - name: laboratoryId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Calendar - Technician Workload
  /api/v1/sdk/calendar/events:
    get:
      operationId: CalendarSdkController_getCalendarEvents
      summary: Récupérer les événements calendrier des analyses
      description: >-
        Retourne les analyses planifiées/en cours formatées pour FullCalendar,
        filtrable par labo, technicien, dates et statut.
      parameters:
        - name: from
          required: false
          in: query
          description: Date début (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-01'
            type: string
        - name: to
          required: false
          in: query
          description: Date fin (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-31'
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: technicianId
          required: false
          in: query
          description: userId du technicien
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Statuts séparés par virgule
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Calendar - Technician Workload
  /api/v1/sdk/calendar/demande-groups/{laboratoryId}:
    get:
      operationId: CalendarSdkController_getDemandeGroups
      summary: Récupérer les demandes groupées avec leurs analyses
      description: >-
        Retourne les labDemandeGroups d'un laboratoire avec les analyses
        associées, filtrable par dates et statut.
      parameters:
        - name: laboratoryId
          required: true
          in: path
          description: ID du laboratoire
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Date début (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-01'
            type: string
        - name: to
          required: false
          in: query
          description: Date fin (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-31'
            type: string
        - name: technicianId
          required: false
          in: query
          description: ID du technicien (userId)
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Statut des demandes (séparés par virgule)
          schema:
            type: string
        - name: search
          required: false
          in: query
          description: Recherche textuelle
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Calendar - Technician Workload
  /api/v1/sdk/calendar/workload:
    get:
      operationId: CalendarSdkController_getWorkload
      summary: Charge de travail agrégée par technicien
      description: >-
        Retourne le nombre d'analyses par statut pour chaque technicien,
        filtrable par labo et période.
      parameters:
        - name: from
          required: false
          in: query
          description: Date début (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-01'
            type: string
        - name: to
          required: false
          in: query
          description: Date fin (YYYY-MM-DD)
          schema:
            format: date-time
            example: '2026-03-31'
            type: string
        - name: laboratoryId
          required: false
          in: query
          description: ID du laboratoire
          schema:
            type: string
        - name: technicianId
          required: false
          in: query
          description: ID du technicien (userId)
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Statut exécution (NOT_STARTED, IN_PROGRESS, COMPLETED)
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Calendar - Technician Workload
  /api/v1/sdk/outgoing-stats/metrics:
    get:
      operationId: OutgoingStatsController_listMetrics
      summary: Catalogue des indicateurs exposés
      parameters: []
      responses:
        '200':
          description: ''
      tags:
        - SDK Outgoing Stats
  /api/v1/sdk/outgoing-stats:
    post:
      operationId: OutgoingStatsController_enqueue
      summary: Lancer un job de statistiques (file d’attente)
      description: >-
        Retourne un jobId. Le partenaire interroge GET /jobs/:jobId, et/ou
        fournit callbackUrl (JSON) et/ou email (Excel). Si callbackUrl est omis,
        le webhook OUTGOING actif « outgoing-stats » configuré en admin est
        utilisé.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryOutgoingStatsDto'
      responses:
        '201':
          description: ''
      tags:
        - SDK Outgoing Stats
  /api/v1/sdk/outgoing-stats/jobs/{jobId}:
    get:
      operationId: OutgoingStatsController_getJob
      summary: Statut d’un job (JSON disponible si completed)
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
      tags:
        - SDK Outgoing Stats
  /api/v1/integrations/events:
    get:
      operationId: IntegrationsController_listEvents
      summary: Catalogue d’événements webhook connus
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/api-keys:
    get:
      operationId: IntegrationsController_listApiKeys
      summary: Lister les clés API (INCOMING / OUTGOING)
      parameters:
        - name: isActive
          required: false
          in: query
          schema:
            type: boolean
        - name: direction
          required: false
          in: query
          schema:
            enum:
              - INCOMING
              - OUTGOING
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: IntegrationsController_createApiKey
      summary: Créer une clé API
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateApiKeyDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/api-keys/{id}:
    patch:
      operationId: IntegrationsController_updateApiKey
      summary: Mettre à jour une clé API
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateApiKeyDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/api-keys/{id}/reveal:
    get:
      operationId: IntegrationsController_revealApiKey
      summary: Révéler la valeur complète d’une clé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/api-keys/{id}/regenerate:
    post:
      operationId: IntegrationsController_regenerateApiKey
      summary: Régénérer une clé INCOMING
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/api-keys/{id}/revoke:
    post:
      operationId: IntegrationsController_revokeApiKey
      summary: Révoquer (désactiver) une clé
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/webhooks:
    get:
      operationId: IntegrationsController_listWebhooks
      summary: Lister les webhooks
      parameters:
        - name: event
          required: false
          in: query
          schema:
            type: string
        - name: isActive
          required: false
          in: query
          schema:
            type: boolean
        - name: direction
          required: false
          in: query
          schema:
            enum:
              - INCOMING
              - OUTGOING
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
    post:
      operationId: IntegrationsController_createWebhook
      summary: Créer un webhook
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWebhookDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/webhooks/{id}:
    patch:
      operationId: IntegrationsController_updateWebhook
      summary: Mettre à jour un webhook
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWebhookDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
    delete:
      operationId: IntegrationsController_deleteWebhook
      summary: Supprimer un webhook
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/webhooks/{id}/reveal-secret:
    get:
      operationId: IntegrationsController_revealWebhookSecret
      summary: Révéler le secret du webhook
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/integrations/webhooks/{id}/test:
    post:
      operationId: IntegrationsController_testWebhook
      summary: Tester un webhook OUTGOING (POST ping)
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - Integrations (API keys & Webhooks)
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions:
    get:
      operationId: MobilePreleveurController_listMyMissions
      summary: Lister mes missions (payload agrege)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/history:
    get:
      operationId: MobilePreleveurController_listMyHistoryMissions
      summary: Historique missions pagine (terminees / refusees)
      parameters:
        - name: page
          required: true
          in: query
          schema:
            type: string
        - name: limit
          required: true
          in: query
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}:
    get:
      operationId: MobilePreleveurController_getMyMission
      summary: Detail mission agrege pour le preleveur connecte
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/timeline:
    get:
      operationId: MobilePreleveurController_getMissionTimeline
      summary: Journal chronologique d une mission (timeline)
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/accept:
    put:
      operationId: MobilePreleveurController_acceptMission
      summary: Accepter une mission assignee
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/execution:
    put:
      operationId: MobilePreleveurController_saveMissionExecution
      summary: Sauvegarder le contexte execution mission (site)
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveMissionExecutionDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/bordereau:
    put:
      operationId: MobilePreleveurController_saveBordereau
      summary: Creer ou mettre a jour le bordereau (infos de base) + items proforma
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveMobileBordereauDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/reject:
    put:
      operationId: MobilePreleveurController_rejectMission
      summary: Refuser une mission assignee
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectMobileMissionDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/equipment-checklist:
    get:
      operationId: MobilePreleveurController_getEquipmentChecklist
      summary: Checklist materiel de la mission
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/equipment-checklist/confirm:
    put:
      operationId: MobilePreleveurController_confirmEquipmentChecklist
      summary: Confirmer la checklist materiel avant depart
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/echantillon-items/{itemId}/barcode:
    get:
      operationId: MobilePreleveurController_generateItemBarcode
      summary: Generer le code-barres (Code128) pour un item echantillon
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/echantillon-items/{itemId}/qr:
    get:
      operationId: MobilePreleveurController_generateItemQr
      summary: Alias code-barres (legacy qr route)
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/analysis-types:
    get:
      operationId: MobilePreleveurController_listAnalysisTypes
      summary: Catalogue types analyse (matrices + parametres TAF)
      parameters: []
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/echantillon-items/{itemId}/capture:
    put:
      operationId: MobilePreleveurController_captureSampleItem
      summary: Saisie terrain item echantillon + TAF
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CaptureMobileSampleItemDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/echantillon-items/{itemId}/insitu:
    put:
      operationId: MobilePreleveurController_saveInSituMeasureItem
      summary: Mesures in situ par item echantillon
      parameters:
        - name: itemId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveMobileInSituMeasureItemDto'
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/signature:
    post:
      operationId: MobilePreleveurController_submitSignature
      summary: Soumettre la signature client
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitClientSignatureDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/mobile/preleveur/me/missions/{prelevementId}/close:
    post:
      operationId: MobilePreleveurController_closeMission
      summary: Cloturer une mission et creer le rapport prelevement
      parameters:
        - name: prelevementId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloseMobileMissionDto'
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - MOBILE PRELEVEUR
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ops-kpi/dashboard/async:
    post:
      operationId: OpsKpiController_enqueueDashboard
      summary: Lancer le calcul de pilotage en job (pas de calcul dans la requête HTTP)
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PILOTAGE_OPERATIONNEL
        - PILOTAGE_OPERATIONNEL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ops-kpi/export/async:
    post:
      operationId: OpsKpiController_enqueueExport
      summary: Lancer l’export Excel de pilotage en job
      parameters:
        - name: startDate
          required: true
          in: query
          schema:
            type: string
        - name: endDate
          required: true
          in: query
          schema:
            type: string
        - name: laboratoryId
          required: true
          in: query
          schema:
            type: string
      responses:
        '201':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PILOTAGE_OPERATIONNEL
        - PILOTAGE_OPERATIONNEL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ops-kpi/jobs/{jobId}:
    get:
      operationId: OpsKpiController_getJobStatus
      summary: Statut d’un job de pilotage (résultat JSON si dashboard terminé)
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PILOTAGE_OPERATIONNEL
        - PILOTAGE_OPERATIONNEL
      security:
        - bearer: []
        - cookieAuth: []
  /api/v1/ops-kpi/jobs/{jobId}/download:
    get:
      operationId: OpsKpiController_downloadExportJob
      summary: Télécharger l’Excel d’un job export terminé
      parameters:
        - name: jobId
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: ''
        '401':
          description: Non autorisé Échec de la vérification de la clé d'authentification
      tags:
        - PILOTAGE_OPERATIONNEL
        - PILOTAGE_OPERATIONNEL
      security:
        - bearer: []
        - cookieAuth: []
info:
  title: LIMS API
  description: Secure Laboratory Information Management System API
  version: '1.0'
  contact: {}
tags: []
servers:
  - url: https://dev.enval-laboratoire.com
    description: developpement
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
      in: header
    cookieAuth:
      type: apiKey
      in: cookie
      name: accessToken
  schemas:
    UpdateMailPreferenceDto:
      type: object
      properties:
        allowMailNotifications:
          type: boolean
          example: false
      required:
        - allowMailNotifications
    OtpRequestDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@example.com
          description: Email de l'utilisateur
      required:
        - email
    PasswordResetRequestDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@example.com
          description: L'email de l'utilisateur pour envoyer le code de réinitialisation
        frontendUrl:
          type: string
          example: http://example.com/reset-password
          description: Lien de réinitialisation de mot de passe
      required:
        - email
        - frontendUrl
    PasswordResetDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@gmail.com
          description: L'email de l'utilisateur pour réinitialiser le mot de passe
        password:
          type: string
          example: John@45!
          description: Le nouveau mot de passe à définir
      required:
        - email
        - password
    SignupDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@example.com
          description: Email de l'utilisateur
          default: johndoe@example.com
        password:
          type: string
          example: John@45!
          description: Mot de passe de l'utilisateur
          default: John@45!
      required:
        - email
        - password
    UpdateUserDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@example.com
          description: Le mail de l'utilisateur
        phone:
          type: string
          example: +225-07-07-07-07
          description: Téléphone de l'utilisateur
          minLength: 8
        firstname:
          type: string
          example: John
          description: Le prénom de l'utilisateur
        lastname:
          type: string
          example: Doe
          description: Le nom de l'utilisateur
        position:
          type: string
          example: PDG
          description: Le poste occupé par l'utilisateur
        country:
          type: string
          example: Côte D'ivoire
          description: Le pays de l'utilisateur
        personalAddress:
          type: string
          example: Cocody
          description: L'adresse personnelle de l'utilisateur
        companyName:
          type: string
          example: Enval
          description: Le nom de la compagnie
        companyAddress:
          type: string
          example: Cocody
          description: L'adresse de la compagnie
        companyWebsite:
          type: string
          example: www.company.com
          description: Le site web de la compagnie
        companyEmail:
          type: string
          example: company@gmail.com
          description: L'email de la compagnie
        companyCountry:
          type: string
          example: CIV
          description: Le pays de la compagnie
        companyPostalCode:
          type: string
          example: '01'
          description: Le code postal de la compagnie
        companyPhone:
          type: string
          example: +225-07-07-07-07
          description: Le téléphone de la compagnie
        companyCity:
          type: string
          example: Cocody
          description: La ville de la compagnie
        lang:
          type: string
          example: fr
          description: La langue de l'utilisateur
        avatar:
          type: file
          description: L'avatar de l'utilisateur
          format: binary
          maxLength: 2097152
      required:
        - email
        - firstname
        - lastname
        - position
        - country
        - companyName
        - companyAddress
        - companyEmail
    SignInDto:
      type: object
      properties:
        email:
          type: string
          example: johndoe@example.com
          default: johndoe@example.com
        password:
          type: string
          example: John@45!
          default: John@45!
      required:
        - email
        - password
    SwitchAuthContextDto:
      type: object
      properties:
        userServiceId:
          type: string
          description: Identifiant de l'affectation de service à activer
        laboratoryId:
          type: string
          description: >-
            Laboratoire à activer. Obligatoire lorsque le service laboratoire en
            propose plusieurs.
      required:
        - userServiceId
    TrackPageVisitDto:
      type: object
      properties:
        pagePath:
          type: string
          description: Chemin de la page visitée
          example: /dashboard
        pageTitle:
          type: string
          description: Titre de la page
          example: Tableau de bord
        referrer:
          type: string
          description: URL de référence
        sessionId:
          type: string
          description: ID de session
        duration:
          type: number
          description: Durée de visite en secondes
        metadata:
          type: object
          description: Métadonnées additionnelles
      required:
        - pagePath
    TrackDownloadDto:
      type: object
      properties:
        resourceType:
          type: string
          description: Type de ressource
          enum:
            - RAPPORT
            - BORDEREAU
            - PROFORMA
            - FACTURE
        resourceId:
          type: string
          description: ID de la ressource
        resourceRef:
          type: string
          description: Référence du document
        fileName:
          type: string
          description: Nom du fichier
        fileSize:
          type: number
          description: Taille du fichier en bytes
        sessionId:
          type: string
          description: ID de session
        status:
          type: string
          description: Statut du téléchargement
          enum:
            - SUCCESS
            - FAILED
            - PARTIAL
            - CANCELLED
        errorMsg:
          type: string
          description: Message d'erreur si échec
        metadata:
          type: object
          description: Métadonnées additionnelles
      required:
        - resourceType
        - resourceId
    UpdateProfileDto:
      type: object
      properties:
        phone:
          type: string
          description: Le numéro de téléphone de l'utilisateur
          example: '0123456789'
        email:
          type: string
          description: L'email de l'utilisateur
          example: jdsjk@gmail.com
        firstname:
          type: string
          description: Le prénom de l'utilisateur
          example: Kouassi
        lastname:
          type: string
          description: Le nom de l'utilisateur
          example: Doe
        position:
          type: string
          description: La position de l'utilisateur
          example: Developpeur
        country:
          type: string
          description: Le pays de la compagnie
          example: Cote d'Ivoire
        avatar:
          type: string
          description: La photo de l'utilisateur
          example: https://example.com/photo.jpg
        signature:
          type: string
          description: L'adresse de l'utilisateur
          example: Cocody
        pronouns:
          type: string
          description: Le genre de l'utilisateur
          example: M
        birthdate:
          format: date-time
          type: string
          description: La date de naissance de l'utilisateur
          example: '2021-09-21'
        secondaryEmail:
          type: string
          description: Le nom de la compagnie de l'utilisateur
          example: Company
        secondaryPhone:
          type: string
          description: Le téléphone de la compagnie de l'utilisateur
          example: '0123456789'
        lockScreenEnabled:
          type: boolean
          description: Le verrouillage de l'écran de l'utilisateur
          example: true
        lockScreenTime:
          type: number
          description: Le temps de verrouillage de l'écran de l'utilisateur
          example: 600000
      required:
        - phone
        - firstname
        - lastname
        - position
        - country
    ChangePasswordDto:
      type: object
      properties:
        oldPassword:
          type: string
          description: Mot de passe actuel
          example: password123
          title: Mot de passe actuel
      required:
        - oldPassword
    ChangeEmailDto:
      type: object
      properties:
        password:
          type: string
          description: Mot de passe actuel
          example: password123
          title: Mot de passe actuel
        newEmail:
          type: string
          description: Nouvel email
          example: john@gamil.com
          title: Nouvel email
      required:
        - password
        - newEmail
    CreateLaboratoryDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du laboratoire
          example: Lab83qb1k
        description:
          type: string
          description: Description du laboratoire
          example: Molestias quas suscipit libero.
        status:
          type: object
          format: string
          default: ACTIVE
          description: Statut du laboratoire
          example: ACTIVE
        logo:
          type: file
          description: Photo du laboratoire
          format: binary
      required:
        - name
    UpdateLaboratoryDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du laboratoire
          example: Lab83qb1k
        description:
          type: string
          description: Description du laboratoire
          example: Molestias quas suscipit libero.
        status:
          type: object
          format: string
          default: ACTIVE
          description: Statut du laboratoire
          example: ACTIVE
        logo:
          type: file
          description: Photo du laboratoire
          format: binary
        id:
          type: string
          description: id du laboratoire
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
      required:
        - id
    CreateCertificateGroupDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du groupe de certificats
          example: Groupe Aflatoxines
        description:
          type: string
          description: Description du groupe de certificats
          example: Groupe regroupant tous les paramètres liés aux aflatoxines
        parameterIds:
          description: Liste des IDs des paramètres à associer
          example:
            - param-id-1
            - param-id-2
          type: array
          items:
            type: string
        laboratoryId:
          type: string
          description: ID du laboratoire (optionnel)
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
      required:
        - name
    UpdateCertificateGroupDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du groupe de certificats
          example: Groupe Aflatoxines
        description:
          type: string
          description: Description du groupe de certificats
          example: Groupe regroupant tous les paramètres liés aux aflatoxines
        parameterIds:
          description: Liste des IDs des paramètres à associer
          example:
            - param-id-1
            - param-id-2
          type: array
          items:
            type: string
        laboratoryId:
          type: string
          description: ID du laboratoire (optionnel)
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
        id:
          type: string
          description: ID du groupe de certificats
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
      required:
        - id
    CreateMatrixDto:
      type: object
      properties:
        name:
          type: string
          description: Nom de la matrice
          example: Matrice 1
          default: Mat-476
        description:
          type: string
          description: Description de la matrice
          example: >-
            Neque occaecati enim vel quod voluptatibus adipisci animi iure
            aliquam.
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
          example: r4f5d-4f5d-4f5d-4f5d
      required:
        - name
        - laboratoryId
    UpdateMatrixDto:
      type: object
      properties:
        name:
          type: string
          description: Nom de la matrice
          example: Matrice 1
          default: Mat-476
        description:
          type: string
          description: Description de la matrice
          example: >-
            Neque occaecati enim vel quod voluptatibus adipisci animi iure
            aliquam.
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
          example: r4f5d-4f5d-4f5d-4f5d
        id:
          type: string
          description: Identifiant de la matrice
          example: dsf4-4f5d-4f5d-4f5d
      required:
        - id
    BulKDeleteBody:
      type: object
      properties:
        ids:
          type: array
          example:
            - tss-4f5d-4f5d-4f5d
            - tss-4f5d-4f5d-4f5d
          description: Liste des ids des éléments à supprimer
    MergeMatricesDto:
      type: object
      properties:
        matrixIds:
          description: Liste des identifiants des matrices à fusionner
          example:
            - matrix-id-1
            - matrix-id-2
            - matrix-id-3
          type: array
          items:
            type: string
        newMatrixName:
          type: string
          description: Nom de la nouvelle matrice
          example: Aliments
        newMatrixDescription:
          type: string
          description: Description de la nouvelle matrice
          example: Matrice regroupant tous les types d'aliments
      required:
        - matrixIds
        - newMatrixName
    CreateParameterDto:
      type: object
      properties:
        name:
          type: string
          description: Le nom du parametre
          default: Param1
        description:
          type: string
          description: La description du parametre
          default: Param1 description
        isAccredited:
          type: boolean
          description: Le paramètre est il accredité
          default: false
        unitMeasure:
          type: string
          description: L'unité de mesure du parametre
          default: Kg
        price:
          type: integer
          description: Le prix du parametre
          default: 5000
        laboratoryId:
          type: string
          description: L'id du laboratoire
          default: uuiiiiiiiid-shdds
        isNew:
          type: boolean
          description: Est ce une nouvelle matrice
          default: true
        matriceId:
          type: string
          description: L'id  de la matrice si elle existe deja
          default: uiuid
        newMatriceName:
          type: string
          description: Le nom de la nouvelle matrice si elle n'existe pas
          default: New mat
        norme:
          type: string
          description: La norme du parametre
          default: Iso
        displayStyle:
          type: string
          description: Mode d'affichage du paramètre sur le rapport final
          enum:
            - NORMAL
            - ITALIC
            - NORMAL_BOLD
            - ITALIC_BOLD
            - UNDERLINE
            - UNDERLINE_BOLD
            - UNDERLINE_ITALIC
            - UNDERLINE_ITALIC_BOLD
          default: NORMAL
      required:
        - name
        - isAccredited
        - price
        - laboratoryId
        - isNew
    CatalogGridRowDto:
      type: object
      properties:
        parameterId:
          type: string
          description: Identifiant du paramètre existant. Absent pour une création.
        parameterNormId:
          type: string
          description: Identifiant de la norme éditée (remplacement si le nom change).
        matrixName:
          type: string
          description: Nom de la matrice
        parameterName:
          type: string
          description: Nom du paramètre
        norme:
          type: string
          description: Nom de la norme
        isAccredited:
          type: boolean
          description: Statut d'accréditation
          default: false
        price:
          type: number
          description: Prix unitaire
          default: 0
        unitMeasure:
          type: string
          description: Unité de mesure
        displayStyle:
          type: string
          description: Mode d'affichage du paramètre sur le rapport final
          enum:
            - NORMAL
            - ITALIC
            - NORMAL_BOLD
            - ITALIC_BOLD
            - UNDERLINE
            - UNDERLINE_BOLD
            - UNDERLINE_ITALIC
            - UNDERLINE_ITALIC_BOLD
          default: NORMAL
      required:
        - matrixName
        - parameterName
        - norme
        - isAccredited
        - price
    SyncCatalogGridDto:
      type: object
      properties:
        rows:
          type: array
          items:
            $ref: '#/components/schemas/CatalogGridRowDto'
      required:
        - rows
    UpdateParameterDto:
      type: object
      properties:
        name:
          type: string
          description: Le nom du parametre
          default: Param1
        description:
          type: string
          description: La description du parametre
          default: Param1 description
        isAccredited:
          type: boolean
          description: Le paramètre est il accredité
          default: false
        unitMeasure:
          type: string
          description: L'unité de mesure du parametre
          default: Kg
        price:
          type: integer
          description: Le prix du parametre
          default: 5000
        laboratoryId:
          type: string
          description: L'id du laboratoire
          default: uuiiiiiiiid-shdds
        isNew:
          type: boolean
          description: Est ce une nouvelle matrice
          default: true
        matriceId:
          type: string
          description: L'id  de la matrice si elle existe deja
          default: uiuid
        newMatriceName:
          type: string
          description: Le nom de la nouvelle matrice si elle n'existe pas
          default: New mat
        norme:
          type: string
          description: La norme du parametre
          default: Iso
        displayStyle:
          type: string
          description: Mode d'affichage du paramètre sur le rapport final
          enum:
            - NORMAL
            - ITALIC
            - NORMAL_BOLD
            - ITALIC_BOLD
            - UNDERLINE
            - UNDERLINE_BOLD
            - UNDERLINE_ITALIC
            - UNDERLINE_ITALIC_BOLD
          default: NORMAL
        id:
          type: string
          description: Identifiant du paramètre
          example: dsf4-4f5d-4f5d-4f5d
        previousParameterNormId:
          type: string
          description: >-
            Identifiant de la norme remplacée lorsque l'édition change la norme
            du paramètre.
      required:
        - id
    CreateLabPackageParameterDto:
      type: object
      properties:
        parameterId:
          type: string
          description: Identifiant du paramètre
          example: r4f5d-4f5d-4f5d-4f5d
        normId:
          type: string
          description: Identifiant de la norme
          example: r4f5d-4f5d-4f5d-4f5d
      required:
        - parameterId
        - normId
    CreateLabPackageDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du Package
          example: Package 1
          default: Mat-450
        description:
          type: string
          description: Description du package
          example: Omnis aspernatur rerum dolorem cumque aperiam itaque eum architecto.
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
          example: r4f5d-4f5d-4f5d-4f5d
        packagePrice:
          type: number
          description: Prix du package
          example: 5000
        parameters:
          description: Les paramètres du package
          example:
            - parameterId: 5c8db116da9af5dce6e1acc6
              normId: c25ca50a545e826bdf5eb735
            - parameterId: 1c4a39fd3bd7b082f71cac05
              normId: d3b2c4f8ffe516f53afbed1a
          type: array
          items:
            $ref: '#/components/schemas/CreateLabPackageParameterDto'
        matriceName:
          type: string
          description: Nom de la matrice
          example: Matrice 1
      required:
        - name
        - laboratoryId
        - packagePrice
        - parameters
        - matriceName
    MolecularCompoundDto:
      type: object
      properties: {}
    CreateMolecularLabPackageDto:
      type: object
      properties:
        name:
          type: string
          example: Pesticides organochlorés
        description:
          type: string
        laboratoryId:
          type: string
        packagePrice:
          type: number
          example: 5000
        matriceName:
          type: string
          example: Eau
        molecularAnnexName:
          type: string
          example: Annexe A - Pesticides
        molecules:
          description: 'Molécules importées : deviennent les paramètres enfants du package'
          type: array
          items:
            $ref: '#/components/schemas/MolecularCompoundDto'
      required:
        - name
        - laboratoryId
        - packagePrice
        - matriceName
        - molecules
    UpdateLabPackageDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du Package
          example: Package 1
          default: Mat-450
        description:
          type: string
          description: Description du package
          example: Omnis aspernatur rerum dolorem cumque aperiam itaque eum architecto.
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
          example: r4f5d-4f5d-4f5d-4f5d
        packagePrice:
          type: number
          description: Prix du package
          example: 5000
        parameters:
          description: Les paramètres du package
          example:
            - parameterId: 5c8db116da9af5dce6e1acc6
              normId: c25ca50a545e826bdf5eb735
            - parameterId: 1c4a39fd3bd7b082f71cac05
              normId: d3b2c4f8ffe516f53afbed1a
          type: array
          items:
            $ref: '#/components/schemas/CreateLabPackageParameterDto'
        matriceName:
          type: string
          description: Nom de la matrice
          example: Matrice 1
        id:
          type: string
          description: Identifiant du package
          example: dsf4-4f5d-4f5d-4f5d
      required:
        - id
    SetMolecularDto:
      type: object
      properties:
        isMolecular:
          type: boolean
          description: Indique si le package doit être marqué comme moléculaire
          example: true
        molecularAnnexName:
          type: string
          description: Nom de l'annexe moléculaire
          example: Annexe A - Pesticides
        molecularAnnexContent:
          description: >-
            Contenu JSON de l'annexe : tableau de { compoundName,
            detectionLimit, critereName?, critereLimit?, isAccredited? }
          example:
            - compoundName: Glyphosate
              detectionLimit: 0.005 µg/L
              critereName: NQ
              critereLimit: 0.1 µg/L
              isAccredited: true
          type: array
          items:
            $ref: '#/components/schemas/MolecularCompoundDto'
      required:
        - isMolecular
    SyncMolecularMoleculesDto:
      type: object
      properties:
        molecules:
          description: >-
            Liste complète des molécules (source de vérité pour le mode
            EXHAUSTIVE)
          type: array
          items:
            $ref: '#/components/schemas/MolecularCompoundDto'
        mode:
          type: string
          enum:
            - COMPLEMENTARY
            - EXHAUSTIVE
          default: EXHAUSTIVE
          description: >-
            EXHAUSTIVE = la liste remplace le catalogue (défaut pour l’éditeur
            web). COMPLEMENTARY = conserve les absentes.
        packagePrice:
          type: number
          description: Prix forfaitaire du package parent (optionnel)
        molecularAnnexName:
          type: string
      required:
        - molecules
    CreateAuditLogDto:
      type: object
      properties: {}
    CreateProformaDto:
      type: object
      properties:
        isDuplicating:
          type: boolean
          description: >-
            Indique que la proforma provient d'une duplication afin de guider
            l'interface en cas de paramètres archivés.
          example: true
        reference:
          type: string
          example: PRO-2021-0001
          description: >-
            La référence de la proforma: Elle sera generée automatiquement même
            si elle est fournie
        libelle:
          type: string
          example: Facture de prestation de service
          description: Le libellé de la proforma
        status:
          type: string
          default: EN_ATTENTE
          description: Le status de la proforma
          example: EN_ATTENTE
        customerType:
          type: string
          default: INDIVIDUAL
          description: Le type de client
          example: INDIVIDUAL
        customerId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du client
          example: lsd-4f5d-4f5d-4f5d
        companyId:
          type: string
          default: ds-4f5d-4f5d-4f5d
          description: L'identifiant de l'entreprise cliente
          example: ds-4f5d-4f5d-4f5d
          validateIf:
            - customerType
            - COMPANY
        items:
          description: Les types d'analyses de la proforma
          items:
            type: array
          type: array
        additionalCosts:
          description: Les coûts additionnels de la proforma
          items:
            type: array
          type: array
        totalFraixAnnexes:
          type: decimal
          description: Le montant total des coûts additionnels
          example: 100
        tvaMontant:
          type: decimal
          description: Le montant total de la TVA
          example: 100
        tvaPercentage:
          type: decimal
          description: Le pourcentage de la TVA
          example: 18
        isTvaApplicable:
          type: boolean
          description: La TVA est-elle applicable?
          example: true
        remise:
          type: decimal
          description: Le pourcentage de la remise
          example: 100
        remiseMontant:
          type: decimal
          description: Le montant de la remise
          example: 100
        netCommercial:
          type: decimal
          description: Le montant net commercial
          example: 100
        montantTotal:
          type: decimal
          description: Montant total des items de  la proforma
          example: 100
        totalHT:
          type: decimal
          description: Le montant total HT
          example: 100
        netAPayer:
          type: decimal
          description: Le montant total TTC
          example: 100
        expirationDate:
          type: date
          description: La date d'expiration de la proforma
          example: '2021-01-01 00:00:00'
        interlocuteurName:
          type: string
          description: Le nom de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurPhone:
          type: string
          description: Le téléphone de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurEmail:
          type: string
          description: L'email de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        proformaDraftId:
          type: string
          description: >-
            L'identifiant de la proforma draft du client (si la proforma
            provient d'un draft)
          example: lsd-4f5d-4f5d-4f5d
        isAuthorizedToMeasureUncertainties:
          type: boolean
          description: Est-ce que la proforma doit être validée après sa création?
          example: false
        viewersIds:
          description: Ids des utilisateurs qui peuvent voir la proforma
          example:
            - lsd-4f5d-4f5d-4f5d
            - lsd-4f5d-4f5d-4f5d
          type: array
          items:
            type: array
        counterAnalysisType:
          type: string
          description: >-
            Qualification de contre-analyse. LITIGE_CLIENT exige une proforma
            d’origine du même client.
          example: LITIGE_CLIENT
        advBillingParty:
          type: string
          description: >-
            Décision ADV prise à la création pour un cas spécial : CLIENT
            (facturable) ou PROFORMA_NON_FACTUREE (hors facturation).
          example: PROFORMA_NON_FACTUREE
        originProformaId:
          type: string
          description: >-
            Identifiant de la proforma d’origine, obligatoire pour une
            contre-analyse liée à un litige client.
          example: lsd-4f5d-4f5d-4f5d
        counterAnalysisNote:
          type: string
          description: Précision libre sur la contre-analyse.
          example: Contre-analyse demandée à la suite d’un litige client.
      required:
        - reference
        - libelle
        - status
        - customerType
        - companyId
    CreateProformaFromContractDto:
      type: object
      properties:
        libelle:
          type: string
          example: Facture de prestation de service
          description: Le libellé de la proforma
        contractId:
          type: string
          example: lds-4f5d-4f5d-4f5d
          description: L'identifiant du contrat
        items:
          description: Les types d'analyses de la proforma
          example:
            - contractItemId: lds-4f5d-4f5d-4f5d
              intitule: Analyse A
              nbrEchantillons: 5
          type: array
          items:
            type: array
        additionalCosts:
          description: Les coûts additionnels de la proforma
          example:
            - libelle: Transport
              description: Transport de marchandise
              quantite: 1
              unitPrice: 100
              total: 100
          type: array
          items:
            type: array
        totalFraixAnnexes:
          type: decimal
          description: Le montant total des coûts additionnels
          example: 100
        tvaMontant:
          type: decimal
          description: Le montant total de la TVA
          example: 100
        tvaPercentage:
          type: decimal
          description: Le pourcentage de la TVA
          example: 18
        isTvaApplicable:
          type: boolean
          description: La TVA est-elle applicable?
          example: true
        remise:
          type: decimal
          description: Le pourcentage de la remise
          example: 100
        remiseMontant:
          type: decimal
          description: Le montant de la remise
          example: 100
        netCommercial:
          type: decimal
          description: Le montant net commercial
          example: 100
        montantTotal:
          type: decimal
          description: Montant total des items de  la proforma
          example: 100
        totalHT:
          type: decimal
          description: Le montant total HT
          example: 100
        netAPayer:
          type: decimal
          description: Le montant total TTC
          example: 100
        expirationDate:
          type: date
          description: La date d'expiration de la proforma
          example: '2021-01-01 00:00:00'
        interlocuteurName:
          type: string
          description: Le nom de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurPhone:
          type: string
          description: Le téléphone de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurEmail:
          type: string
          description: L'email de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        validateAfterCreation:
          type: boolean
          description: Est-ce que la proforma doit être validée après sa création?
          example: false
        isAuthorizedToMeasureUncertainties:
          type: boolean
          description: Est-ce que la proforma doit être validée après sa création?
          example: false
        viewersIds:
          description: Ids des utilisateurs qui peuvent voir la proforma
          example:
            - lsd-4f5d-4f5d-4f5d
            - lsd-4f5d-4f5d-4f5d
          type: array
          items:
            type: array
      required:
        - libelle
        - contractId
    CreateProformaItemsDto:
      type: object
      properties:
        intitule:
          type: string
          default: un libellé
          description: L'intitulé du paramètre
        nbrEchantillons:
          type: number
          example: 1
          description: La quantité d'échantillon
          default: 1
        proformaId:
          type: string
          description: L'identifiant de la proforma
          example: lsd-4f5d-4f5d-4f5d
        subTotal:
          type: number
          example: 5000
          description: Le montant total de l'analyse
        proformaItemAnalyses:
          type: object
          description: Les analyses de l'item de la proforma
          example:
            - laboratoryId: e0ea95cb-8f70-4eb8-93e6-715a67a005d2
              parameterId: 526cd8e6-0306-4870-9ebb-ab036decb8b3
              parameterNormId: f1711a3f-40b9-4a2c-92b6-c00b43f9c9f0
            - laboratoryId: 2bb23456-883b-432b-a447-7a463780a2b7
              parameterId: 182b3ff8-d23e-4f69-8d3e-6077887a9dbd
              parameterNormId: 8b594c92-c070-4d6d-b4a0-d7c043869970
      required:
        - nbrEchantillons
        - subTotal
    AddProformaItemFromContractDto:
      type: object
      properties:
        contractItemId:
          type: string
          description: Identifiant de l'item du contrat
        nbrEchantillons:
          type: number
          description: Nombre d'échantillons
          example: 1
        intitule:
          type: string
          description: Libellé personnalisé de la ligne de proforma
      required:
        - contractItemId
        - nbrEchantillons
    CreateProformaItemAnalyseDto:
      type: object
      properties:
        proformaId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
          example: lsd-4f5d-4f5d-4f5d
        proformaItemId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de l'item de la proforma
          example: lsd-4f5d-4f5d-4f5d
        laboratoryId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du laboratoire
          example: lsd-4f5d-4f5d-4f5d
        parameterId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du paramètre
          example: lsd-4f5d-4f5d-4f5d
        parameterNormId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: La norme du paramètre
          example: lsd-4f5d-4f5d-4f5d
        normeName:
          type: string
          default: ISO 564
          description: Le nom de la norme
          example: ISO 87
        parameterPrice:
          type: number
          default: ISO 564
          description: Le prix du parametere
          example: ISO 87
      required:
        - laboratoryId
        - parameterId
        - normeName
        - parameterPrice
    CreateAdditionalCostDto:
      type: object
      properties:
        libelle:
          type: string
          default: Transport
          description: Le nom du coût additionnel
          example: Transport
        description:
          type: string
          default: Transport de marchandise
          description: La description du coût additionnel
          example: Transport de marchandise
        quantite:
          type: number
          default: 1
          description: La quantité du coût additionnel
          example: 1
        pu:
          type: decimal
          default: 100
          description: Le prix unitaire du coût additionnel
          example: 100
        isValid:
          type: boolean
          default: true
          description: La validité du coût additionnel
          example: true
        total:
          type: decimal
          default: 100
          description: Le total du coût additionnel
          example: 100
        proformaId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
          example: lsd-4f5d-4f5d-4f5d
      required:
        - libelle
        - quantite
        - pu
        - total
        - proformaId
    UpdateProformaDto:
      type: object
      properties:
        isDuplicating:
          type: boolean
          description: >-
            Indique que la proforma provient d'une duplication afin de guider
            l'interface en cas de paramètres archivés.
          example: true
        reference:
          type: string
          example: PRO-2021-0001
          description: >-
            La référence de la proforma: Elle sera generée automatiquement même
            si elle est fournie
        libelle:
          type: string
          example: Facture de prestation de service
          description: Le libellé de la proforma
        status:
          type: string
          default: EN_ATTENTE
          description: Le status de la proforma
          example: EN_ATTENTE
        customerType:
          type: string
          default: INDIVIDUAL
          description: Le type de client
          example: INDIVIDUAL
        customerId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du client
          example: lsd-4f5d-4f5d-4f5d
        companyId:
          type: string
          default: ds-4f5d-4f5d-4f5d
          description: L'identifiant de l'entreprise cliente
          example: ds-4f5d-4f5d-4f5d
          validateIf:
            - customerType
            - COMPANY
        items:
          description: Les types d'analyses de la proforma
          items:
            type: array
          type: array
        additionalCosts:
          description: Les coûts additionnels de la proforma
          items:
            type: array
          type: array
        totalFraixAnnexes:
          type: decimal
          description: Le montant total des coûts additionnels
          example: 100
        tvaMontant:
          type: decimal
          description: Le montant total de la TVA
          example: 100
        tvaPercentage:
          type: decimal
          description: Le pourcentage de la TVA
          example: 18
        isTvaApplicable:
          type: boolean
          description: La TVA est-elle applicable?
          example: true
        remise:
          type: decimal
          description: Le pourcentage de la remise
          example: 100
        remiseMontant:
          type: decimal
          description: Le montant de la remise
          example: 100
        netCommercial:
          type: decimal
          description: Le montant net commercial
          example: 100
        montantTotal:
          type: decimal
          description: Montant total des items de  la proforma
          example: 100
        totalHT:
          type: decimal
          description: Le montant total HT
          example: 100
        netAPayer:
          type: decimal
          description: Le montant total TTC
          example: 100
        expirationDate:
          type: date
          description: La date d'expiration de la proforma
          example: '2021-01-01 00:00:00'
        interlocuteurName:
          type: string
          description: Le nom de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurPhone:
          type: string
          description: Le téléphone de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurEmail:
          type: string
          description: L'email de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        proformaDraftId:
          type: string
          description: >-
            L'identifiant de la proforma draft du client (si la proforma
            provient d'un draft)
          example: lsd-4f5d-4f5d-4f5d
        isAuthorizedToMeasureUncertainties:
          type: boolean
          description: Est-ce que la proforma doit être validée après sa création?
          example: false
        viewersIds:
          description: Ids des utilisateurs qui peuvent voir la proforma
          example:
            - lsd-4f5d-4f5d-4f5d
            - lsd-4f5d-4f5d-4f5d
          type: array
          items:
            type: array
        counterAnalysisType:
          type: string
          description: >-
            Qualification de contre-analyse. LITIGE_CLIENT exige une proforma
            d’origine du même client.
          example: LITIGE_CLIENT
        advBillingParty:
          type: string
          description: >-
            Décision ADV prise à la création pour un cas spécial : CLIENT
            (facturable) ou PROFORMA_NON_FACTUREE (hors facturation).
          example: PROFORMA_NON_FACTUREE
        originProformaId:
          type: string
          description: >-
            Identifiant de la proforma d’origine, obligatoire pour une
            contre-analyse liée à un litige client.
          example: lsd-4f5d-4f5d-4f5d
        counterAnalysisNote:
          type: string
          description: Précision libre sur la contre-analyse.
          example: Contre-analyse demandée à la suite d’un litige client.
        id:
          type: string
          example: sdf4-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
      required:
        - id
    UpdateProformaItemAnalyseDto:
      type: object
      properties:
        proformaId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
          example: lsd-4f5d-4f5d-4f5d
        proformaItemId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de l'item de la proforma
          example: lsd-4f5d-4f5d-4f5d
        laboratoryId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du laboratoire
          example: lsd-4f5d-4f5d-4f5d
        parameterId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du paramètre
          example: lsd-4f5d-4f5d-4f5d
        parameterNormId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: La norme du paramètre
          example: lsd-4f5d-4f5d-4f5d
        normeName:
          type: string
          default: ISO 564
          description: Le nom de la norme
          example: ISO 87
        parameterPrice:
          type: number
          default: ISO 564
          description: Le prix du parametere
          example: ISO 87
        id:
          type: string
          example: lds-4f5d-4f5d-4f5d
          description: L'identifiant de l'élément de la proforma
      required:
        - id
    UpdateItemInfoDto:
      type: object
      properties:
        id:
          type: string
          example: lds-4f5d-4f5d-4f5d
          description: L'identifiant de l'élément de l'item
        intitule:
          type: string
          example: Analyse 1
          description: L'intitulé de l'analyse
        nbEchantillons:
          type: number
          example: 4
          description: Le nombre d'echantillons
      required:
        - id
        - intitule
        - nbEchantillons
    StatusProformaDto:
      type: object
      properties:
        status:
          type: string
          default: EN_ATTENTE
          description: Le status de la proforma
          example: EN_ATTENTE
      required:
        - status
    MarkProformaAsPaidDto:
      type: object
      properties:
        invoiceNumber:
          type: string
          description: Numéro de facture
          example: FAC-2026-0042
        invoiceDate:
          type: string
          description: Date de facturation
          example: '2026-04-10'
        paymentDate:
          type: string
          description: Date de paiement
          example: '2026-04-10'
        paidDate:
          type: string
          description: Ancien champ de date de paiement (compatibilité)
          example: '2026-04-10'
        paidMethod:
          type: string
          description: La méthode de paiement
          example: CASH
        paidAmount:
          type: number
          description: Montant effectivement payé (snapshot de paiement)
          example: 125000
        note:
          type: string
          description: La note
          example: Note de paiement
      required:
        - invoiceNumber
        - invoiceDate
        - paymentDate
        - paidMethod
    FinalizePartialReceptionDto:
      type: object
      properties: {}
    UpdateFacturationAdvDto:
      type: object
      properties:
        factureFile:
          type: string
          description: Le fichier de l'avis de crédit
        referenceFacture:
          type: string
          description: La référence de la facture
        facturationDate:
          type: date
          description: La date de facturation
        recouvrementDate:
          type: date
          description: La date de recouvrement
        delai:
          type: date
          description: Le delai de recouvrement
    CreateFactureDto:
      type: object
      properties:
        referenceFacture:
          type: string
          description: Référence de la facture
          example: FAC-2025-0001
        escompte:
          type: decimal
          description: Escompte en pourcentage
          example: '0'
        acompte:
          type: decimal
          description: Acompte déjà versé
          example: '0'
        dateFacturation:
          type: date
          description: Date de facturation
          example: '2025-08-05'
        dateEcheance:
          type: date
          description: Date d'échéance
          example: '2025-08-05'
        proformaId:
          type: string
          description: >-
            ID du proforma (obligatoire pour l'extraction automatique des
            données)
          example: 123e4567-e89b-12d3-a456-426614174000
      required:
        - proformaId
    CreatePartialFactureDto:
      type: object
      properties:
        proformaId:
          type: string
          description: ID de la proforma à facturer partiellement
          example: 123e4567-e89b-12d3-a456-426614174000
        amountHT:
          type: number
          description: Montant HT libre à facturer, dans la limite du reste HT
          example: 125000
        description:
          type: string
          description: Objet précis de cette facture partielle
          example: Acompte de 50 % sur les analyses microbiologiques
        referenceFacture:
          type: string
          description: Référence de la facture
          example: FAC-2026-0001
      required:
        - proformaId
        - amountHT
        - description
        - referenceFacture
    CreateFactureFromProformasDto:
      type: object
      properties:
        libelle:
          type: string
          description: Libellé de la facture
          example: Facture pour contrat XYZ
        referenceFacture:
          type: string
          description: Référence de la facture
          example: FAC-2025-0001
        escompte:
          type: decimal
          description: Escompte en pourcentage
          example: '0'
        acompte:
          type: decimal
          description: Acompte déjà versé
          example: '0'
        netAPayer:
          type: decimal
          description: Montant net à payer
          example: '1000.00'
        tauxTaxe:
          type: decimal
          description: Taux de taxe en montant
          example: '20'
        dateFacturation:
          type: date
          description: Date de facturation
          example: '2025-08-05'
        dateEcheance:
          type: date
          description: Date d'échéance
          example: '2025-08-05'
        proformaIds:
          description: IDs des proformas à inclure dans la facture
          example:
            - 123e4567-e89b-12d3-a456-426614174000
          type: array
          items:
            type: string
        proformaSansContratJustification:
          type: string
          description: >-
            Justification obligatoire si la sélection contient une proforma sans
            contrat direct
          example: Proforma manuel inclus dans le périmètre du contrat client
      required:
        - netAPayer
        - proformaIds
    UpdateFactureDto:
      type: object
      properties:
        dateRecouvrement:
          format: date-time
          type: string
          description: Date de recouvrement de la facture
        referenceFacture:
          type: string
          description: Référence de la facture
        dateEcheance:
          format: date-time
          type: string
          description: Date à laquelle le règlement de la facture est attendu
    CreateFacturationAddressDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du client
          example: Jean Dupont
        telephone:
          type: string
          description: Téléphone du client
          example: '+22890123456'
        address:
          type: string
          description: Adresse de facturation
          example: 123 rue de la République, 10 BP 1234, Lomé, Togo
        compteClient:
          type: string
          description: Numéro de compte client
          example: CLI12345
        email:
          type: string
          description: Email de contact
          example: client@example.com
        isDefault:
          type: boolean
          description: Est-ce l'adresse par défaut?
          default: false
        customerType:
          type: string
          description: Type de client
          enum:
            - INDIVIDUAL
            - COMPANY
          default: INDIVIDUAL
        customerId:
          type: string
          description: ID du client individuel
          example: 123e4567-e89b-12d3-a456-426614174000
        companyId:
          type: string
          description: ID de l'entreprise cliente
          example: 123e4567-e89b-12d3-a456-426614174000
      required:
        - name
        - address
        - isDefault
        - customerType
    UpdateFacturationAddressDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du client
          example: Jean Dupont
        telephone:
          type: string
          description: Téléphone du client
          example: '+22890123456'
        address:
          type: string
          description: Adresse de facturation
          example: 123 rue de la République, 10 BP 1234, Lomé, Togo
        compteClient:
          type: string
          description: Numéro de compte client
          example: CLI12345
        email:
          type: string
          description: Email de contact
          example: client@example.com
        isDefault:
          type: boolean
          description: Est-ce l'adresse par défaut?
          default: false
        customerType:
          type: string
          description: Type de client
          enum:
            - INDIVIDUAL
            - COMPANY
          default: INDIVIDUAL
        customerId:
          type: string
          description: ID du client individuel
          example: 123e4567-e89b-12d3-a456-426614174000
        companyId:
          type: string
          description: ID de l'entreprise cliente
          example: 123e4567-e89b-12d3-a456-426614174000
    FinancialDashboardResponseDto:
      type: object
      properties:
        totalRevenue:
          type: number
          description: Chiffre d'affaires total
        revenueGrowth:
          type: number
          description: Taux de croissance (%)
        topClients:
          description: Top clients
          type: array
          items:
            type: object
        topLabs:
          description: Top laboratoires
          type: array
          items:
            type: object
        monthlyTrends:
          description: Tendances mensuelles
          type: array
          items:
            type: object
      required:
        - totalRevenue
        - revenueGrowth
        - topClients
        - topLabs
        - monthlyTrends
    UpsertAutoRuleDto:
      type: object
      properties:
        enabled:
          type: boolean
          description: Active la règle d’auto-affectation
        startDate:
          type: string
          description: Date de début (obligatoire si enabled=true)
          example: '2026-08-01'
        endDate:
          type: string
          description: Date de fin optionnelle
          example: '2026-12-31'
        defaultNotifySampleReceived:
          type: boolean
        defaultNotifyResultsSent:
          type: boolean
        defaultNotifyInvoiceIssued:
          type: boolean
      required:
        - enabled
        - startDate
    AddCatalogEntryDto:
      type: object
      properties:
        customerId:
          type: string
          description: Client particulier
        customerCompanyId:
          type: string
          description: Entreprise cliente
        notifySampleReceived:
          type: boolean
          default: true
        notifyResultsSent:
          type: boolean
          default: true
        notifyInvoiceIssued:
          type: boolean
          default: true
    AddCatalogEntriesBulkDto:
      type: object
      properties:
        customerIds:
          description: IDs clients particuliers
          type: array
          items:
            type: string
        customerCompanyIds:
          description: IDs entreprises clientes
          type: array
          items:
            type: string
        notifySampleReceived:
          type: boolean
          default: true
        notifyResultsSent:
          type: boolean
          default: true
        notifyInvoiceIssued:
          type: boolean
          default: true
    UpdateCatalogEntryPrefsDto:
      type: object
      properties:
        notifySampleReceived:
          type: boolean
        notifyResultsSent:
          type: boolean
        notifyInvoiceIssued:
          type: boolean
    UpdateBillabilityDto:
      type: object
      properties:
        status:
          type: string
          enum:
            - A_FACTURER
            - EN_STAND_BY
            - NON_FACTURABLE
            - ANNULEE
          example: NON_FACTURABLE
        reasonCode:
          type: string
          enum:
            - ANNULATION_CLIENT
            - CONTRE_ANALYSE_INTERLABO
            - CONTRE_ANALYSE_LITIGE
            - CLIENT_EXEMPTE_DE_PAIEMENT
            - ACCORD_COMMERCIAL
            - GESTE_COMMERCIAL
            - ECHANTILLON_NON_CONFORME
            - ERREUR_SAISIE
            - DOUBLON
            - ANALYSE_INTERNE
            - ESSAI_INTERLABORATOIRE
            - EN_ATTENTE_ADRESSE_FACTURATION
            - AUTRE
          description: Obligatoire dès que le statut n’est pas A_FACTURER
        note:
          type: string
          description: Obligatoire si reasonCode = AUTRE
          example: Analyses reprises à notre charge après incident de conservation
        standByUntil:
          type: string
          description: >-
            Obligatoire si statut = EN_STAND_BY — un stand-by sans échéance ne
            se termine jamais
          example: '2026-09-30'
      required:
        - status
    CancelAdvLineDto:
      type: object
      properties:
        reasonCode:
          type: string
          enum:
            - ANNULATION_CLIENT
            - CONTRE_ANALYSE_INTERLABO
            - CONTRE_ANALYSE_LITIGE
            - CLIENT_EXEMPTE_DE_PAIEMENT
            - ACCORD_COMMERCIAL
            - GESTE_COMMERCIAL
            - ECHANTILLON_NON_CONFORME
            - ERREUR_SAISIE
            - DOUBLON
            - ANALYSE_INTERNE
            - ESSAI_INTERLABORATOIRE
            - EN_ATTENTE_ADRESSE_FACTURATION
            - AUTRE
          example: ANNULATION_CLIENT
        reason:
          type: string
          example: Commande annulée par le client le 22/07
      required:
        - reasonCode
        - reason
    ReactivateBillabilityDto:
      type: object
      properties:
        reason:
          type: string
          example: Le client a confirmé la reprise de la commande
      required:
        - reason
    BulkBillabilityDto:
      type: object
      properties:
        advIds:
          maxItems: 500
          type: array
          items:
            type: string
            format: uuid
        status:
          type: string
          enum:
            - A_FACTURER
            - EN_STAND_BY
            - NON_FACTURABLE
            - ANNULEE
        reasonCode:
          type: string
          enum:
            - ANNULATION_CLIENT
            - CONTRE_ANALYSE_INTERLABO
            - CONTRE_ANALYSE_LITIGE
            - CLIENT_EXEMPTE_DE_PAIEMENT
            - ACCORD_COMMERCIAL
            - GESTE_COMMERCIAL
            - ECHANTILLON_NON_CONFORME
            - ERREUR_SAISIE
            - DOUBLON
            - ANALYSE_INTERNE
            - ESSAI_INTERLABORATOIRE
            - EN_ATTENTE_ADRESSE_FACTURATION
            - AUTRE
        note:
          type: string
        standByUntil:
          type: string
      required:
        - advIds
        - status
    SetCounterAnalysisDto:
      type: object
      properties:
        type:
          type: string
          enum:
            - INTER_LABORATOIRE
            - LITIGE_CLIENT
        originProformaId:
          type: string
          format: uuid
          description: >-
            Proforma d’origine. OBLIGATOIRE pour LITIGE_CLIENT (c’est la
            preuve), facultatif pour INTER_LABORATOIRE
        note:
          type: string
          example: Contestation des résultats du rapport RAP-2026-0910
      required:
        - type
    UnsetCounterAnalysisDto:
      type: object
      properties:
        reason:
          type: string
          example: Requalifiée en analyse facturable après accord du client
      required:
        - reason
    CreateExemptionDto:
      type: object
      properties:
        scope:
          type: string
          enum:
            - CLIENT
            - PROFORMA_ADV
          default: CLIENT
        customerId:
          type: string
          format: uuid
          description: Portée CLIENT — client individuel
        companyId:
          type: string
          format: uuid
          description: Portée CLIENT — entreprise
        targetAdvId:
          type: string
          format: uuid
          description: Portée PROFORMA_ADV — ADV visée
        duration:
          type: string
          enum:
            - PERMANENTE
            - PERIODE
          default: PERIODE
        startDate:
          type: string
          example: '2026-01-01'
        endDate:
          type: string
          example: '2026-12-31'
          description: Obligatoire si duration = PERIODE
        reasonCode:
          type: string
          enum:
            - ACCORD_COMMERCIAL
            - CONVENTION_PARTENARIAT
            - CLIENT_INSTITUTIONNEL
            - PRISE_EN_CHARGE_INTERNE
            - GESTE_COMMERCIAL
            - GRATUITE_PROMOTIONNELLE
            - AUTRE
          example: CONVENTION_PARTENARIAT
        reason:
          type: string
          example: Accord-cadre n°2026-014 — analyses de contrôle prises en charge
          description: Toujours obligatoire, quel que soit le code motif
        documentReference:
          type: string
          example: ACC-2026-014
        fileUrl:
          type: string
        filePublicId:
          type: string
      required:
        - scope
        - duration
        - startDate
        - reasonCode
        - reason
    RevokeExemptionDto:
      type: object
      properties:
        reason:
          type: string
          example: Fin de la convention — reprise de la facturation normale
        retroactive:
          type: boolean
          default: false
          description: >-
            Requalifie aussi les ADV déjà exemptées de la période écoulée.
            Réservé à l’admin.
      required:
        - reason
    SimulateCancellationDto:
      type: object
      properties:
        proformaId:
          type: string
          format: uuid
        scope:
          type: string
          enum:
            - TOTALE
            - BORDEREAU
            - RAPPORT
        targetId:
          type: string
          format: uuid
      required:
        - proformaId
        - scope
    CancelChainDto:
      type: object
      properties:
        proformaId:
          type: string
          format: uuid
        scope:
          type: string
          enum:
            - TOTALE
            - BORDEREAU
            - RAPPORT
          default: TOTALE
        targetId:
          type: string
          format: uuid
          description: Bordereau ou rapport visé si la portée est partielle
        reasonCode:
          type: string
          enum:
            - DEMANDE_CLIENT
            - ECHANTILLON_NON_CONFORME
            - ECHANTILLON_NON_RECU
            - ERREUR_SAISIE
            - DOUBLON
            - DELAI_DEPASSE
            - CAPACITE_INDISPONIBLE
            - LITIGE
            - AUTRE
        reason:
          type: string
          example: Client a annulé sa commande le 22/07 — courriel du service achats
        origin:
          type: string
          enum:
            - CLIENT
            - COMMERCIAL
            - LABORATOIRE
            - ADV
            - QUALITE
          default: CLIENT
        requestedByName:
          type: string
          description: Interlocuteur cité côté client — déclaratif, non vérifié
        requestedDate:
          type: string
          description: Date citée par l’auteur, jamais celle qui fait foi
        force:
          type: boolean
          default: false
          description: Requis si un rapport a déjà été transmis au client
      required:
        - proformaId
        - scope
        - reasonCode
        - reason
    RestoreCancellationDto:
      type: object
      properties:
        reason:
          type: string
          example: Le client a confirmé la reprise de la commande
      required:
        - reason
    AllocationDto:
      type: object
      properties:
        target:
          type: string
          enum:
            - FACTURE
            - ADV
        targetId:
          type: string
          format: uuid
        amount:
          type: number
          example: 400000
      required:
        - target
        - targetId
        - amount
    SimulatePaymentDto:
      type: object
      properties:
        customerId:
          type: string
          format: uuid
        companyId:
          type: string
          format: uuid
        receivedAmount:
          type: number
          example: 500000
          description: Total des moyens de paiement
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/AllocationDto'
        useWallet:
          type: boolean
          default: false
          description: Puiser dans le solde du client
        creditRemainderToWallet:
          type: boolean
          default: false
          description: Verser le reliquat au wallet
      required:
        - receivedAmount
        - allocations
    PaymentTenderDto:
      type: object
      properties:
        method:
          type: string
          enum:
            - ESPECES
            - CHEQUE
            - VIREMENT
            - MOBILE_MONEY
            - TRAITE
            - CARTE
            - COMPENSATION
            - WALLET
            - NON_RENSEIGNE
            - AUTRE
          example: CHEQUE
        amount:
          type: number
          example: 300000
        proofReference:
          type: string
          description: N° de chèque, n° de bordereau, référence de transaction
          example: '0045123'
        bankName:
          type: string
          example: BOA
        bankBranch:
          type: string
        accountHolder:
          type: string
        issuedAt:
          type: string
          description: Date du chèque
        dueAt:
          type: string
          description: Échéance d’un chèque post-daté
      required:
        - method
        - amount
    CreatePaymentDto:
      type: object
      properties:
        customerId:
          type: string
          format: uuid
        companyId:
          type: string
          format: uuid
        receivedAt:
          type: string
          example: '2026-07-27'
        valueDate:
          type: string
          description: Date de valeur bancaire
        tenders:
          type: array
          items:
            $ref: '#/components/schemas/PaymentTenderDto'
        allocations:
          default: []
          type: array
          items:
            $ref: '#/components/schemas/AllocationDto'
        useWallet:
          type: boolean
          default: false
        creditRemainderToWallet:
          type: boolean
          default: false
          description: >-
            Verser le reliquat au wallet. Obligatoire si le montant reçu dépasse
            les imputations — c’est aussi le mode du paiement anticipé (aucune
            imputation).
        note:
          type: string
        apply:
          type: boolean
          default: true
          description: Appliquer immédiatement au ledger ; sinon reste en brouillon
        idempotencyKey:
          type: string
          description: Clé anti double-clic
      required:
        - receivedAt
        - tenders
    BulkReversePaymentDto:
      type: object
      properties:
        reason:
          type: string
          example: Chèque revenu impayé — avis bancaire du 30/07
        ids:
          type: array
          items:
            type: string
            format: uuid
      required:
        - reason
        - ids
    BulkDiscardDraftsDto:
      type: object
      properties:
        ids:
          type: array
          items:
            type: string
            format: uuid
      required:
        - ids
    ApplyPaymentDto:
      type: object
      properties:
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/AllocationDto'
        useWallet:
          type: boolean
          default: false
        creditRemainderToWallet:
          type: boolean
          default: false
    CompleteLegacyPaymentDto:
      type: object
      properties:
        receivedAt:
          type: string
          description: Date historique du règlement
        method:
          type: string
          enum:
            - ESPECES
            - CHEQUE
            - VIREMENT
            - MOBILE_MONEY
            - TRAITE
            - CARTE
            - COMPENSATION
            - WALLET
            - NON_RENSEIGNE
            - AUTRE
        proofReference:
          type: string
          description: N° de chèque, bordereau ou transaction
        bankName:
          type: string
        informationUnavailable:
          type: boolean
          description: >-
            Confirme que les informations source ne sont pas disponibles ; une
            note explicite devient obligatoire.
        note:
          type: string
    ReversePaymentDto:
      type: object
      properties:
        reason:
          type: string
          example: Chèque revenu impayé — avis bancaire du 30/07
      required:
        - reason
    AddProofDto:
      type: object
      properties:
        type:
          type: string
          enum:
            - NUMERO_CHEQUE
            - BORDEREAU_VERSEMENT
            - REFERENCE_VIREMENT
            - RECU_MOBILE_MONEY
            - RECU_INTERNE
            - AUTRE
        reference:
          type: string
        fileUrl:
          type: string
        filePublicId:
          type: string
        note:
          type: string
      required:
        - type
    ImputeWalletDto:
      type: object
      properties:
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/AllocationDto'
        note:
          type: string
      required:
        - allocations
    WalletAdjustmentDto:
      type: object
      properties:
        amount:
          type: number
          example: 25000
          description: Positif pour créditer, négatif pour débiter
        reason:
          type: string
          example: Régularisation après rapprochement bancaire du 30/07
      required:
        - amount
        - reason
    WalletRefundDto:
      type: object
      properties:
        amount:
          type: number
          example: 50000
        reason:
          type: string
          example: Remboursement demandé par le client — virement du 31/07
        proofReference:
          type: string
          description: Référence de la preuve de sortie
      required:
        - amount
        - reason
    ContractInvoiceLineDto:
      type: object
      properties:
        proformaAdvId:
          type: string
          format: uuid
        inclusionNote:
          type: string
          description: >-
            Obligatoire si la proforma n’a pas de contrat : justifie son
            inclusion dans le périmètre contractuel
          example: Prestation incluse au forfait du contrat CTR-2026-004
      required:
        - proformaAdvId
    CreateContractInvoiceDto:
      type: object
      properties:
        companyId:
          type: string
          format: uuid
        periodStart:
          type: string
          example: '2026-06-01'
        periodEnd:
          type: string
          example: '2026-06-30'
        lines:
          description: ADV sélectionnées, avec justification pour celles sans contrat
          type: array
          items:
            $ref: '#/components/schemas/ContractInvoiceLineDto'
        invoicedAmount:
          type: number
          example: 4250000
          description: >-
            Montant RÉELLEMENT facturé au client. Fait foi — la somme LIMS ne
            sert que de contrôle.
        taxAmount:
          type: number
          example: 0
          description: Montant de TVA inclus
        libelle:
          type: string
          example: Facture juin 2026 — contrats agro
        invoiceReference:
          type: string
        invoiceDate:
          type: string
          example: '2026-07-05'
        dueDate:
          type: string
          example: '2026-08-05'
        note:
          type: string
      required:
        - companyId
        - periodStart
        - periodEnd
        - lines
        - invoicedAmount
    CancelContractInvoiceDto:
      type: object
      properties:
        reason:
          type: string
          example: Erreur de périmètre — la proforma PRO-0431 ne relève pas du contrat
      required:
        - reason
    UpdateServiceProviderDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du fournisseur de service
          example: Fournisseur de service 1
          default: Fournisseur de service 1
        address:
          type: string
          description: Adresse du fournisseur de service
          example: 123 rue de la paix, 75000 Paris
          default: 123 rue de la paix, 75000 Paris
        logo:
          type: file
          description: Logo du fournisseur de service
          format: binary
        serviceCountry:
          type: string
          description: Pays du fournisseur de service
          example: CIV
          default: CIV
        serviceEmail:
          type: string
          description: Email du fournisseur de service
          example: service@mail.com
          default: service@mail.com
        servicePhone:
          type: string
          description: Téléphone du fournisseur de service
          example: '0123456789'
          default: '0123456789'
        serviceWebstie:
          type: string
          description: Site web du fournisseur de service
          example: https://service.com
          default: https://service.com
        nbEmployees:
          type: string
          description: Nombre d'employés du fournisseur de service
          example: 10-20
        serviceCity:
          type: string
          description: Ville du fournisseur de service
          example: Abidjan
          default: Abidjan
        servicePostalCode:
          type: string
          description: Code postal du fournisseur de service
          example: '75000'
          default: '75000'
        serviceWebsite:
          type: string
          description: Site web du fournisseur de service
          example: https://service.com
          default: https://service.com
        logoPublicId:
          type: string
          description: Public ID du logo du fournisseur de service
          example: logo-123456
          default: logo-123456
        isoCode:
          type: string
          description: Code ISO du fournisseur de service
          example: CIV
          default: CIV
        id:
          type: string
          description: L'identifiant du fournisseur de service
          example: dsui-4f5d-4f5d-4f5d
        createdAt:
          format: date-time
          type: string
          description: La date de création du fournisseur de service
          example: 2026-09-22T11:35:31.892Z
          default: 2026-09-22T11:35:31.892Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour du fournisseur de service
          example: 2026-09-22T11:35:31.892Z
          default: 2026-09-22T11:35:31.892Z
      required:
        - id
    CreateProviderUserDto:
      type: object
      properties:
        email:
          type: string
          example: subuser1@gmail.com
          description: Email de l'utilisateur
        phone:
          type: string
          example: +225-07-07-07-07
          description: Téléphone de l'utilisateur
          nullable: true
        firstname:
          type: string
          example: Tonde
          description: Nom d'utilisateur
          minLength: 1
          maxLength: 50
        lastname:
          type: string
          example: Souleymane
          description: Prénom d'utilisateur
          minLength: 1
        position:
          type: string
          example: Dev
          description: Poste de l'utilisateur
          nullable: true
        country:
          type: string
          example: CIV
          description: Pays de l'utilisateur
          nullable: true
        lang:
          type: string
          example: fr
          description: Langue de l'utilisateur
          nullable: true
        allowMailNotifications:
          type: boolean
          description: Autorise les emails de notification de l'application
          default: true
        avatar:
          type: file
          description: Avatar de l'utilisateur
          format: binary
        role:
          type: string
          enum:
            - PROVIDER_ADMIN
            - PROVIDER_COMMERCIAL
            - PROVIDER_COMPTABLE
          description: Rôle de l'utilisateur
          default: PROVIDER_COMMERCIAL
        roles:
          type: array
          description: Rôles historiques à conserver pendant la migration multi-services
          items:
            type: string
            enum:
              - SUPER_ADMIN
              - PROVIDER_ADMIN
              - PROVIDER_USER
              - PROVIDER_LAB_TECHNICIAN
              - PROVIDER_LAB_RESPONSIBLE
              - PROVIDER_LAB_MANAGER
              - PROVIDER_COMMERCIAL
              - PROVIDER_COMPTABLE
              - PROVIDER_PRELEVEUR
              - PROVIDER_RECEPTIONNISTE
              - PROVIDER_SUPERVISOR
              - PROVIDER_RECLAMATION_MANAGER
              - CUSTOMER_ADMIN
              - CUSTOMER_USER
              - INDIVIDUAL_CUSTOMER
              - PROVIDER
              - CUSTOMER
              - AUTH_FULL_ACCESS
              - AUTH_PARTIAL_ACCESS
              - PAID_PLAN
              - FREE_PLAN
              - CUSTOMER_INDIVIDUAL
              - CUSTOMER_COMPANY
              - RESPONSABLE_QUALITE
              - RESPONSABLE_PRELEVEUR
              - PROVIDER_TECHNICAL_SECRETARY
        serviceCodes:
          type: array
          description: Services métier affectés à l'utilisateur
          items:
            type: string
            enum:
              - ADMINISTRATION
              - COMMERCIAL
              - LABORATORY
              - ACCOUNTING
              - SAMPLING
              - RECEPTION
              - SUPERVISION
              - QUALITY
              - CLAIMS
              - TECHNICAL_SECRETARIAT
      required:
        - email
        - firstname
        - lastname
        - role
    ServiceAssignmentInputDto:
      type: object
      properties:
        code:
          type: string
          enum:
            - ADMINISTRATION
            - COMMERCIAL
            - LABORATORY
            - ACCOUNTING
            - SAMPLING
            - RECEPTION
            - SUPERVISION
            - QUALITY
            - CLAIMS
            - TECHNICAL_SECRETARIAT
        accessLevel:
          type: string
          enum:
            - FULL
            - MANAGER
            - OPERATOR
            - READ_ONLY
          default: FULL
          description: >-
            FULL/MANAGER = tout ; OPERATOR = pas de DELETE ; READ_ONLY = lecture
            seule
      required:
        - code
    ChangeUserServicesDto:
      type: object
      properties:
        serviceCodes:
          type: array
          description: >-
            Compat : liste de codes (niveau FULL implicite). Préférer
            `services`.
          items:
            type: string
            enum:
              - ADMINISTRATION
              - COMMERCIAL
              - LABORATORY
              - ACCOUNTING
              - SAMPLING
              - RECEPTION
              - SUPERVISION
              - QUALITY
              - CLAIMS
              - TECHNICAL_SECRETARIAT
        services:
          description: Affectations avec niveau d'accès par service
          type: array
          items:
            $ref: '#/components/schemas/ServiceAssignmentInputDto'
    FileDto:
      type: object
      properties:
        file:
          type: file
          description: Fichier contenants le/less donnée/s à importer
          format: binary
      required:
        - file
    CreateCustomerCompanyDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du client
          example: Fournisseur de company 1
          default: Fournisseur de company 1
        address:
          type: string
          description: Adresse du client
          example: 123 rue de la paix, 75000 Paris
          default: 123 rue de la paix, 75000 Paris
        logo:
          type: file
          description: Logo du client
          example: logo.png
          format: binary
        companyEmail:
          type: string
          description: Email du client
          example: company@mail.com
          default: company@mail.com
        companyPhone:
          type: string
          title: phone
          description: Le numéro de teléphone de l’entreprise
          example: +225 01 23 45 67
          default: +225 01 23 45 67
          pattern: ^\+?[0-9 ]+$
        companyWebsite:
          type: string
          description: Site web du client
          example: https://company.com
          default: https://company.com
        nbEmployees:
          type: string
          description: Nombre d'employés du fournisseur de company
          example: 10-20
        companyCountry:
          type: string
          description: Pays du fournisseur de company
          example: CIV
          default: CIV
        isActive:
          type: boolean
          description: Le compte du client est-il actif ?
          example: true
          default: true
        hasContract:
          type: string
          description: Est-ce que le client a un contrat ?
          example: 'true'
          default: 'false'
          enum:
            - 'true'
            - 'false'
        allProformasIncludedInContract:
          type: string
          description: >-
            Déclare que toutes les proformas de ce client entrent dans son
            contrat, même saisies sans contrat
          example: 'true'
          default: 'false'
          enum:
            - 'true'
            - 'false'
        unPaidAmountLimit:
          type: number
          title: unPaidAmountLimit
          description: >-
            Le montant maximum impayé autorisé pour les cotations de 
            l'entreprise
          example: 1000
          default: 1000
      required:
        - name
    UpdateCustomerCompanyDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du client
          example: Fournisseur de company 1
          default: Fournisseur de company 1
        address:
          type: string
          description: Adresse du client
          example: 123 rue de la paix, 75000 Paris
          default: 123 rue de la paix, 75000 Paris
        logo:
          type: file
          description: Logo du client
          example: logo.png
          format: binary
        companyEmail:
          type: string
          description: Email du client
          example: company@mail.com
          default: company@mail.com
        companyPhone:
          type: string
          title: phone
          description: Le numéro de teléphone de l’entreprise
          example: +225 01 23 45 67
          default: +225 01 23 45 67
          pattern: ^\+?[0-9 ]+$
        companyWebsite:
          type: string
          description: Site web du client
          example: https://company.com
          default: https://company.com
        nbEmployees:
          type: string
          description: Nombre d'employés du fournisseur de company
          example: 10-20
        companyCountry:
          type: string
          description: Pays du fournisseur de company
          example: CIV
          default: CIV
        isActive:
          type: boolean
          description: Le compte du client est-il actif ?
          example: true
          default: true
        hasContract:
          type: string
          description: Est-ce que le client a un contrat ?
          example: 'true'
          default: 'false'
          enum:
            - 'true'
            - 'false'
        allProformasIncludedInContract:
          type: string
          description: >-
            Déclare que toutes les proformas de ce client entrent dans son
            contrat, même saisies sans contrat
          example: 'true'
          default: 'false'
          enum:
            - 'true'
            - 'false'
        unPaidAmountLimit:
          type: number
          title: unPaidAmountLimit
          description: >-
            Le montant maximum impayé autorisé pour les cotations de 
            l'entreprise
          example: 1000
          default: 1000
        id:
          type: string
          description: L'identifiant de l'entreprise du client
          example: lsdi-4f5d-4f5d-4f5d
        createdAt:
          format: date-time
          type: string
          description: La date de création de l'entreprise du client
          example: 2026-09-22T11:35:31.902Z
          default: 2026-09-22T11:35:31.902Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour de l entreprise du client
          example: 2026-09-22T11:35:31.902Z
          default: 2026-09-22T11:35:31.902Z
      required:
        - id
    CreateProviderCustomerDto:
      type: object
      properties:
        email:
          type: string
          example: subuser1@gmail.com
          description: Email de client
        phone:
          type: string
          example: +225-07-07-07-07
          description: Téléphone de client
          nullable: true
        firstname:
          type: string
          example: Tonde
          description: Nom de client
          minLength: 1
          maxLength: 50
        lastname:
          type: string
          example: Souleymane
          description: Prénom de client
          minLength: 1
        position:
          type: string
          example: Dev
          description: Poste de client
          nullable: true
        country:
          type: string
          example: CIV
          description: Pays de client
          nullable: true
        lang:
          type: string
          example: fr
          description: Langue de client
          nullable: true
        type:
          type: string
          example: COMPANY
          enum:
            - INDIVIDUAL
            - COMPANY
          description: Type du client
        companyId:
          type: string
          description: >-
            L'identifiant de la société, au cas où elle existe déjà, on n'a plus
            besoin de donner name et address
          example: dsf4-4f5d-4f5d-4f5d
        companyName:
          type: string
          description: Nom de la société
          example: Société
          minLength: 3
          maxLength: 100
        companyAddress:
          type: string
          description: Adresse de la société
          example: 123 rue de la paix, 75000 Paris
          minLength: 3
          maxLength: 100
        companyEmail:
          type: string
          description: L'email de la société
          example: compa@gmail.com
        companyCountry:
          type: string
          description: Pays de la société
          example: CIV
        companyWebsite:
          type: string
          description: Site web de la société
          example: www.company.com
        companyPhone:
          type: string
          description: Téléphone de la société
          example: +225-07-07-07-07
        nbEmployees:
          type: string
          description: Nombre d'employés de la société
          example: 10-50
        isCompanyAdmin:
          type: boolean
          description: Est-ce que le client est un administrateur de la société
          example: true
        companyHasContract:
          type: string
          description: Est ce que l'entreprise a un contrat
          default: 'false'
          example: 'true'
          enum:
            - 'true'
            - 'false'
        avatar:
          type: file
          description: Avatar de client
          format: binary
        unPaidAmountLimit:
          type: number
          title: unPaidAmountLimit
          description: >-
            Le montant maximum impayé autorisé pour les cotations de 
            l'entreprise
          example: 1000
          default: 1000
      required:
        - email
        - firstname
        - lastname
        - type
        - isCompanyAdmin
    ConvertCustomerToCompanyDto:
      type: object
      properties:
        companyId:
          type: string
          description: ID of the company to convert the customer to
          example: 1234567890abcdef12345678
          default: 1234567890abcdef12345678
        newCompanyName:
          type: string
          description: Le nom de la nouvelle société
          example: Nouvelle Société
          default: Nouvelle Société
        newCompanyAddress:
          type: string
          description: Adresse de la nouvelle société
          example: 123 rue de la société, 75000 Paris
          default: 123 rue de la société, 75000 Paris
        newCompanyEmail:
          type: string
          description: Email de la nouvelle société
          example: contact@nouvelle-societe.com
          default: contact@nouvelle-societe.com
        newCompanyPhone:
          type: string
          description: Téléphone de la nouvelle société
          example: +33 1 23 45 67 89
          default: +33 1 23 45 67 89
        newCompanyWebsite:
          type: string
          description: Site web de la nouvelle société
          example: https://www.nouvelle-societe.com
          default: https://www.nouvelle-societe.com
      required:
        - companyId
    UpdateProviderCustomerDto:
      type: object
      properties:
        email:
          type: string
          example: subuser1@gmail.com
          description: Email de client
        phone:
          type: string
          example: +225-07-07-07-07
          description: Téléphone de client
          nullable: true
        firstname:
          type: string
          example: Tonde
          description: Nom de client
          minLength: 1
          maxLength: 50
        lastname:
          type: string
          example: Souleymane
          description: Prénom de client
          minLength: 1
        position:
          type: string
          example: Dev
          description: Poste de client
          nullable: true
        country:
          type: string
          example: CIV
          description: Pays de client
          nullable: true
        lang:
          type: string
          example: fr
          description: Langue de client
          nullable: true
        type:
          type: string
          example: COMPANY
          enum:
            - INDIVIDUAL
            - COMPANY
          description: Type du client
        companyId:
          type: string
          description: >-
            L'identifiant de la société, au cas où elle existe déjà, on n'a plus
            besoin de donner name et address
          example: dsf4-4f5d-4f5d-4f5d
        companyName:
          type: string
          description: Nom de la société
          example: Société
          minLength: 3
          maxLength: 100
        companyAddress:
          type: string
          description: Adresse de la société
          example: 123 rue de la paix, 75000 Paris
          minLength: 3
          maxLength: 100
        companyEmail:
          type: string
          description: L'email de la société
          example: compa@gmail.com
        companyCountry:
          type: string
          description: Pays de la société
          example: CIV
        companyWebsite:
          type: string
          description: Site web de la société
          example: www.company.com
        companyPhone:
          type: string
          description: Téléphone de la société
          example: +225-07-07-07-07
        nbEmployees:
          type: string
          description: Nombre d'employés de la société
          example: 10-50
        isCompanyAdmin:
          type: boolean
          description: Est-ce que le client est un administrateur de la société
          example: true
        companyHasContract:
          type: string
          description: Est ce que l'entreprise a un contrat
          default: 'false'
          example: 'true'
          enum:
            - 'true'
            - 'false'
        avatar:
          type: file
          description: Avatar de client
          format: binary
        unPaidAmountLimit:
          type: number
          title: unPaidAmountLimit
          description: >-
            Le montant maximum impayé autorisé pour les cotations de 
            l'entreprise
          example: 1000
          default: 1000
        id:
          type: string
          description: L'identifiant du client
          example: llsdi-4f5d-4f5d-4f5d
        createdAt:
          format: date-time
          type: string
          description: La date de création du client
          example: 2026-09-22T11:35:31.906Z
          default: 2026-09-22T11:35:31.906Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour du client
          example: 2026-09-22T11:35:31.906Z
          default: 2026-09-22T11:35:31.906Z
      required:
        - id
    CreateSubscriptionDto:
      type: object
      properties:
        planId:
          type: string
          example: se-4f5d-4f5d-4f5d
          description: L’identifiant du plan
        serviceProviderId:
          type: string
          example: dsui-4f5d-4f5d-4f5d
          description: L’identifiant du fournisseur de service
      required:
        - planId
        - serviceProviderId
    CreateRoleDto:
      type: object
      properties: {}
    AddRolesToUserDto:
      type: object
      properties:
        roles:
          type: array
          description: Liste des rôles à ajouter
          items:
            type: string
            enum:
              - SUPER_ADMIN
              - PROVIDER_ADMIN
              - PROVIDER_USER
              - PROVIDER_LAB_TECHNICIAN
              - PROVIDER_LAB_RESPONSIBLE
              - PROVIDER_LAB_MANAGER
              - PROVIDER_COMMERCIAL
              - PROVIDER_COMPTABLE
              - PROVIDER_PRELEVEUR
              - PROVIDER_RECEPTIONNISTE
              - PROVIDER_SUPERVISOR
              - PROVIDER_RECLAMATION_MANAGER
              - CUSTOMER_ADMIN
              - CUSTOMER_USER
              - INDIVIDUAL_CUSTOMER
              - PROVIDER
              - CUSTOMER
              - AUTH_FULL_ACCESS
              - AUTH_PARTIAL_ACCESS
              - PAID_PLAN
              - FREE_PLAN
              - CUSTOMER_INDIVIDUAL
              - CUSTOMER_COMPANY
              - RESPONSABLE_QUALITE
              - RESPONSABLE_PRELEVEUR
              - PROVIDER_TECHNICAL_SECRETARY
        userId:
          type: string
          description: Identifiant de l'utilisateur
      required:
        - roles
        - userId
    BullkAddRoleDto:
      type: object
      properties:
        file:
          type: file
          description: Fichier contenant les rôles à ajouter
          format: binary
      required:
        - file
    CreateParameterNormDto:
      type: object
      properties:
        name:
          type: string
          default: Norme - 574
          description: Le nom de la norme
        description:
          type: string
          default: Description de la norme
          description: La description de la norme
        normPrice:
          type: number
          default: 0
          description: Le prix de la norme
        parameterId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du paramètre
          example: lsd-4f5d-4f5d-4f5d
      required:
        - name
        - parameterId
    UpdateParameterNormDto:
      type: object
      properties:
        name:
          type: string
          default: Norme - 574
          description: Le nom de la norme
        description:
          type: string
          default: Description de la norme
          description: La description de la norme
        normPrice:
          type: number
          default: 0
          description: Le prix de la norme
        parameterId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du paramètre
          example: lsd-4f5d-4f5d-4f5d
        id:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la norme du matrix
          example: lsd-4f5d-4f5d-4f5d
      required:
        - id
    CreatePrelevementDto:
      type: object
      properties:
        reference:
          type: string
          description: 'La référence du prélèvement: Généré automatiquement'
          example: ac5a8f6b-e1ba-4cb2-bc6a-e01cb0da518c
        lieuPrelevement:
          type: string
          description: Lieu de prélèvement (texte complet, legacy ou auto-généré)
          example: Usine Zone 4, Ado, Cocody, Abidjan, Côte d'Ivoire
        lieuPays:
          type: string
          description: Pays du lieu de prélèvement
          example: Togo
        lieuVille:
          type: string
          description: Ville du lieu de prélèvement
          example: Lomé
        lieuCommune:
          type: string
          description: Commune ou arrondissement
          example: Golfe 1
        lieuLocalite:
          type: string
          description: Localité, quartier ou village
          example: Adidogomé
        lieuComplement:
          type: string
          description: Complément (site, adresse, repère)
          example: Station de traitement ENVAL
        datePrelevement:
          type: string
          description: La date de prélèvement
          example: 2026-02-04T09:08:15.080Z
        status:
          type: string
          description: Le statut du prélèvement
          example: EN_ATTENTE
        modePrelevement:
          type: string
          description: Le mode de prélèvement
          example: SUR_PLACE
        observation:
          type: string
          description: L'observation
          example: Eum vel reiciendis alias.
        nbEchantillon:
          type: number
          description: Le nombre d'échantillon
          example: MO
        usage:
          type: string
          description: Le type de prélèvement
          example: eligendi
        delaiConservation:
          type: string
          description: Le délai de conservation
          example: reprehenderit
        withProforma:
          type: boolean
          description: Le prélèvement est-il avec proforma?
          example: true
        proformaId:
          type: string
          description: L'identifiant de la proforma
          example: e70aef442cd2fa70b67fc7fc
        customerId:
          type: string
          description: L'identifiant du client
          example: 27b2e9a15ac0731f6afccebe
        customerType:
          type: string
          description: Le type de client
          example: COMPANY
        companyId:
          type: string
          description: L'identifiant de l'entreprise cliente
          example: 5cfea9b5bddeb051d55fb073
        preleveurs:
          type: array
          description: Les identifiants des préleveurs
          example:
            - 24386aec6b77ecfa378ef193
            - 23f5e39b603ba279dc9d5fae
        companyPackageId:
          type: string
          description: >-
            Le package du l entreprise client si le prélèvement est sans
            proforma et que le client est en contrat
          example: 71d7dd6aff0abf3e5aaa89ad
        processMode:
          type: string
          description: >-
            Le mode de traitement du prélèvement (PACKAGE, PROFORMA,
            NO_PACKAGE_NO_PROFORMA)
          example: PACKAGE
      required:
        - status
        - modePrelevement
    UpdatePrelevementDto:
      type: object
      properties:
        reference:
          type: string
          description: 'La référence du prélèvement: Généré automatiquement'
          example: ac5a8f6b-e1ba-4cb2-bc6a-e01cb0da518c
        lieuPrelevement:
          type: string
          description: Lieu de prélèvement (texte complet, legacy ou auto-généré)
          example: Usine Zone 4, Ado, Cocody, Abidjan, Côte d'Ivoire
        lieuPays:
          type: string
          description: Pays du lieu de prélèvement
          example: Togo
        lieuVille:
          type: string
          description: Ville du lieu de prélèvement
          example: Lomé
        lieuCommune:
          type: string
          description: Commune ou arrondissement
          example: Golfe 1
        lieuLocalite:
          type: string
          description: Localité, quartier ou village
          example: Adidogomé
        lieuComplement:
          type: string
          description: Complément (site, adresse, repère)
          example: Station de traitement ENVAL
        datePrelevement:
          type: string
          description: La date de prélèvement
          example: 2026-02-04T09:08:15.080Z
        status:
          type: string
          description: Le statut du prélèvement
          example: EN_ATTENTE
        modePrelevement:
          type: string
          description: Le mode de prélèvement
          example: SUR_PLACE
        observation:
          type: string
          description: L'observation
          example: Eum vel reiciendis alias.
        nbEchantillon:
          type: number
          description: Le nombre d'échantillon
          example: MO
        usage:
          type: string
          description: Le type de prélèvement
          example: eligendi
        delaiConservation:
          type: string
          description: Le délai de conservation
          example: reprehenderit
        withProforma:
          type: boolean
          description: Le prélèvement est-il avec proforma?
          example: true
        proformaId:
          type: string
          description: L'identifiant de la proforma
          example: e70aef442cd2fa70b67fc7fc
        customerId:
          type: string
          description: L'identifiant du client
          example: 27b2e9a15ac0731f6afccebe
        customerType:
          type: string
          description: Le type de client
          example: COMPANY
        companyId:
          type: string
          description: L'identifiant de l'entreprise cliente
          example: 5cfea9b5bddeb051d55fb073
        preleveurs:
          type: array
          description: Les identifiants des préleveurs
          example:
            - 24386aec6b77ecfa378ef193
            - 23f5e39b603ba279dc9d5fae
        companyPackageId:
          type: string
          description: >-
            Le package du l entreprise client si le prélèvement est sans
            proforma et que le client est en contrat
          example: 71d7dd6aff0abf3e5aaa89ad
        processMode:
          type: string
          description: >-
            Le mode de traitement du prélèvement (PACKAGE, PROFORMA,
            NO_PACKAGE_NO_PROFORMA)
          example: PACKAGE
        id:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du client
      required:
        - id
    SetEquipmentChecklistItemDto:
      type: object
      properties:
        equipmentId:
          type: string
          description: ID equipement catalogue
        quantityRequired:
          type: number
          default: 1
        mandatory:
          type: boolean
          default: true
      required:
        - equipmentId
    SetEquipmentChecklistDto:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SetEquipmentChecklistItemDto'
      required:
        - items
    ConfirmEquipmentChecklistDto:
      type: object
      properties:
        checkedItemIds:
          example:
            - uuid-item-1
            - uuid-item-2
          type: array
          items:
            type: string
      required:
        - checkedItemIds
    CreateEchantillonDto:
      type: object
      properties:
        prelevementId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du prelevement
        dateReception:
          format: date-time
          type: string
          example: '2022-10-10'
          description: La date de réception de l'échantillon
        modePrelevement:
          type: string
          example: normal
          description: Le mode de prélèvement de l'échantillon
        lieuPrestation:
          type: string
          example: Cocody, Abidjan 01 Côte d'Ivoire
          description: Le lieu de la prestation
        observation:
          type: string
          example: RAS
          description: L'observation du preleveur
        nbEchantillon:
          type: number
          example: 1
          description: Le nombre d'échantillon
        status:
          type: string
          example: EN_ATTENTE
          description: Le statut de l'échantillon
        ecartMethod:
          type: string
          example: RAS
          description: L'écart method
        exigenceParticuliere:
          type: string
          example: Je veux que le test soit fait en 2 jours
          description: L'exigence particulière
        methodEssai:
          type: string
          example: normalisee
          description: La méthode d'essaie
        delaiConservation:
          type: string
          example: Destruction systématique
          description: Le delai de conservation
        nbRapport:
          type: number
          example: 3
          description: Le nombre de rapport
        proformaId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
        customerId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du client
        companyId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de l'entreprise
        exigenceDelai:
          format: date-time
          type: string
          example: '2022-10-10'
          description: L'exigence de délai
        usage:
          type: string
          example: Usage
          description: L'usage de l'échantillon
        interlocuteurName:
          type: string
          description: Le nom de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurPhone:
          type: string
          description: Le téléphone de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurEmail:
          type: string
          description: L'email de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        preleventedBy:
          type: string
          description: Le nom du preleveur
          example: lsd-4f5d-4f5d-4f5d
        transporteur:
          type: string
          description: Le nom du transporteur
          example: lsd-4f5d-4f5d-4f5d
        isReceivingByFraction:
          type: boolean
          description: le proforma sera reçu par fraction?
        nbEchantillonToReceive:
          type: number
          example: 1
          description: Le nombre d'échantillon à reçevoir si la reception est partielle
      required:
        - isReceivingByFraction
    AddEchantillonCommentDto:
      type: object
      properties:
        content:
          type: string
          description: Contenu du commentaire
        interpretation:
          type: string
          description: Interprétation
        notaBene:
          type: string
          description: Nota Bene
        rapportIds:
          description: Identifiant du rapport
          type: array
          items:
            type: string
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
      required:
        - content
        - interpretation
        - notaBene
        - rapportIds
        - laboratoryId
    AddEchantillonNotaBeneDto:
      type: object
      properties:
        content:
          type: string
          description: Contenu de la remarque
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
      required:
        - content
        - laboratoryId
    UpdateEchantillonDto:
      type: object
      properties:
        prelevementId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du prelevement
        dateReception:
          format: date-time
          type: string
          example: '2022-10-10'
          description: La date de réception de l'échantillon
        modePrelevement:
          type: string
          example: normal
          description: Le mode de prélèvement de l'échantillon
        lieuPrestation:
          type: string
          example: Cocody, Abidjan 01 Côte d'Ivoire
          description: Le lieu de la prestation
        observation:
          type: string
          example: RAS
          description: L'observation du preleveur
        nbEchantillon:
          type: number
          example: 1
          description: Le nombre d'échantillon
        status:
          type: string
          example: EN_ATTENTE
          description: Le statut de l'échantillon
        ecartMethod:
          type: string
          example: RAS
          description: L'écart method
        exigenceParticuliere:
          type: string
          example: Je veux que le test soit fait en 2 jours
          description: L'exigence particulière
        methodEssai:
          type: string
          example: normalisee
          description: La méthode d'essaie
        delaiConservation:
          type: string
          example: Destruction systématique
          description: Le delai de conservation
        nbRapport:
          type: number
          example: 3
          description: Le nombre de rapport
        proformaId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la proforma
        customerId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du client
        companyId:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de l'entreprise
        exigenceDelai:
          format: date-time
          type: string
          example: '2022-10-10'
          description: L'exigence de délai
        usage:
          type: string
          example: Usage
          description: L'usage de l'échantillon
        interlocuteurName:
          type: string
          description: Le nom de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurPhone:
          type: string
          description: Le téléphone de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        interlocuteurEmail:
          type: string
          description: L'email de l'interlocuteur
          example: lsd-4f5d-4f5d-4f5d
        preleventedBy:
          type: string
          description: Le nom du preleveur
          example: lsd-4f5d-4f5d-4f5d
        transporteur:
          type: string
          description: Le nom du transporteur
          example: lsd-4f5d-4f5d-4f5d
        isReceivingByFraction:
          type: boolean
          description: le proforma sera reçu par fraction?
        nbEchantillonToReceive:
          type: number
          example: 1
          description: Le nombre d'échantillon à reçevoir si la reception est partielle
        id:
          type: string
          example: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de l'échantillon
    IntelligentReviewLineDto:
      type: object
      properties:
        analyseExecutionId:
          type: string
          format: uuid
          description: Analyse concernée
        matrixName:
          type: string
          description: >-
            Nom de matrice. Inexistant pour ce laboratoire = créé, existant =
            réutilisé.
        parameterName:
          type: string
          description: >-
            Nom de paramètre. Inexistant = créé (correction du référentiel),
            existant = remplacement.
        normName:
          type: string
          description: Nom de norme. Inexistante = créée.
        seulValue:
          type: string
          description: Valeur seuil appliquée à cette demande (critère)
        sign:
          type: string
          description: Signe du seuil (<, >, =, …)
      required:
        - analyseExecutionId
    IntelligentParameterReviewDto:
      type: object
      properties:
        laboratoryId:
          type: string
          format: uuid
        lines:
          type: array
          items:
            $ref: '#/components/schemas/IntelligentReviewLineDto'
      required:
        - laboratoryId
        - lines
    ReplaceDemandeParameterDto:
      type: object
      properties: {}
    UpdateEchantillonItemDto:
      type: object
      properties:
        codeLabo:
          type: string
          description: Le code echantillon
          example: LABO-01
        codeClient:
          type: string
          description: Le code client
          example: CLIENT-01
        datePrelevement:
          type: string
          description: La date de reception de l'echantillon
          example: '2021-09-30'
        natureEchantillon:
          type: string
          description: La nature de l'echantillon
          example: Eau
        conditionnement:
          type: string
          description: Le conditionnement de l'echantillon
          example: Flacon
        temperature:
          type: string
          description: La temperature de l'echantillon
          example: 20°C
        contenant:
          type: string
          description: La quantite de l'echantillon
          example: 5L
        gpsCoordonnees:
          type: string
          description: Les coordonnees gps de l'echantillon
          example: 5.345, 3.456
        proformaItemId:
          type: string
          description: L'id du proforoma item d'analyse
          example: 1feb0e82-f239-4da6-b255-fab0825f476d
          default: 1815d11f-b7b1-4134-81e7-bd8325c30da4
        tafs:
          type: array
          description: Travaux à effectuer
          example:
            - parameterNormId: 8093618b-d5ac-4a85-b94e-4e1cf8d71fd0
            - parameterNormId: eb8c5052-fe37-44c8-aa6b-832662a7783f
          default:
            - parameterNormId: 0892f2b6-bfd7-4324-aeda-c8ca5679bf79
            - parameterNormId: de24fe7c-e80d-4bd8-8747-49ae7034b520
        id:
          type: number
          description: Id de  l item de  l'échantillon
          example: 6ddc812b-4e27-41b4-8b99-51b3351428a2
      required:
        - id
    RenameNatureEchantillonDto:
      type: object
      properties:
        from:
          type: string
          description: Libellé actuel à corriger
        to:
          type: string
          description: Nouveau libellé (existant ou corrigé)
      required:
        - from
        - to
    CreatePreleveurDto:
      type: object
      properties:
        preleveurUsersIds:
          type: array
          description: Liste userIds des identifiants des preleveurs
          example:
            - sqeresdaezdh-azeazd-azdazd
            - sqeresdadsezdh-azeazd-azdazd
      required:
        - preleveurUsersIds
    ReassignPreleveursDto:
      type: object
      properties:
        preleveurIds:
          description: Liste des userId préleveurs à assigner (remplace la liste actuelle)
          type: array
          items:
            type: string
      required:
        - preleveurIds
    RejectPrelevementDto:
      type: object
      properties:
        reason:
          type: string
          description: Raison du rejet
          example: Le prélèvement n'est pas conforme
          title: Raison
      required:
        - reason
    SentRapportByBordereauDto:
      type: object
      properties:
        sendAt:
          format: date-time
          type: string
          title: Date d'envoi
          description: La date d'envoi du rapport
          example: '2021-01-01'
        files:
          title: Fichier joint
          description: Le fichier joint du rapport
          example: https://example.com/rapport.pdf
          type: array
          items:
            type: string
      required:
        - sendAt
        - files
    RejectRapportDto:
      type: object
      properties: {}
    CreateMultilingualDownloadDto:
      type: object
      properties: {}
    UpdateRapportDto:
      type: object
      properties:
        type:
          type: string
          title: Type du rapport
          description: Le type du rapport
          example: Rapport Normal
        status:
          type: string
          title: Statut du rapport
          description: Le statut du rapport
          example: EN_ATTENTE
          enum:
            - EN_ATTENTE
            - EN_COURS_DE_TRAITEMENT
            - EN_ATTENTE_VALIDATION
            - DISPONIBLE
            - ANNULE
            - NON_CONFORME
        contratName:
          type: string
          title: Nom du contrat
          description: Le nom du contrat associé au rapport
          example: Contrat 123
        id:
          type: number
          title: Identifiant du rapport
          description: L'identifiant du rapport
          example: fff71498-e840-475c-9ad4-df7e90b62f03
      required:
        - id
    SentRapportDto:
      type: object
      properties:
        sendAt:
          format: date-time
          type: string
          title: Date d'envoi
          description: La date d'envoi du rapport
          example: '2021-01-01'
        file:
          type: object
          title: Fichier joint
          description: Le fichier joint du rapport
          example: https://example.com/rapport.pdf
      required:
        - sendAt
        - file
    UpdateRapportAssignmentToAnalysesDto:
      type: object
      properties:
        rapportId:
          type: string
          description: ID du rapport à mettre à jour
          example: 1234567890abcdef12345678
        analyses:
          type: array
          description: Liste des analyses à assigner au rapport
          items:
            type: object
            properties:
              echantillonItemTafId:
                type: string
                description: ID de l'échantillon TAF
                example: 1234567890abcdef12345678
              echantillonItemId:
                type: string
                description: ID de l'échantillon
                example: abcdef1234567890abcdef12
      required:
        - rapportId
        - analyses
    CertificateCommentItem:
      type: object
      properties:
        certificateIdentifier:
          type: string
          description: Identifiant unique du certificat (pour gérer les doublons)
          example: cert-aflatoxines-001
        certificate_name:
          type: string
          description: Nom du certificat
          example: aflatoxines
        comment:
          type: string
          description: Commentaire pour ce certificat
          example: Résultats conformes aux normes en vigueur
        rapportId:
          type: string
          description: ID du rapport
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
      required:
        - certificateIdentifier
        - certificate_name
        - comment
        - rapportId
    AddCertificateCommentDto:
      type: object
      properties:
        laboratoryId:
          type: string
          description: ID du laboratoire
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
        certificateComments:
          description: Liste des commentaires de certificat à ajouter
          type: array
          items:
            $ref: '#/components/schemas/CertificateCommentItem'
      required:
        - laboratoryId
        - certificateComments
    CreateReclamationDto:
      type: object
      properties:
        titre:
          type: string
          description: The title of the reclamation
          example: Reclamation Title
        description:
          type: string
          description: The description of the reclamation
          example: Reclamation Description
        type:
          type: string
          description: The type of the reclamation
          example: DEMANDE_MODIFICATION
          enum:
            - NON_CONFORMITE_RESULTAT
            - NON_CONFORMITE_DELAI
            - NON_CONFORMITE_RAPPORT
            - NON_CONFORMITE_PRELEVEMENT
            - NON_CONFORMITE_ECHANTILLON
            - NON_CONFORMITE_METHODE
            - NON_CONFORMITE_EQUIPEMENT
            - NON_CONFORMITE_TRAÇABILITE
            - DEMANDE_MODIFICATION
            - DEMANDE_REANALYSE
            - DEMANDE_ANNULATION
            - FACTURATION_INCORRECTE
            - DEVIS_INCORRECT
            - COMMUNICATION_INSUFFISANTE
            - DELAI_REPONSE_LONG
            - INFORMATION_MANQUANTE
            - INFORMATION_ERRONEE
            - PROBLEME_LIVRAISON
            - PERTE_ECHANTILLON
            - DETERIORATION_ECHANTILLON
            - CONDITIONNEMENT_INADEQUAT
            - ACCUEIL_CLIENT
            - COMPETENCE_PERSONNEL
            - CONSEIL_TECHNIQUE_INADEQUAT
            - NON_RESPECT_CONFIDENTIALITE
            - NON_CONFORMITE_NORME
            - PORTEE_ACCREDITATION
            - INCERTITUDE_MESURE
            - RECLAMATION_SOUS_TRAITANT
            - AUTRE
        priority:
          type: string
          description: The priority of the reclamation
          example: BASSE
          enum:
            - BASSE
            - NORMALE
            - HAUTE
            - CRITIQUE
        impact:
          type: string
          description: The impact of the reclamation
          example: MINEUR
          enum:
            - MINEUR
            - MAJEUR
            - CRITIQUE
        contactName:
          type: string
          description: The name of the contact
          example: John Doe
        contactEmail:
          type: string
          description: The email of the contact
          example: john.doe@example.com
        contactPhone:
          type: string
          description: The phone of the contact
          example: +33 1 23 45 67 89
        rapportIds:
          description: The IDs of the rapports
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        echantillonIds:
          description: The IDs of the echantillons
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        dateEcheance:
          type: string
          description: The date of the expiration
          example: '2025-01-01'
        laboratoireIds:
          description: The IDs of the laboratoires
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        estFondee:
          type: boolean
          description: Whether the claim is considered founded
          example: true
        necessiteDedommagement:
          type: boolean
          description: Whether compensation is required
          example: false
        detailsDedommagement:
          type: string
          description: Compensation details
          example: Avoir commercial de 10% sur la prochaine facture
        problemesAssocies:
          type: string
          description: Related issues identified during review
          example: Retard + erreur de communication client
        causesIdentifiees:
          type: string
          description: Root causes identified during investigation
          example: Absence de validation croisée avant envoi du rapport
        actionsCorrectivesEnvisagees:
          type: boolean
          description: Whether corrective actions must be considered
          example: true
        descriptionActionsCorrectives:
          type: string
          description: Description of considered corrective actions
          example: Mettre en place une check-list de validation avant diffusion
        commentairesAmelioration:
          type: string
          description: Improvement comments from quality review
          example: Formaliser un point hebdomadaire de suivi réclamations
      required:
        - titre
        - description
        - type
        - priority
        - impact
        - contactName
        - contactEmail
        - contactPhone
        - rapportIds
        - echantillonIds
        - dateEcheance
        - laboratoireIds
    UpdateReclamationDto:
      type: object
      properties:
        titre:
          type: string
          description: The title of the reclamation
          example: Reclamation Title
        description:
          type: string
          description: The description of the reclamation
          example: Reclamation Description
        type:
          type: string
          description: The type of the reclamation
          example: DEMANDE_MODIFICATION
          enum:
            - NON_CONFORMITE_RESULTAT
            - NON_CONFORMITE_DELAI
            - NON_CONFORMITE_RAPPORT
            - NON_CONFORMITE_PRELEVEMENT
            - NON_CONFORMITE_ECHANTILLON
            - NON_CONFORMITE_METHODE
            - NON_CONFORMITE_EQUIPEMENT
            - NON_CONFORMITE_TRAÇABILITE
            - DEMANDE_MODIFICATION
            - DEMANDE_REANALYSE
            - DEMANDE_ANNULATION
            - FACTURATION_INCORRECTE
            - DEVIS_INCORRECT
            - COMMUNICATION_INSUFFISANTE
            - DELAI_REPONSE_LONG
            - INFORMATION_MANQUANTE
            - INFORMATION_ERRONEE
            - PROBLEME_LIVRAISON
            - PERTE_ECHANTILLON
            - DETERIORATION_ECHANTILLON
            - CONDITIONNEMENT_INADEQUAT
            - ACCUEIL_CLIENT
            - COMPETENCE_PERSONNEL
            - CONSEIL_TECHNIQUE_INADEQUAT
            - NON_RESPECT_CONFIDENTIALITE
            - NON_CONFORMITE_NORME
            - PORTEE_ACCREDITATION
            - INCERTITUDE_MESURE
            - RECLAMATION_SOUS_TRAITANT
            - AUTRE
        priority:
          type: string
          description: The priority of the reclamation
          example: BASSE
          enum:
            - BASSE
            - NORMALE
            - HAUTE
            - CRITIQUE
        impact:
          type: string
          description: The impact of the reclamation
          example: MINEUR
          enum:
            - MINEUR
            - MAJEUR
            - CRITIQUE
        contactName:
          type: string
          description: The name of the contact
          example: John Doe
        contactEmail:
          type: string
          description: The email of the contact
          example: john.doe@example.com
        contactPhone:
          type: string
          description: The phone of the contact
          example: +33 1 23 45 67 89
        rapportIds:
          description: The IDs of the rapports
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        echantillonIds:
          description: The IDs of the echantillons
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        dateEcheance:
          type: string
          description: The date of the expiration
          example: '2025-01-01'
        laboratoireIds:
          description: The IDs of the laboratoires
          example:
            - '1'
            - '2'
            - '3'
          type: array
          items:
            type: string
        estFondee:
          type: boolean
          description: Whether the claim is considered founded
          example: true
        necessiteDedommagement:
          type: boolean
          description: Whether compensation is required
          example: false
        detailsDedommagement:
          type: string
          description: Compensation details
          example: Avoir commercial de 10% sur la prochaine facture
        problemesAssocies:
          type: string
          description: Related issues identified during review
          example: Retard + erreur de communication client
        causesIdentifiees:
          type: string
          description: Root causes identified during investigation
          example: Absence de validation croisée avant envoi du rapport
        actionsCorrectivesEnvisagees:
          type: boolean
          description: Whether corrective actions must be considered
          example: true
        descriptionActionsCorrectives:
          type: string
          description: Description of considered corrective actions
          example: Mettre en place une check-list de validation avant diffusion
        commentairesAmelioration:
          type: string
          description: Improvement comments from quality review
          example: Formaliser un point hebdomadaire de suivi réclamations
        status:
          type: string
          description: The status of the reclamation
          example: NOUVELLE
          enum:
            - NOUVELLE
            - EN_COURS_EVALUATION
            - EN_COURS_INVESTIGATION
            - EN_ATTENTE_VALIDATION
            - ACTIONS_CORRECTIVES
            - RESOLUE
            - FERMEE
            - ANNULEE
        evaluationInitiale:
          type: string
          description: The date of the expiration
          example: '2025-01-01'
        resolutionDescription:
          type: string
          description: The description of the resolution
          example: Resolution Description
        isEscalade:
          type: boolean
          description: The is escalade of the reclamation
          example: true
        isRecurrente:
          type: boolean
          description: The is recurrente of the reclamation
          example: true
        reclamationParenteId:
          type: string
          description: The ID of the reclamation parent
          example: '1'
      required:
        - status
        - evaluationInitiale
        - resolutionDescription
        - isEscalade
        - isRecurrente
        - reclamationParenteId
    SatisfactionDto:
      type: object
      properties: {}
    CreateActionCorrectiveDto:
      type: object
      properties: {}
    UpdateActionCorrectiveDto:
      type: object
      properties: {}
    EvaluationEfficaciteDto:
      type: object
      properties: {}
    CreateSLADto:
      type: object
      properties: {}
    CreateTemplateDto:
      type: object
      properties: {}
    CreateFilterPresetDto:
      type: object
      properties:
        name:
          type: string
          description: Name of the filter preset
          example: My Critical Issues
        description:
          type: string
          description: Optional description of the filter preset
          example: Shows all critical priority reclamations that are overdue
        entityType:
          type: string
          description: 'Entity type: reclamation or non-conformite'
          example: reclamation
          enum:
            - reclamation
            - non-conformite
        filterConfig:
          type: object
          description: Filter configuration object
          example:
            priority: CRITIQUE
            status: EN_COURS
            isEscalade: true
        isDefault:
          type: boolean
          description: Set as default filter for this entity type
          example: false
      required:
        - name
        - entityType
        - filterConfig
    UpdateFilterPresetDto:
      type: object
      properties:
        name:
          type: string
          description: Name of the filter preset
          example: My Critical Issues
        description:
          type: string
          description: Optional description of the filter preset
          example: Shows all critical priority reclamations that are overdue
        filterConfig:
          type: object
          description: Filter configuration object
          example:
            priority: CRITIQUE
            status: EN_COURS
            isEscalade: true
        isDefault:
          type: boolean
          description: Set as default filter for this entity type
          example: false
    UpdateNotificationPreferencesDto:
      type: object
      properties:
        assignmentNotifications:
          type: boolean
          description: Enable/disable assignment notifications
          example: true
        deadlineNotifications:
          type: boolean
          description: Enable/disable deadline approaching notifications
          example: true
        escalationNotifications:
          type: boolean
          description: Enable/disable escalation notifications
          example: true
        actionCompletionNotifications:
          type: boolean
          description: Enable/disable corrective action completion notifications
          example: true
        statusChangeNotifications:
          type: boolean
          description: Enable/disable status change notifications
          example: true
        commentNotifications:
          type: boolean
          description: Enable/disable comment notifications
          example: true
        emailEnabled:
          type: boolean
          description: Enable/disable email notifications
          example: true
        inAppEnabled:
          type: boolean
          description: Enable/disable in-app notifications
          example: true
    CreateNonConformityDto:
      type: object
      properties:
        titre:
          type: string
          description: The title of the non-conformity
          example: Equipment calibration out of specification
        description:
          type: string
          description: The description of the non-conformity
          example: >-
            pH meter calibration found to be outside acceptable range during
            routine check
        type:
          type: string
          description: The type of the non-conformity
          example: EQUIPEMENT
          enum:
            - TECHNIQUE
            - METHODOLOGIQUE
            - EQUIPEMENT
            - ECHANTILLON
            - PERSONNEL
            - ENVIRONNEMENTAL
            - DOCUMENTATION
            - SOUS_TRAITANCE
            - PREANALYTIQUE
            - POSTANALYTIQUE
            - ANALYTIQUE
        gravite:
          type: string
          description: The severity of the non-conformity
          example: MAJEURE
          enum:
            - MINEURE
            - MAJEURE
            - CRITIQUE
        laboratoryId:
          type: string
          description: The laboratory ID where the non-conformity was detected
          example: 123e4567-e89b-12d3-a456-426614174000
        phaseDetection:
          type: string
          description: The phase of detection
          example: Analytique
        rapportAnalyseId:
          type: string
          description: The report ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        echantillonId:
          type: string
          description: The sample ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        analyseId:
          type: string
          description: The analysis ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        equipement:
          type: string
          description: The equipment involved
          example: 'pH Meter - Serial #12345'
        actionsImmediates:
          type: string
          description: >-
            IMMEDIATE CONTAINMENT ACTIONS (distinct from corrective actions):
            Actions taken immediately to contain the non-conformity and prevent
            it from spreading. These are temporary measures taken before root
            cause analysis. Required before proceeding to EN_ANALYSE status.
          example: >-
            Equipment taken out of service and tagged. Samples re-analyzed with
            backup equipment. Affected reports flagged for review.
      required:
        - titre
        - description
        - type
        - gravite
    UpdateNonConformityDto:
      type: object
      properties:
        titre:
          type: string
          description: The title of the non-conformity
          example: Equipment calibration out of specification
        description:
          type: string
          description: The description of the non-conformity
          example: >-
            pH meter calibration found to be outside acceptable range during
            routine check
        type:
          type: string
          description: The type of the non-conformity
          example: EQUIPEMENT
          enum:
            - TECHNIQUE
            - METHODOLOGIQUE
            - EQUIPEMENT
            - ECHANTILLON
            - PERSONNEL
            - ENVIRONNEMENTAL
            - DOCUMENTATION
            - SOUS_TRAITANCE
            - PREANALYTIQUE
            - POSTANALYTIQUE
            - ANALYTIQUE
        gravite:
          type: string
          description: The severity of the non-conformity
          example: MAJEURE
          enum:
            - MINEURE
            - MAJEURE
            - CRITIQUE
        laboratoryId:
          type: string
          description: The laboratory ID where the non-conformity was detected
          example: 123e4567-e89b-12d3-a456-426614174000
        phaseDetection:
          type: string
          description: The phase of detection
          example: Analytique
        rapportAnalyseId:
          type: string
          description: The report ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        echantillonId:
          type: string
          description: The sample ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        analyseId:
          type: string
          description: The analysis ID linked to this non-conformity
          example: 123e4567-e89b-12d3-a456-426614174000
        equipement:
          type: string
          description: The equipment involved
          example: 'pH Meter - Serial #12345'
        actionsImmediates:
          type: string
          description: >-
            IMMEDIATE CONTAINMENT ACTIONS (distinct from corrective actions):
            Actions taken immediately to contain the non-conformity and prevent
            it from spreading. These are temporary measures taken before root
            cause analysis. Required before proceeding to EN_ANALYSE status.
          example: >-
            Equipment taken out of service and tagged. Samples re-analyzed with
            backup equipment. Affected reports flagged for review.
        statut:
          type: string
          description: The status of the non-conformity
          example: EN_ANALYSE
          enum:
            - DETECTEE
            - EN_ANALYSE
            - ACTIONS_EN_COURS
            - EN_VERIFICATION
            - CLOTUREE
            - VALIDEE
        analyseCauses:
          type: string
          description: Root cause analysis details
          example: 5 Whys analysis performed...
        causeRacine:
          type: string
          description: Identified root cause
          example: Calibration procedure not followed correctly
        impactClient:
          type: boolean
          description: Does this impact the customer?
          example: false
        impactValidite:
          type: boolean
          description: Does this impact result validity?
          example: true
        echantillonsImpactes:
          type: number
          description: Number of samples impacted
          example: 5
        rapportsImpactes:
          type: number
          description: Number of reports impacted
          example: 2
    ChangeStatusDto:
      type: object
      properties:
        newStatus:
          type: string
          description: The new status
          example: EN_ANALYSE
          enum:
            - DETECTEE
            - EN_ANALYSE
            - ACTIONS_EN_COURS
            - EN_VERIFICATION
            - CLOTUREE
            - VALIDEE
        comment:
          type: string
          description: Optional comment explaining the status change
          example: Moving to analysis phase after immediate actions completed
      required:
        - newStatus
    LinkEntityDto:
      type: object
      properties:
        entityId:
          type: string
          description: The entity ID to link
          example: 123e4567-e89b-12d3-a456-426614174000
      required:
        - entityId
    AddWhyDto:
      type: object
      properties:
        question:
          type: string
          description: The "Why" question
          example: Why was the calibration out of specification?
        answer:
          type: string
          description: The answer to the "Why" question
          example: The calibration procedure was not followed correctly
        level:
          type: number
          description: The level of the "Why" (1-5)
          example: 1
          minimum: 1
          maximum: 5
      required:
        - question
        - answer
        - level
    AddIshikawaCategoryDto:
      type: object
      properties:
        category:
          type: string
          description: The Ishikawa category
          example: MAN
          enum:
            - MAN
            - MACHINE
            - METHOD
            - MATERIAL
            - MEASUREMENT
            - ENVIRONMENT
        causes:
          description: Array of causes for this category
          example:
            - Lack of training
            - Insufficient supervision
          type: array
          items:
            type: string
      required:
        - category
        - causes
    IdentifyRootCauseDto:
      type: object
      properties:
        rootCause:
          type: string
          description: The identified root cause
          example: Inadequate training program for new equipment calibration procedures
      required:
        - rootCause
    AssessImpactDto:
      type: object
      properties:
        impactClient:
          type: boolean
          description: Does this non-conformity impact customers?
          example: true
        impactValidite:
          type: boolean
          description: Does this non-conformity impact result validity?
          example: true
        echantillonsImpactes:
          type: number
          description: Number of samples impacted
          example: 5
          minimum: 0
        rapportsImpactes:
          type: number
          description: Number of reports impacted
          example: 2
          minimum: 0
      required:
        - impactClient
        - impactValidite
        - echantillonsImpactes
        - rapportsImpactes
    ValidateForClosureDto:
      type: object
      properties:
        comment:
          type: string
          description: Optional comment from quality manager on validation
          example: All requirements met. Approved for closure.
    RejectValidationDto:
      type: object
      properties:
        reason:
          type: string
          description: Reason for rejecting validation (required)
          example: >-
            Effectiveness verification is incomplete. Please provide more
            evidence that the corrective actions have resolved the issue.
      required:
        - reason
    CreateDemandeAnalyseDto:
      type: object
      properties:
        rapportId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du rapport
          example: lsd-4f5d-4f5d-4f5d
        observation:
          type: string
          default: je suis une observation
          description: L'observation de la demande d'analyse
          example: je suis une observation
        requiredDelai:
          type: date
          default: 2026-09-22T11:35:32.239Z
          description: exigence de délai de la demande d'analyse
        rapportType:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: Le type de rapport
          example: standard
        analyses:
          type: array
          description: >-
            Les analyses de la demande - chaque analyse contient son
            echantillonItemId
          example:
            - echantillonItemId: lsd-4f5d-4f5d-4f5d
              rapportId: lsd-4f5d-4f5d-4f5d
              parameterNormId: lsd-4f5d-4f5d-4f5d
              echantillonItemTafId: lsd-4f5d-4f5d-4f5d
              laboratoryId: lsd-4f5d-4f5d-4f5d
              normeName: ISO 9001
        contrat:
          type: string
          title: Contrat
          description: >-
            L'identifiant du contrat associé aux rapports si le type est
            salmonelle separé
          example: contrat-12345
        generateRapportByLab:
          type: boolean
          title: Généré par le rapport de laboratoire
          description: Indique si le rapport doit être généré par le laboratoire
          example: false
      required:
        - rapportId
        - requiredDelai
        - analyses
    CreateRapportTransmissionDto:
      type: object
      properties:
        reference:
          type: string
          description: Référence du rapport
          example: fcbeaa37cee55f56dc7beba3
        interlocuteurs:
          type: array
          description: >-
            Liste des interlocuteurs qui recoivent le rapport si le client est
            une entreprise
          example:
            - 1e5613ddbe58c10c49d4cc97
            - e77b5145cebe6ded05ea68df
        libelle:
          type: string
          description: le libelle du rapport
          example: Uredo caste adopto advenio capitulus.
        observation:
          type: string
          description: observation
          example: Tui debilito copia degero aufero deludo curto vito.
        uploadType:
          type: string
          description: Le type d'upload
          example: local
          enum:
            - local
            - cloudinary
        url:
          type: string
          description: le lien du rapport
          example: https://multicolored-fireman.net
        type:
          type: string
          description: le type du rapport
          example: ademptio
        originalname:
          type: string
          description: le nom original du fichier
          example: till_stranger.list
        files:
          type: array
          description: Les fichiers du rapport
          items:
            type: string
            format: binary
      required:
        - reference
        - interlocuteurs
        - libelle
        - uploadType
        - files
    UpdateRapportTransmissionDto:
      type: object
      properties:
        reference:
          type: string
          description: Référence du rapport
          example: fcbeaa37cee55f56dc7beba3
        interlocuteurs:
          type: array
          description: >-
            Liste des interlocuteurs qui recoivent le rapport si le client est
            une entreprise
          example:
            - 1e5613ddbe58c10c49d4cc97
            - e77b5145cebe6ded05ea68df
        libelle:
          type: string
          description: le libelle du rapport
          example: Uredo caste adopto advenio capitulus.
        observation:
          type: string
          description: observation
          example: Tui debilito copia degero aufero deludo curto vito.
        uploadType:
          type: string
          description: Le type d'upload
          example: local
          enum:
            - local
            - cloudinary
        url:
          type: string
          description: le lien du rapport
          example: https://multicolored-fireman.net
        type:
          type: string
          description: le type du rapport
          example: ademptio
        originalname:
          type: string
          description: le nom original du fichier
          example: till_stranger.list
        files:
          type: array
          description: Les fichiers du rapport
          items:
            type: string
            format: binary
    CreateQuestionDto:
      type: object
      properties:
        questionText:
          type: string
          example: Quelle est votre satisfaction globale ?
          description: Le texte de la question.
        subtitle:
          type: string
          example: Qualité du service
          description: Sous-titre du bloc de questions (optionnel).
        helpText:
          type: string
          example: Évaluez de 1 à 5
          description: Texte d'aide pour le répondant.
        questionType:
          type: string
          example: RATING
          description: Le type de question.
        isRequired:
          type: boolean
          example: true
          description: Indique si la question est requise.
        order:
          type: number
          example: 1
          description: L'ordre de la question.
        options:
          example:
            - Option 1
            - Option 2
          description: Les options de réponse pour les questions à choix.
          type: array
          items:
            type: string
        specifyOptions:
          example:
            - Autre
          description: >-
            Options pour lesquelles un champ « précisez » est demandé (ex.
            Autre, Oui).
          type: array
          items:
            type: string
        minRating:
          type: number
          example: 1
          description: La note minimale pour les questions de type échelle.
        maxRating:
          type: number
          example: 5
          description: La note maximale pour les questions de type échelle.
      required:
        - questionText
        - subtitle
        - helpText
        - questionType
        - isRequired
        - order
        - options
        - specifyOptions
        - minRating
        - maxRating
    CreateSurveyDto:
      type: object
      properties:
        title:
          type: string
          example: Enquête de satisfaction client 2024
          description: Le titre de l'enquête de satisfaction.
        description:
          type: string
          example: Description de l'enquête
          description: La description de l'enquête de satisfaction.
        surveyType:
          type: object
          example: CLIENT
          description: Le type de l'enquête de satisfaction.
        targetAudience:
          type: object
          example: ALL_CLIENTS
          description: Le public cible de l'enquête de satisfaction.
        triggerCondition:
          type: object
          example: RAPPORT_DELIVERED
          description: La condition de déclenchement de l'enquête de satisfaction.
        triggerPeriod:
          type: object
          example: WEEKLY
          description: La période de déclenchement de l'enquête de satisfaction.
        isBlockingAccess:
          type: boolean
          example: true
          description: Indique si l'accès à l'enquête est bloquant.
        gracePeriodDays:
          type: number
          example: 30
          description: Le nombre de jours de grâce avant l'expiration de l'enquête.
        expirationDays:
          type: number
          example: 7
          description: Le nombre de jours avant l'expiration de l'enquête.
        targetRoles:
          example:
            - ADMIN
            - TECHNICIEN
          description: Les rôles cibles de l'enquête de satisfaction.
          type: array
          items:
            type: string
        targetLaboratories:
          example:
            - lab1
            - lab2
          description: Les laboratoires cibles de l'enquête de satisfaction.
          type: array
          items:
            type: string
        questions:
          description: Les questions de l'enquête de satisfaction.
          type: array
          items:
            $ref: '#/components/schemas/CreateQuestionDto'
        isActive:
          type: boolean
          example: true
          description: Indique si l'enquête est active.
        isAnonymous:
          type: boolean
          example: false
          description: Indique si les réponses sont anonymes.
        startDate:
          format: date-time
          type: string
          example: '2024-01-01T00:00:00Z'
          description: La date de début de l'enquête de satisfaction.
        endDate:
          format: date-time
          type: string
          example: '2024-12-31T23:59:59Z'
          description: La date de fin de l'enquête de satisfaction.
      required:
        - title
        - description
        - surveyType
        - targetAudience
        - triggerCondition
        - triggerPeriod
        - isBlockingAccess
        - gracePeriodDays
        - expirationDays
        - targetRoles
        - targetLaboratories
        - questions
        - isActive
        - isAnonymous
        - startDate
        - endDate
    SubmitAnswerDto:
      type: object
      properties:
        questionId:
          type: string
          example: question123
          description: L'ID de la question.
        textValue:
          type: string
        numericValue:
          type: number
        selectedOptions:
          type: array
          items:
            type: string
        booleanValue:
          type: boolean
      required:
        - questionId
    SubmitResponseDto:
      type: object
      properties:
        surveyId:
          type: string
          example: survey123
          description: L'ID de l'enquête de satisfaction.
        answers:
          description: Les réponses à l'enquête de satisfaction.
          type: array
          items:
            $ref: '#/components/schemas/SubmitAnswerDto'
        sessionContext:
          type: object
          description: Contexte de session (navigateur, etc.)
      required:
        - surveyId
        - answers
    UpdateDemandeGroupDto:
      type: object
      properties:
        observation:
          type: string
          description: L'observation de la demande d'analyse
        requiredDelai:
          format: date-time
          type: string
          description: Exigence de délai de la demande d'analyse
        isUrgent:
          type: boolean
          description: L'urgence de la demande d'analyse
      required:
        - requiredDelai
    CreateAnalysesExectutionDto:
      type: object
      properties:
        analyseExecutionId:
          type: string
          description: L'identifiant de l'item de la demande d'analyse
          example: aba7675d-3cf0-4994-a131-2416df2ab442
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2026-07-15T09:12:59.270Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '7'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Aut ait acies nesciunt vel.
        priorite:
          type: number
          description: La priorité de l analyse
          example: '9'
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
            - 6
            - 7
            - 8
            - 9
            - 10
        techniciens:
          type: array
          description: Les techniciens qui vont réaliser l'analyse
          example:
            - id: 9e5f08bd-380c-498b-a237-6cdf56ac6cdb
            - id: 83299459-372b-46d4-885a-338c6d3842e7
            - id: 6e90d138-1b71-4619-be87-724ba35f08e5
      required:
        - analyseExecutionId
        - dateExigence
        - techniciens
    UpdateAnalysesExectutionDto:
      type: object
      properties:
        analyseExecutionId:
          type: string
          description: L'identifiant de l'item de la demande d'analyse
          example: aba7675d-3cf0-4994-a131-2416df2ab442
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2026-07-15T09:12:59.270Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '7'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Aut ait acies nesciunt vel.
        priorite:
          type: number
          description: La priorité de l analyse
          example: '9'
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
            - 6
            - 7
            - 8
            - 9
            - 10
        techniciens:
          type: array
          description: Les techniciens qui vont réaliser l'analyse
          example:
            - id: 9e5f08bd-380c-498b-a237-6cdf56ac6cdb
            - id: 83299459-372b-46d4-885a-338c6d3842e7
            - id: 6e90d138-1b71-4619-be87-724ba35f08e5
    MolecularLotCatalogueDto:
      type: object
      properties:
        packageId:
          type: string
        executionIds:
          type: array
          items:
            type: string
      required:
        - packageId
        - executionIds
    DetectedMoleculeDto:
      type: object
      properties:
        parameterId:
          type: string
        value:
          type: string
        resultat:
          type: string
        sign:
          type: string
        unitMeasure:
          type: string
        conformite:
          type: string
          enum:
            - NON_CONFORME
            - CONFORME
            - EN_ATTENTE
      required:
        - parameterId
    SaveMolecularLotDto:
      type: object
      properties:
        packageId:
          type: string
        executionIds:
          type: array
          items:
            type: string
        detected:
          type: array
          items:
            $ref: '#/components/schemas/DetectedMoleculeDto'
        dateDebut:
          type: string
        dateFin:
          type: string
      required:
        - packageId
        - executionIds
        - detected
    SaveMolecularBulkDto:
      type: object
      properties:
        executionIds:
          type: array
          items:
            type: string
        detected:
          type: array
          items:
            $ref: '#/components/schemas/DetectedMoleculeDto'
        dateDebut:
          type: string
        dateFin:
          type: string
      required:
        - executionIds
        - detected
    SaveDetectedMoleculesDto:
      type: object
      properties:
        detected:
          type: array
          items:
            $ref: '#/components/schemas/DetectedMoleculeDto'
        dateDebut:
          type: string
        dateFin:
          type: string
      required:
        - detected
    SaveAiDiagnosticDto:
      type: object
      properties:
        laboratoryId:
          type: string
          format: uuid
        laboratoryName:
          type: string
        demandeGroupId:
          type: string
          format: uuid
        labDemandeId:
          type: string
          format: uuid
        echantillonId:
          type: string
          format: uuid
        reference:
          type: string
          description: Référence de la demande analysée
        requestPayload:
          type: object
          description: Charge utile envoyée au service IA, telle quelle
        rawResponse:
          type: object
          description: Réponse brute du service IA (objet ou chaîne JSON)
    CreateRapportPrelevementDto:
      type: object
      properties:
        observation:
          type: string
          example: >-
            At quas dolores dicta mollitia tempore ad ut nesciunt. Officiis
            culpa optio blanditiis.
          description: Une observation sur le prélèvement
        echantillonPreleves:
          type: number
          example: '06'
          description: Nombre d'échantillons prélevés
        echantillonNonPreleves:
          type: number
          example: '89'
          description: Nombre d'échantillons non prélevés
        rapportItems:
          type: array
          example: []
          description: Les items du rapport
        processMode:
          type: string
          example: PROFORMA
          description: Le mode de traitement du prélèvement (PROFORMA, PACKAGE)
      required:
        - processMode
    UpdateRapportPrelevementDto:
      type: object
      properties:
        observation:
          type: string
          example: >-
            At quas dolores dicta mollitia tempore ad ut nesciunt. Officiis
            culpa optio blanditiis.
          description: Une observation sur le prélèvement
        echantillonPreleves:
          type: number
          example: '06'
          description: Nombre d'échantillons prélevés
        echantillonNonPreleves:
          type: number
          example: '89'
          description: Nombre d'échantillons non prélevés
        rapportItems:
          type: array
          example: []
          description: Les items du rapport
        processMode:
          type: string
          example: PROFORMA
          description: Le mode de traitement du prélèvement (PROFORMA, PACKAGE)
    CreateAppsConfigurationDto:
      type: object
      properties: {}
    UpdateAppsConfigurationDto:
      type: object
      properties: {}
    CreateProviderApplicationDto:
      type: object
      properties: {}
    UpdateProviderApplicationDto:
      type: object
      properties: {}
    CreatePlanDto:
      type: object
      properties:
        label:
          type: string
          example: Plan de base
          description: Le label du plan
          minLength: 3
          maxLength: 100
        description:
          type: string
          example: Plan de base
          description: La description du plan
          minLength: 3
          maxLength: 500
        allowedAccess:
          example:
            - Avoir 2 utilisateurs maximum
            - 5 laboratoire maximum
          description: Les avantages du plan
          type: array
          items:
            type: string
        price:
          type: number
          example: 0
          description: Le prix du plan
        duration:
          type: number
          example: 12
          description: La durée du plan en mois
      required:
        - label
    UpdatePlanDto:
      type: object
      properties:
        label:
          type: string
          example: Plan de base
          description: Le label du plan
          minLength: 3
          maxLength: 100
        description:
          type: string
          example: Plan de base
          description: La description du plan
          minLength: 3
          maxLength: 500
        allowedAccess:
          example:
            - Avoir 2 utilisateurs maximum
            - 5 laboratoire maximum
          description: Les avantages du plan
          type: array
          items:
            type: string
        price:
          type: number
          example: 0
          description: Le prix du plan
        duration:
          type: number
          example: 12
          description: La durée du plan en mois
        id:
          type: string
          example: uuid-uuid-uuid-uuid
          description: L'identifiant du plan
      required:
        - id
    CreatePlanificationDto:
      type: object
      properties:
        analyseExecutionId:
          type: string
          description: L'identifiant de l'item de la demande d'analyse
          example: 48e854c7-d2d3-4786-a980-56e726c785e2
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2026-07-31T16:34:22.143Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '9'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Sit textus ultra ubi delego amet trucido demonstro.
        priorite:
          type: number
          description: La priorité de l analyse
          example: '8'
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
            - 6
            - 7
            - 8
            - 9
            - 10
        techniciens:
          type: array
          description: Les techniciens qui vont réaliser l'analyse
          example:
            - id: 4d723694-2516-4f3d-9e66-00f41228b65e
            - id: df32f81e-f058-46e2-8ee6-e5db99a48566
            - id: aff4126d-8354-401c-86d0-a008c8c91ca0
      required:
        - analyseExecutionId
        - dateExigence
        - techniciens
    AppliquateCritereDto:
      type: object
      properties:
        critereId:
          type: string
          description: Identifiant du critère d'analyse
          example: 60f7c2f5d5f9d0001e000001
        matrixId:
          type: object
          description: Identifiant des  matrices d'analyse
          example: 60f7c2f5d5f9d0001e000002
        echantillonId:
          type: string
          description: Identifiant de l'échantillon
          example: 60f7c2f5d5f9d0001e000001
        selectedItems:
          description: Identifiants des échantillons à appliquer le critère
          example:
            - 60f7c2f5d5f9d0001e000001
            - 60f7c2f5d5f9d0001e000002
          type: array
          items:
            type: string
        newParamCriterias:
          description: Valeurs des nouveaux paramètres à appliquer
          example:
            - parameterId: 60f7c2f5d5f9d0001e000003
              parameterNormId: 60f7c2f5d5f9d0001e000004
              seulValue: '10.5'
          type: array
          items:
            type: string
        forceApplyUnitMismatch:
          type: boolean
          description: Forcer l'application du critère même en cas de décalage d'unité
          default: false
          example: false
      required:
        - critereId
        - matrixId
        - echantillonId
        - selectedItems
        - newParamCriterias
    EditSeuilValueDto:
      type: object
      properties:
        criteriaId:
          type: string
          description: ID of the criteria to edit
          example: criteria123
        resultatId:
          type: string
          description: ID of the result to edit
          example: result123
        newValue:
          type: string
          description: New value for the criteria
          example: newValue123
          title: New Value
      required:
        - criteriaId
        - resultatId
        - newValue
    RemoveCriteriaDto:
      type: object
      properties:
        critereId:
          type: string
          description: Identifiant du critère d'analyse
          example: 60f7c2f5d5f9d0001e000001
        echantillonId:
          type: string
          description: Identifiant de l'échantillon
          example: 60f7c2f5d5f9d0001e000001
        selectedItems:
          description: Identifiants des échantillons à appliquer le critère
          example:
            - 60f7c2f5d5f9d0001e000001
            - 60f7c2f5d5f9d0001e000002
          type: array
          items:
            type: string
      required:
        - critereId
        - echantillonId
        - selectedItems
    ResetSeuilsDto:
      type: object
      properties:
        selectedItems:
          description: Identifiants des échantillons items ciblés
          example:
            - 60f7c2f5d5f9d0001e000001
            - 60f7c2f5d5f9d0001e000002
          type: array
          items:
            type: string
      required:
        - selectedItems
    ValidationWithoutCriteriaDto:
      type: object
      properties:
        laboratoryId:
          type: string
          description: Identifiant du laboratoire
          example: 60f7c2f5d5f9d0001e000001
        echantillonId:
          type: string
          description: Identifiant de l'échantillon
          example: 60f7c2f5d5f9d0001e000001
        selectedItems:
          description: Identifiant des échantillons à valider
          example:
            - 60f7c2f5d5f9d0001e000001
            - 60f7c2f5d5f9d0001e000002
          type: array
          items:
            type: string
      required:
        - laboratoryId
        - echantillonId
        - selectedItems
    ResultatStatus:
      type: string
      description: Le status du resultat
      enum:
        - ENREGISTRE
        - VALIDE
        - REFUSEE
    CreateResultatAnalyseDto:
      type: object
      properties:
        resultat:
          type: string
          example: Resultat de l'analyse
          description: Le resultat de l'analyse
        unitMeasure:
          type: string
          example: 12
          description: La valeur du resultat
        observation:
          type: string
          example: Observation sur le resultat
          description: Observation sur le resultat
        analyseExecutionId:
          example: VALIDE
          $ref: '#/components/schemas/ResultatStatus'
        dateDebut:
          format: date-time
          type: string
          example: '2021-01-01'
          description: La date de début
        dateFin:
          format: date-time
          type: string
          example: '2021-01-01'
          description: La date de fin
      required:
        - resultat
        - unitMeasure
        - observation
        - analyseExecutionId
        - dateDebut
        - dateFin
    InvalidateResultDto:
      type: object
      properties:
        reason:
          type: string
          enum:
            - RESULTAT_INCORRECT
            - REANALYSE_NECESSAIRE
            - MAUVAIS_PARAMETRE
            - AUTRE
        actions:
          type: array
          items:
            type: string
            enum:
              - CORRIGER_RESULTAT
              - LANCER_REANALYSE
              - REMPLACER_PARAMETRE
              - ANNULER_ANALYSE
              - AUTRE
        details:
          type: string
          description: Précisions complémentaires
      required:
        - reason
        - actions
    InvalidateManyResultsDto:
      type: object
      properties:
        reason:
          type: string
          enum:
            - RESULTAT_INCORRECT
            - REANALYSE_NECESSAIRE
            - MAUVAIS_PARAMETRE
            - AUTRE
        actions:
          type: array
          items:
            type: string
            enum:
              - CORRIGER_RESULTAT
              - LANCER_REANALYSE
              - REMPLACER_PARAMETRE
              - ANNULER_ANALYSE
              - AUTRE
        details:
          type: string
          description: Précisions complémentaires
      required:
        - reason
        - actions
    UpdateResultatAnalyseDto:
      type: object
      properties:
        resultat:
          type: string
          example: Resultat de l'analyse
          description: Le resultat de l'analyse
        unitMeasure:
          type: string
          example: 12
          description: La valeur du resultat
        observation:
          type: string
          example: Observation sur le resultat
          description: Observation sur le resultat
        analyseExecutionId:
          example: VALIDE
          $ref: '#/components/schemas/ResultatStatus'
        dateDebut:
          format: date-time
          type: string
          example: '2021-01-01'
          description: La date de début
        dateFin:
          format: date-time
          type: string
          example: '2021-01-01'
          description: La date de fin
        id:
          type: string
          example: 77b2ebbb-694c-46a6-9ede-17375c1da8bc
          description: The id of the resultatAnalyse
      required:
        - id
    CreateParameterCriterionDto:
      type: object
      properties:
        parameterId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant du paramètre
          example: lsd-4f5d-4f5d-4f5d
        normId:
          type: string
          default: lsd-4f5d-4f5d-4f5d
          description: L'identifiant de la norme du paramètre
          example: lsd-4f5d-4f5d-4f5d
        unitMeasure:
          type: string
          format: string
          default: mg
          description: Unité de mesure du paramètre
        intervalSeuil:
          type: string
          format: string
          default: intervalle de référence
          description: Intervalle de référence du paramètre
      required:
        - parameterId
        - normId
        - unitMeasure
        - intervalSeuil
    CreateCriterionDto:
      type: object
      properties:
        name:
          type: string
          description: The name of the criterion
          example: Hemoglobin
          default: Hemoglobin
        referenceValue:
          type: string
          description: The reference value of the criterion
          example: '12'
          default: '12'
        laboratoryId:
          type: string
          description: The unit of the criterion
          example: g/dl
          default: g/dl
        parameters:
          description: Les paramètres du critère
          default:
            - parameterId: lsd-4f5d-4f5d-4f5d
              unitMeasure: mg
              intervalSeuil: intervalle de référence
          type: array
          items:
            $ref: '#/components/schemas/CreateParameterCriterionDto'
      required:
        - name
        - referenceValue
        - laboratoryId
        - parameters
    UpdateCriterionDto:
      type: object
      properties:
        name:
          type: string
          description: The name of the criterion
          example: Hemoglobin
          default: Hemoglobin
        referenceValue:
          type: string
          description: The reference value of the criterion
          example: '12'
          default: '12'
        laboratoryId:
          type: string
          description: The unit of the criterion
          example: g/dl
          default: g/dl
        parameters:
          description: Les paramètres du critère
          default:
            - parameterId: lsd-4f5d-4f5d-4f5d
              unitMeasure: mg
              intervalSeuil: intervalle de référence
          type: array
          items:
            $ref: '#/components/schemas/CreateParameterCriterionDto'
    CreateInSituMeasureDto:
      type: object
      properties:
        echantillonId:
          type: string
          description: L'identifiant de l'échantillon.
          example: 123e4567-e89b-12d3-a456-426614174000
        arrivalTime:
          type: string
          description: L'heure d'arrivée.
          example: '2023-10-01T08:30:00Z'
          format: date-time
        departureTime:
          type: string
          description: L'heure de départ.
          example: '2023-10-01T10:30:00Z'
          format: date-time
        observation:
          type: string
          description: Les observations faites.
          example: Observation de l'échantillon sur le terrain.
        prelevementId:
          type: string
          description: L'identifiant du prélèvement.
          example: 123e4567-e89b-12d3-a456-426614174000
      required:
        - echantillonId
        - arrivalTime
        - departureTime
        - observation
        - prelevementId
    UpdateInSituMeasureDto:
      type: object
      properties:
        echantillonId:
          type: string
          description: L'identifiant de l'échantillon.
          example: 123e4567-e89b-12d3-a456-426614174000
        arrivalTime:
          type: string
          description: L'heure d'arrivée.
          example: '2023-10-01T08:30:00Z'
          format: date-time
        departureTime:
          type: string
          description: L'heure de départ.
          example: '2023-10-01T10:30:00Z'
          format: date-time
        observation:
          type: string
          description: Les observations faites.
          example: Observation de l'échantillon sur le terrain.
        prelevementId:
          type: string
          description: L'identifiant du prélèvement.
          example: 123e4567-e89b-12d3-a456-426614174000
    CreateInSituMeasureItemDto:
      type: object
      properties:
        echantillonItemId:
          type: string
          description: l'identifiant de l'échantillon
          title: Echantillon Item Id
          example: 123e4567-e89b-12d3-a456-426614174000
        aspect:
          type: string
          description: aspect
          title: Aspect
          example: aspect
        odeur:
          type: string
          description: odeur
          title: Odeur
          example: odeur
        saveur:
          type: string
          description: saveur
          title: Saveur
          example: saveur
        ph:
          type: string
          description: ph
          title: Ph
          example: ph
        oxygeneDissous1:
          type: string
          description: oxygeneDissous1
          title: OxygeneDissous1
          example: oxygeneDissous1
        oxygeneDissous1Unit:
          type: string
          description: Unité de mesure de l'oxygène dissous 1
          title: Unité de mesure de l'oxygène dissous 1
          example: mg/L
        oxygeneDissous2:
          type: string
          description: oxygeneDissous2
          title: OxygeneDissous2
          example: oxygeneDissous2
        oxygeneDissous2Unit:
          type: string
          description: Unité de mesure de l'oxygène dissous 2
          title: Unité de mesure de l'oxygène dissous 2
          example: mg/L
        temperature:
          type: string
          description: temperature
          title: Temperature
          example: temperature
        temperatureUnit:
          type: string
          description: Unité de mesure de la température
          title: Unité de mesure de la température
          example: °C
        conductivite:
          type: string
          description: conductivite
          title: Conductivite
          example: conductivite
        conductiviteUnit:
          type: string
          description: Unité de mesure de la conductivité
          title: Unité de mesure de la conductivité
          example: µS/cm
        turbidite:
          type: string
          description: turbidite
          title: Turbidite
          example: turbidite
        turbiditeUnit:
          type: string
          description: Unité de mesure de la turbidité
          title: Unité de mesure de la turbidité
          example: NTU
        chloreLibre:
          type: string
          description: chloreLibre
          title: ChloreLibre
          example: chloreLibre
        chloreLibreUnit:
          type: string
          description: Unité de mesure du chlore libre
          title: Unité de mesure du chlore libre
          example: mg/L
        chloreTotal:
          type: string
          description: chloreTotal
          title: ChloreTotal
          example: chloreTotal
        chloreTotalUnit:
          type: string
          description: Unité de mesure du chlore total
          title: Unité de mesure du chlore total
          example: mg/L
        tds:
          type: string
          description: tds
          title: TDS
          example: tds
        tdsUnit:
          type: string
          description: Unité de mesure du TDS
          title: Unité de mesure du TDS
          example: mg/L
        gpsCoordonnees:
          type: string
          description: coordonneesGPS
          title: CoordonneesGPS
          example: coordonneesGPS
        observation:
          type: string
          description: observation
          title: Observation
          example: observation
      required:
        - echantillonItemId
        - aspect
        - odeur
        - saveur
        - ph
        - oxygeneDissous1
        - oxygeneDissous1Unit
        - oxygeneDissous2
        - oxygeneDissous2Unit
        - temperature
        - temperatureUnit
        - conductivite
        - conductiviteUnit
        - turbidite
        - turbiditeUnit
        - chloreLibre
        - chloreLibreUnit
        - chloreTotal
        - chloreTotalUnit
        - tds
        - tdsUnit
        - gpsCoordonnees
        - observation
    UpdateInSituMeasureItemDto:
      type: object
      properties:
        echantillonItemId:
          type: string
          description: l'identifiant de l'échantillon
          title: Echantillon Item Id
          example: 123e4567-e89b-12d3-a456-426614174000
        aspect:
          type: string
          description: aspect
          title: Aspect
          example: aspect
        odeur:
          type: string
          description: odeur
          title: Odeur
          example: odeur
        saveur:
          type: string
          description: saveur
          title: Saveur
          example: saveur
        ph:
          type: string
          description: ph
          title: Ph
          example: ph
        oxygeneDissous1:
          type: string
          description: oxygeneDissous1
          title: OxygeneDissous1
          example: oxygeneDissous1
        oxygeneDissous1Unit:
          type: string
          description: Unité de mesure de l'oxygène dissous 1
          title: Unité de mesure de l'oxygène dissous 1
          example: mg/L
        oxygeneDissous2:
          type: string
          description: oxygeneDissous2
          title: OxygeneDissous2
          example: oxygeneDissous2
        oxygeneDissous2Unit:
          type: string
          description: Unité de mesure de l'oxygène dissous 2
          title: Unité de mesure de l'oxygène dissous 2
          example: mg/L
        temperature:
          type: string
          description: temperature
          title: Temperature
          example: temperature
        temperatureUnit:
          type: string
          description: Unité de mesure de la température
          title: Unité de mesure de la température
          example: °C
        conductivite:
          type: string
          description: conductivite
          title: Conductivite
          example: conductivite
        conductiviteUnit:
          type: string
          description: Unité de mesure de la conductivité
          title: Unité de mesure de la conductivité
          example: µS/cm
        turbidite:
          type: string
          description: turbidite
          title: Turbidite
          example: turbidite
        turbiditeUnit:
          type: string
          description: Unité de mesure de la turbidité
          title: Unité de mesure de la turbidité
          example: NTU
        chloreLibre:
          type: string
          description: chloreLibre
          title: ChloreLibre
          example: chloreLibre
        chloreLibreUnit:
          type: string
          description: Unité de mesure du chlore libre
          title: Unité de mesure du chlore libre
          example: mg/L
        chloreTotal:
          type: string
          description: chloreTotal
          title: ChloreTotal
          example: chloreTotal
        chloreTotalUnit:
          type: string
          description: Unité de mesure du chlore total
          title: Unité de mesure du chlore total
          example: mg/L
        tds:
          type: string
          description: tds
          title: TDS
          example: tds
        tdsUnit:
          type: string
          description: Unité de mesure du TDS
          title: Unité de mesure du TDS
          example: mg/L
        gpsCoordonnees:
          type: string
          description: coordonneesGPS
          title: CoordonneesGPS
          example: coordonneesGPS
        observation:
          type: string
          description: observation
          title: Observation
          example: observation
    CreateUserLabDto:
      type: object
      properties:
        laboratoryId:
          type: string
          description: L'identifiant du laboratoire
          example: d290f1ee-6c54-4b01-
        userId:
          type: string
          description: L'identifiant de l'utilisateur
          example: d290f1ee-6c54-4b01
        role:
          type: string
          description: Le rôle de l'utilisateur
          example: RESPONSABLE
          enum:
            - RESPONSABLE
            - TECHNICIEN
            - MANAGER
      required:
        - laboratoryId
        - userId
        - role
    CreateReportSignerDto:
      type: object
      properties:
        userId:
          type: string
          description: Identifiant de l'utilisateur signataire
          example: d290f1ee-6c54-4b01-90f6-1d54f7145476
        position:
          type: string
          description: 'Fonction du signataire (ex: RESPONSABLE, DIRECTEUR TECHNIQUE)'
          example: RESPONSABLE
        laboratoryId:
          type: string
          description: >-
            Laboratoire associé. Null pour un signataire global (ex: directeur
            technique)
          example: d290f1ee-6c54-4b01-90f6-1d54f7145476
      required:
        - userId
        - position
    UpdateReportSignerDto:
      type: object
      properties:
        userId:
          type: string
          description: Identifiant de l'utilisateur signataire
          example: d290f1ee-6c54-4b01-90f6-1d54f7145476
        position:
          type: string
          description: 'Fonction du signataire (ex: RESPONSABLE, DIRECTEUR TECHNIQUE)'
          example: RESPONSABLE
        laboratoryId:
          type: string
          description: >-
            Laboratoire associé. Null pour un signataire global (ex: directeur
            technique)
          example: d290f1ee-6c54-4b01-90f6-1d54f7145476
    CreateDeviDto:
      type: object
      properties:
        totalHT:
          type: number
          description: Le total HT du devis
        totalTTC:
          type: number
          description: Le total TTC du devis
        remisePercent:
          type: number
          description: le pourcentage de remise
        remiseValue:
          type: number
          description: La valeur de la remise
        customerName:
          type: string
          description: Le nom du client
        customerType:
          type: string
          description: Le type   du client
        customerPhone:
          type: string
          description: Le téléphone du client
        customerEmail:
          type: string
          description: L'email du client
        customerAddress:
          type: string
          description: L'adresse du client
        isTvaIncluded:
          type: boolean
          description: La TVA est-elle incluse
          default: true
      required:
        - totalTTC
        - remisePercent
        - remiseValue
        - customerName
        - customerType
        - customerPhone
        - customerEmail
        - customerAddress
    CreateDeviItemDto:
      type: object
      properties:
        nbrEchantillons:
          type: number
          description: nombre d'echantillons
        subTotal:
          type: number
          description: le sous total de l'item
      required:
        - nbrEchantillons
        - subTotal
    UpdateDeviDto:
      type: object
      properties:
        totalHT:
          type: number
          description: Le total HT du devis
        totalTTC:
          type: number
          description: Le total TTC du devis
        remisePercent:
          type: number
          description: le pourcentage de remise
        remiseValue:
          type: number
          description: La valeur de la remise
        customerName:
          type: string
          description: Le nom du client
        customerType:
          type: string
          description: Le type   du client
        customerPhone:
          type: string
          description: Le téléphone du client
        customerEmail:
          type: string
          description: L'email du client
        customerAddress:
          type: string
          description: L'adresse du client
        isTvaIncluded:
          type: boolean
          description: La TVA est-elle incluse
          default: true
    CreateProformaDraftItemAnalyseDto:
      type: object
      properties:
        parameterNormId:
          type: string
          description: L'id de la norme
          example: '1'
          title: Id de la norme
        normName:
          type: string
          description: Le nom de la norme
          example: Norme 1
          title: Nom de la norme
        paramName:
          type: string
          description: Le nom du paramètre
          example: Paramètre 1
          title: Nom du paramètre
        parameterId:
          type: string
          description: L'id du paramètre
          example: '1'
          title: Id du paramètre
        paramPrice:
          type: number
          description: Le prix du paramètre
          example: 1000
          title: Prix du paramètre
      required:
        - parameterNormId
        - normName
        - paramName
        - parameterId
        - paramPrice
    CreateProformaDraftItemDto:
      type: object
      properties:
        intitule:
          type: string
          description: L'intitulé de l'item
          example: Item 1
          title: Intitulé
        nbEchantillon:
          type: number
          description: Le nombre d'échantillons
          example: 10
          title: Nombre d'échantillons
        subTotal:
          type: number
          description: Le sous total
          example: 1000
          title: Sous total
        analyses:
          description: Les analyses
          example:
            - parameterNormId: '1'
              normName: Norme 1
              paramName: Paramètre 1
              parameterId: '1'
              paramPrice: 1000
            - parameterNormId: '2'
              normName: Norme 2
              paramName: Paramètre 2
              parameterId: '2'
              paramPrice: 2000
          type: array
          items:
            $ref: '#/components/schemas/CreateProformaDraftItemAnalyseDto'
      required:
        - intitule
        - nbEchantillon
        - subTotal
        - analyses
    CreateProformaDraftDto:
      type: object
      properties:
        libelle:
          type: string
          description: Le libellé de la proforma
          example: Proforma pour le client ABC
          title: Libellé
        includeTransport:
          type: boolean
          description: Indique si la proforma inclut le transport
          example: true
          title: Inclure le transport
        includeKit:
          type: boolean
          description: Indique si la proforma inclut le kit
          example: true
          title: Inclure le kit
        montantTotal:
          type: number
          description: Le montant total de la proforma
          example: 1000
          title: Montant total
        items:
          description: Les items de la proforma
          example:
            - intitule: Item 1
              nbEchantillon: 10
              subTotal: 1000
              analyses:
                - parameterNormId: '1'
                  normName: Norme 1
                  paramName: Paramètre 1
                  parameterId: '1'
                  paramPrice: 1000
                - parameterNormId: '2'
                  normName: Norme 2
                  paramName: Paramètre 2
                  parameterId: '2'
                  paramPrice: 2000
          type: array
          items:
            $ref: '#/components/schemas/CreateProformaDraftItemDto'
        observation:
          type: string
          description: L'observation de la proforma
          example: Observation de la proforma
          title: Observation
      required:
        - libelle
        - includeTransport
        - includeKit
        - montantTotal
        - items
        - observation
    UpdateProformaDraftDto:
      type: object
      properties:
        libelle:
          type: string
          description: Le libellé de la proforma
          example: Proforma pour le client ABC
          title: Libellé
        includeTransport:
          type: boolean
          description: Indique si la proforma inclut le transport
          example: true
          title: Inclure le transport
        includeKit:
          type: boolean
          description: Indique si la proforma inclut le kit
          example: true
          title: Inclure le kit
        montantTotal:
          type: number
          description: Le montant total de la proforma
          example: 1000
          title: Montant total
        items:
          description: Les items de la proforma
          example:
            - intitule: Item 1
              nbEchantillon: 10
              subTotal: 1000
              analyses:
                - parameterNormId: '1'
                  normName: Norme 1
                  paramName: Paramètre 1
                  parameterId: '1'
                  paramPrice: 1000
                - parameterNormId: '2'
                  normName: Norme 2
                  paramName: Paramètre 2
                  parameterId: '2'
                  paramPrice: 2000
          type: array
          items:
            $ref: '#/components/schemas/CreateProformaDraftItemDto'
        observation:
          type: string
          description: L'observation de la proforma
          example: Observation de la proforma
          title: Observation
    CancelProformaDraftDto:
      type: object
      properties:
        reasonCode:
          type: string
          enum:
            - DEMANDE_CLIENT
            - ECHANTILLON_NON_CONFORME
            - ECHANTILLON_NON_RECU
            - ERREUR_SAISIE
            - DOUBLON
            - DELAI_DEPASSE
            - CAPACITE_INDISPONIBLE
            - LITIGE
            - AUTRE
          description: Motif d’annulation de la demande
        reason:
          type: string
          description: Précision obligatoire pour le motif AUTRE (au moins 10 caractères)
      required:
        - reasonCode
    CreateNatureConfigDto:
      type: object
      properties:
        key:
          type: string
          description: 'Clé unique pour la configuration (ex: "aliment", "eau", "sol")'
        label:
          type: string
          description: Nom d'affichage de la nature d'échantillon
        description:
          type: string
          description: Description détaillée de la nature d'échantillon
        tags:
          description: >-
            Liste des tags associés à cette nature pour la classification et le
            mapping
          example:
            - cacao
            - tomate
            - huile
            - cajou
          type: array
          items:
            type: string
        color:
          type: string
          description: Couleur en format hexadécimal pour l'affichage
          example: '#4CAF50'
        icon:
          type: string
          description: Icône pour l'affichage dans l'interface
        sortOrder:
          type: number
          description: Ordre de tri pour l'affichage
        isActive:
          type: boolean
          description: Indique si la configuration est active
          default: true
      required:
        - key
        - label
        - tags
        - isActive
    UpdateNatureConfigDto:
      type: object
      properties:
        label:
          type: string
          description: Nom d'affichage de la nature d'échantillon
        description:
          type: string
          description: Description détaillée de la nature d'échantillon
        tags:
          description: >-
            Liste des tags associés à cette nature pour la classification et le
            mapping
          example:
            - cacao
            - tomate
            - huile
            - cajou
          type: array
          items:
            type: string
        color:
          type: string
          description: Couleur en format hexadécimal pour l'affichage
          example: '#4CAF50'
        icon:
          type: string
          description: Icône pour l'affichage dans l'interface
        sortOrder:
          type: number
          description: Ordre de tri pour l'affichage
        isActive:
          type: boolean
          description: Indique si la configuration est active
    ReorderNatureConfigDto:
      type: object
      properties:
        orderedIds:
          description: Liste ordonnée des IDs des configurations
          example:
            - uuid-1
            - uuid-2
            - uuid-3
          type: array
          items:
            type: string
      required:
        - orderedIds
    CreatePredictionModelDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du modèle de prédiction
        description:
          type: string
          description: Description du modèle
        modelType:
          type: string
          description: Type de prédiction
          enum:
            - REVENUE
            - CUSTOMER_CHURN
            - SAMPLE_DEMAND
            - RESOURCE_NEEDS
            - MARKET_TRENDS
            - COST_PROJECTION
            - CUSTOM
          example: REVENUE
        algorithm:
          type: string
          description: Algorithme utilisé
          example: regression
        parameters:
          type: object
          description: Paramètres du modèle
          example:
            learningRate: 0.01
            epochs: 100
      required:
        - name
        - modelType
        - algorithm
        - parameters
    UpdatePredictionModelDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du modèle de prédiction
        description:
          type: string
          description: Description du modèle
        parameters:
          type: object
          description: Paramètres du modèle
          example:
            learningRate: 0.01
            epochs: 100
        status:
          type: string
          description: Statut du modèle
          enum:
            - DRAFT
            - TRAINING
            - ACTIVE
            - DEPRECATED
            - ARCHIVED
        trainingMetrics:
          type: object
          description: Métriques d'entraînement
    TrainModelDto:
      type: object
      properties:
        trainingConfig:
          type: object
          description: Paramètres d'entraînement
          example:
            startDate: '2024-01-01'
            endDate: '2025-01-01'
            splitRatio: 0.8
            features:
              - revenue
              - clientsCount
              - samplesCount
      required:
        - trainingConfig
    CreatePredictionDto:
      type: object
      properties:
        modelId:
          type: string
          description: ID du modèle à utiliser
        predictionType:
          type: string
          description: Type de prédiction
          enum:
            - REVENUE
            - CUSTOMER_CHURN
            - SAMPLE_DEMAND
            - RESOURCE_NEEDS
            - MARKET_TRENDS
            - COST_PROJECTION
            - CUSTOM
          example: REVENUE
        targetPeriod:
          type: string
          description: Période ciblée par la prédiction
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - QUARTERLY
            - YEARLY
          example: MONTHLY
        targetYear:
          type: number
          description: Année ciblée
          example: 2025
        targetMonth:
          type: number
          description: Mois ciblé (1-12)
          example: 6
        targetQuarter:
          type: number
          description: Trimestre ciblé (1-4)
          example: 2
        targetWeek:
          type: number
          description: Semaine ciblée (1-53)
          example: 24
        inputFeatures:
          type: object
          description: Caractéristiques d'entrée pour la prédiction
      required:
        - modelId
        - predictionType
        - targetPeriod
        - targetYear
    VerifyPredictionDto:
      type: object
      properties:
        actualData:
          type: object
          description: Données réelles pour vérification
          example:
            revenue: 125000
            clientsCount: 42
        verificationDate:
          type: string
          description: Date de vérification
          example: '2025-07-01'
      required:
        - actualData
    CreatePredictionAlertDto:
      type: object
      properties:
        title:
          type: string
          description: Titre de l'alerte
        description:
          type: string
          description: Description de l'alerte
        alertType:
          type: string
          description: Type d'alerte
          enum:
            - REVENUE_DROP
            - HIGH_CHURN_RISK
            - RESOURCE_SHORTAGE
            - DEMAND_SPIKE
            - COST_INCREASE
            - PERFORMANCE_ISSUE
            - CUSTOM
          example: REVENUE_DROP
        severity:
          type: string
          description: Sévérité de l'alerte
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          example: MEDIUM
          default: MEDIUM
        conditions:
          type: object
          description: Conditions qui déclenchent l'alerte
          example:
            metric: revenue
            operator: lt
            value: 100000
        thresholds:
          type: object
          description: Seuils de déclenchement
          example:
            warning: 110000
            critical: 100000
        predictionId:
          type: string
          description: ID de la prédiction associée
        notifyUsers:
          description: Liste des utilisateurs à notifier
          example:
            - userId1
            - userId2
          type: array
          items:
            type: string
        notifyRoles:
          description: Liste des rôles à notifier
          example:
            - ADMIN
            - MANAGER
          type: array
          items:
            type: string
      required:
        - title
        - alertType
        - severity
        - conditions
        - thresholds
    UpdatePredictionAlertDto:
      type: object
      properties:
        title:
          type: string
          description: Titre de l'alerte
        description:
          type: string
          description: Description de l'alerte
        alertType:
          type: string
          description: Type d'alerte
          enum:
            - REVENUE_DROP
            - HIGH_CHURN_RISK
            - RESOURCE_SHORTAGE
            - DEMAND_SPIKE
            - COST_INCREASE
            - PERFORMANCE_ISSUE
            - CUSTOM
        severity:
          type: string
          description: Sévérité de l'alerte
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
        conditions:
          type: object
          description: Conditions qui déclenchent l'alerte
        thresholds:
          type: object
          description: Seuils de déclenchement
        isActive:
          type: boolean
          description: État d'activation de l'alerte
        notifyUsers:
          description: Liste des utilisateurs à notifier
          type: array
          items:
            type: string
        notifyRoles:
          description: Liste des rôles à notifier
          type: array
          items:
            type: string
    AcknowledgeAlertDto:
      type: object
      properties:
        note:
          type: string
          description: Note d'acquittement
    CreateUpdateNotificationDto:
      type: object
      properties:
        message:
          type: string
          description: Contenu affiché aux utilisateurs ciblés
          example: >-
            La facturation contrat et les contre-analyses sont désormais
            disponibles.
        targetRoles:
          type: array
          description: Rôles internes qui doivent recevoir la note de version
          example:
            - PROVIDER_COMMERCIAL
            - PROVIDER_LAB_RESPONSIBLE
          items:
            type: string
            enum:
              - SUPER_ADMIN
              - PROVIDER_ADMIN
              - PROVIDER_USER
              - PROVIDER_LAB_TECHNICIAN
              - PROVIDER_LAB_RESPONSIBLE
              - PROVIDER_LAB_MANAGER
              - PROVIDER_COMMERCIAL
              - PROVIDER_COMPTABLE
              - PROVIDER_PRELEVEUR
              - PROVIDER_RECEPTIONNISTE
              - PROVIDER_SUPERVISOR
              - PROVIDER_RECLAMATION_MANAGER
              - CUSTOMER_ADMIN
              - CUSTOMER_USER
              - INDIVIDUAL_CUSTOMER
              - PROVIDER
              - CUSTOMER
              - CUSTOMER_INDIVIDUAL
              - CUSTOMER_COMPANY
              - AUTH_FULL_ACCESS
              - AUTH_PARTIAL_ACCESS
              - PAID_PLAN
              - FREE_PLAN
              - RESPONSABLE_QUALITE
              - RESPONSABLE_PRELEVEUR
              - PROVIDER_TECHNICAL_SECRETARY
        version:
          type: string
          example: v2.14.0
        mustDeleteCache:
          type: boolean
          description: >-
            Affiche le bouton « Mettre à jour » qui vide le cache puis recharge
            l’application
          default: false
        isBreakingChange:
          type: boolean
          description: Signale une mise à jour importante dans la fenêtre utilisateur
          default: false
      required:
        - message
        - targetRoles
    CreateContractDto:
      type: object
      properties:
        contractNumber:
          type: string
          description: Numéro du contrat
        title:
          type: string
          description: Titre du contrat
        description:
          type: string
          description: Description du contrat
        startDate:
          type: string
          description: Date de début du contrat
        endDate:
          type: string
          description: Date de fin du contrat
        companyId:
          type: string
          description: ID de la compagnie
        status:
          type: string
          description: Statut du contrat
          enum:
            - ACTIVE
            - INACTIVE
            - TERMINATED
            - PENDING
            - DRAFT
      required:
        - title
        - startDate
        - companyId
    ContractItem:
      type: object
      properties:
        id:
          type: string
        contractId:
          type: string
        itemName:
          type: string
        description:
          type: string
        sourceName:
          type: string
        sourceEmail:
          type: string
        price:
          type: number
        serviceProviderId:
          type: string
        isActive:
          type: boolean
        isDeleted:
          type: boolean
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
        deletedAt:
          format: date-time
          type: string
        deletedBy:
          type: string
        contract:
          type: object
        serviceProvider:
          type: object
        analyses:
          type: array
          items:
            $ref: '#/components/schemas/ContractItemAnalysis'
        proformaItems:
          type: array
          items:
            type: string
        echantillonItems:
          type: array
          items:
            type: string
      required:
        - id
        - contractId
        - itemName
        - price
        - serviceProviderId
        - isActive
        - isDeleted
        - createdAt
        - updatedAt
    Contract:
      type: object
      properties:
        id:
          type: string
        contractNumber:
          type: string
        title:
          type: string
        description:
          type: string
        startDate:
          format: date-time
          type: string
        endDate:
          format: date-time
          type: string
        totalItemsPrice:
          type: number
        sourceName:
          type: string
        sourceEmail:
          type: string
        companyId:
          type: string
        serviceProviderId:
          type: string
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - TERMINATED
            - PENDING
            - DRAFT
        isDeleted:
          type: boolean
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
        deletedAt:
          format: date-time
          type: string
        deletedBy:
          type: string
        contractItems:
          type: array
          items:
            $ref: '#/components/schemas/ContractItem'
      required:
        - id
        - title
        - totalItemsPrice
        - companyId
        - serviceProviderId
        - status
        - isDeleted
        - createdAt
        - updatedAt
    UpdateContractDto:
      type: object
      properties:
        contractNumber:
          type: string
          description: Numéro du contrat
        title:
          type: string
          description: Titre du contrat
        description:
          type: string
          description: Description du contrat
        startDate:
          type: string
          description: Date de début du contrat
        endDate:
          type: string
          description: Date de fin du contrat
        companyId:
          type: string
          description: ID de la compagnie
        status:
          type: string
          description: Statut du contrat
          enum:
            - ACTIVE
            - INACTIVE
            - TERMINATED
            - PENDING
            - DRAFT
    CreateContractItemAnalysisDto:
      type: object
      properties:
        laboratoryId:
          type: string
          description: ID du laboratoire
        matrixId:
          type: string
          description: ID de la matrice
        parameterName:
          type: string
          description: Nom du paramètre
        parameterId:
          type: string
          description: ID du paramètre
        parameterNormId:
          type: string
          description: ID de la norme du paramètre
        normeName:
          type: string
          description: Nom de la norme
        parameterPrice:
          type: number
          description: Prix du paramètre
          default: 0
      required:
        - laboratoryId
        - parameterName
    CreateContractItemDto:
      type: object
      properties:
        contractId:
          type: string
          description: ID du contrat
        itemName:
          type: string
          description: Nom de l'élément du contrat
        description:
          type: string
          description: Description de l'élément
        price:
          type: number
          description: Prix de l'élément
        isActive:
          type: boolean
          description: Actif ou non
          default: true
        analyses:
          description: Analyses associées à cet élément de contrat
          type: array
          items:
            $ref: '#/components/schemas/CreateContractItemAnalysisDto'
      required:
        - contractId
        - itemName
        - price
    ContractItemAnalysis:
      type: object
      properties:
        id:
          type: string
        contractId:
          type: string
        contractItemId:
          type: string
        laboratoryId:
          type: string
        matrixId:
          type: string
        parameterName:
          type: string
        parameterId:
          type: string
        parameterNormId:
          type: string
        normeName:
          type: string
        parameterPrice:
          type: number
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
        contractLabId:
          type: string
        laboratory:
          type: object
        matrix:
          type: object
        parameter:
          type: object
        parameterNorm:
          type: object
        contractLab:
          type: object
      required:
        - id
        - contractId
        - contractItemId
        - laboratoryId
        - parameterName
        - parameterPrice
        - createdAt
        - updatedAt
    UpdateContractItemDto:
      type: object
      properties:
        contractId:
          type: string
          description: ID du contrat
        itemName:
          type: string
          description: Nom de l'élément du contrat
        description:
          type: string
          description: Description de l'élément
        price:
          type: number
          description: Prix de l'élément
        isActive:
          type: boolean
          description: Actif ou non
          default: true
        analyses:
          description: Analyses associées à cet élément de contrat
          type: array
          items:
            $ref: '#/components/schemas/CreateContractItemAnalysisDto'
    ManageAnalysesDto:
      type: object
      properties:
        parameterNormIds:
          description: Liste des IDs de normes de paramètres à ajouter/supprimer
          example:
            - uuid-1
            - uuid-2
            - uuid-3
          type: array
          items:
            type: string
      required:
        - parameterNormIds
    CreatePolicyDto:
      type: object
      properties:
        code:
          type: string
          description: The code of the policy
          example: POL-INT-001
        title:
          type: string
          description: The title of the policy
          example: Policy Title
        description:
          type: string
          description: The description of the policy
          example: Policy Description
        type:
          type: string
          description: The type of the policy
          example: INTERNAL
          enum:
            - INTERNAL
            - EXTERNAL
        scope:
          type: string
          description: The scope of the policy
          example: GLOBAL
          enum:
            - PROFORMA
            - PRELEVEMENT
            - DEMANDE_ANALYSE
            - PLANIFICATION
            - SAISIE_RESULTAT
            - ENVOI_RAPPORT
            - GLOBAL
        status:
          type: string
          description: The status of the policy
          example: ACTIVE
          enum:
            - ACTIVE
            - DRAFT
            - ARCHIVED
        version:
          type: number
          description: The version of the policy
          example: 1
        checklistItems:
          type: object
          description: The checklist items of the policy
          example:
            - id: '1'
              label: Item 1
              required: true
              order: 1
        termsContent:
          type: string
          description: The terms content of the policy
          example: <p>Terms content</p>
      required:
        - code
        - title
        - description
        - type
        - scope
        - status
        - version
        - checklistItems
        - termsContent
    UpdatePolicyDto:
      type: object
      properties:
        code:
          type: string
          description: The code of the policy
          example: POL-INT-001
        title:
          type: string
          description: The title of the policy
          example: Policy Title
        description:
          type: string
          description: The description of the policy
          example: Policy Description
        type:
          type: string
          description: The type of the policy
          example: INTERNAL
          enum:
            - INTERNAL
            - EXTERNAL
        scope:
          type: string
          description: The scope of the policy
          example: GLOBAL
          enum:
            - PROFORMA
            - PRELEVEMENT
            - DEMANDE_ANALYSE
            - PLANIFICATION
            - SAISIE_RESULTAT
            - ENVOI_RAPPORT
            - GLOBAL
        status:
          type: string
          description: The status of the policy
          example: ACTIVE
          enum:
            - ACTIVE
            - DRAFT
            - ARCHIVED
        version:
          type: number
          description: The version of the policy
          example: 1
        checklistItems:
          type: object
          description: The checklist items of the policy
          example:
            - id: '1'
              label: Item 1
              required: true
              order: 1
        termsContent:
          type: string
          description: The terms content of the policy
          example: <p>Terms content</p>
    ValidatePolicyDto:
      type: object
      properties:
        policyId:
          type: string
          description: The ID of the policy
          example: '1'
        entityType:
          type: string
          description: The type of the entity
          example: Proforma
        entityId:
          type: string
          description: The ID of the entity
          example: '1'
        validatedById:
          type: string
          description: The ID of the user who validated the policy
          example: '1'
        checklistData:
          type: object
          description: The checklist data
          example:
            - id: '1'
              label: Item 1
              required: true
              order: 1
        notes:
          type: string
          description: The notes of the policy
          example: Notes
      required:
        - policyId
        - entityType
        - entityId
        - validatedById
        - checklistData
        - notes
    AcceptPolicyDto:
      type: object
      properties:
        policyId:
          type: string
          description: The ID of the policy
          example: '1'
        documentType:
          type: string
          description: The type of the document
          example: Proforma
        documentId:
          type: string
          description: The ID of the document
          example: '1'
        customerId:
          type: string
          description: The ID of the customer
          example: '1'
        userId:
          type: string
          description: The ID of the user
          example: '1'
        ipAddress:
          type: string
          description: The IP address of the user
          example: 127.0.0.1
        userAgent:
          type: string
          description: The user agent of the user
          example: >-
            Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
            like Gecko) Chrome/91.0.4472.124 Safari/537.36
        signature:
          type: string
          description: The signature of the user
          example: base64-signature
      required:
        - policyId
        - documentType
        - documentId
        - customerId
        - userId
        - ipAddress
        - userAgent
        - signature
    UpdateDelayTrackingDto:
      type: object
      properties:
        demandeId:
          type: string
          description: The ID of the demande
          example: '1'
        expectedDate:
          type: string
          description: The expected date of the demande
          example: '2025-01-01'
        actualDate:
          type: string
          description: The actual date of the demande
          example: '2025-01-01'
        delayInDays:
          type: number
          description: The delay in days of the demande
          example: 1
        isDelayed:
          type: boolean
          description: The is delayed of the demande
          example: true
        delayReason:
          type: string
          description: The delay reason of the demande
          example: Delay reason
        correctiveAction:
          type: string
          description: The corrective action of the demande
          example: Corrective action
        responsibleId:
          type: string
          description: The responsible ID of the demande
          example: '1'
        isResolved:
          type: boolean
          description: The is resolved of the demande
          example: true
        dgNotified:
          type: boolean
          description: The dg notified of the demande
          example: true
        dgNotifiedAt:
          type: string
          description: The dg notified at of the demande
          example: '2025-01-01'
        dgNotifiedBy:
          type: string
          description: The dg notified by of the demande
          example: '1'
      required:
        - isResolved
        - dgNotified
        - dgNotifiedAt
        - dgNotifiedBy
    CustomerAnalyticsClientDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        customerType:
          type: string
          enum:
            - INDIVIDUAL
            - COMPANY
      required:
        - id
        - customerType
    CustomerAnalyticsExportDto:
      type: object
      properties:
        startDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        clients:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/CustomerAnalyticsClientDto'
        categories:
          type: array
          items:
            type: string
            enum:
              - FACTUREE
              - CONVERTIE_BORDEREAU
              - VALIDEE
              - EN_ATTENTE
      required:
        - startDate
        - endDate
        - clients
    SendReportsToUserDto:
      type: object
      properties:
        reportIds:
          description: IDs des rapports à partager
          example:
            - id1
            - id2
          type: array
          items:
            type: string
        targetEmail:
          type: string
          description: Email du nouvel interlocuteur qui recevra l'accès aux rapports
          example: nouveau@entreprise.com
      required:
        - reportIds
        - targetEmail
    CreateEquipmentDto:
      type: object
      properties:
        name:
          type: string
          description: Nom de l'équipement
          example: Spectromètre UV-Vis
        description:
          type: string
          description: Description de l'équipement
        brand:
          type: string
          description: Marque
          example: Shimadzu
        model:
          type: string
          description: Modèle
          example: UV-1800
        serialNumber:
          type: string
          description: Numéro de série
        laboratoryId:
          type: string
          description: ID du laboratoire
        category:
          type: string
          description: Categorie equipement
          enum:
            - LABORATORY
            - FIELD
            - ACCESSORY
          example: FIELD
        quantityTotal:
          type: number
          description: Stock total
          example: 5
        quantityAvailable:
          type: number
          description: Stock disponible
          example: 3
        isActive:
          type: boolean
          description: Actif
          example: true
      required:
        - name
        - laboratoryId
    UpdateEquipmentDto:
      type: object
      properties:
        name:
          type: string
          description: Nom de l'équipement
        description:
          type: string
          description: Description
        brand:
          type: string
          description: Marque
        model:
          type: string
          description: Modèle
        serialNumber:
          type: string
          description: Numéro de série
        category:
          type: string
          description: Categorie equipement
          enum:
            - LABORATORY
            - FIELD
            - ACCESSORY
        quantityTotal:
          type: number
          description: Stock total
        quantityAvailable:
          type: number
          description: Stock disponible
        isActive:
          type: boolean
          description: Actif
    AffectedParameterDto:
      type: object
      properties:
        parameterId:
          type: string
          description: ID du paramètre
        parameterNormId:
          type: string
          description: ID du paramètre norme
      required:
        - parameterId
        - parameterNormId
    CreateBreakdownDto:
      type: object
      properties:
        resourceType:
          type: string
          description: Type de ressource indisponible
          enum:
            - EQUIPMENT
            - HUMAN_RESOURCE
            - REAGENT
            - CONSUMABLE
          example: EQUIPMENT
        resourceName:
          type: string
          description: Nom de la ressource (personne, réactif, consommable, ou équipement)
          example: Spectromètre UV-Vis
        equipmentName:
          type: string
          description: Nom de l'équipement (auto-create si nouveau)
          example: Spectromètre UV-Vis
        equipmentId:
          type: string
          description: ID de l'équipement existant (optionnel)
        stopImmediately:
          type: boolean
          description: Arrêter immédiatement la ressource
        description:
          type: string
          description: Description du problème
        resolutionDeadline:
          type: string
          description: Délai de résolution estimé
          example: '2026-03-15T00:00:00.000Z'
        laboratoryId:
          type: string
          description: ID du laboratoire
        affectedParameterNormIds:
          description: Paramètres affectés
          type: array
          items:
            $ref: '#/components/schemas/AffectedParameterDto'
        comment:
          type: string
          description: Commentaire associé au signalement
      required:
        - resourceType
        - description
        - laboratoryId
    UpdateBreakdownDto:
      type: object
      properties:
        status:
          type: string
          description: Statut de la panne
          enum:
            - REPORTED
            - IN_REPAIR
            - RESOLVED
            - IRREPARABLE
        resolutionComment:
          type: string
          description: Commentaire de résolution
        resolutionDeadline:
          type: string
          description: Délai de résolution
        description:
          type: string
          description: Description du problème
        affectedParameterNormIds:
          description: Paramètres affectés
          type: array
          items:
            $ref: '#/components/schemas/AffectedParameterDto'
        comment:
          type: string
          description: Commentaire de suivi
    BreakdownActionDto:
      type: object
      properties:
        comment:
          type: string
          description: Commentaire associé à l’action
    AddBreakdownEventDto:
      type: object
      properties:
        comment:
          type: string
          description: Commentaire de suivi
      required:
        - comment
    CreateContactDto:
      type: object
      properties:
        nom:
          type: string
          description: Nom complet
          example: Jean Dupont
        email:
          type: string
          description: Adresse email
          example: jean.dupont@example.com
        telephone:
          type: string
          description: Numéro de téléphone
          example: +225 07 09 09 09 09
        sujet:
          type: string
          description: Sujet du message
          enum:
            - information
            - devis
            - suivi
            - support
            - reclamation
            - partenariat
            - autre
          example: information
        message:
          type: string
          description: Message
          example: Je souhaite obtenir des informations sur vos services...
        rgpd:
          type: boolean
          description: Acceptation RGPD
          example: true
      required:
        - nom
        - email
        - sujet
        - message
        - rgpd
    QueryOutgoingStatsDto:
      type: object
      properties:
        from:
          type: string
          example: '2026-01-01'
        to:
          type: string
          example: '2026-09-03'
        metrics:
          type: array
          description: Indicateurs demandés. Vide = tous les indicateurs exposés.
          example:
            - rapportsEnvoyes
            - facturesEmises
            - laboPlusEfficace
          items:
            type: string
            enum:
              - rapportsEnvoyes
              - rapportsEnAttenteEnvoi
              - facturesEmises
              - recouvrementEffectue
              - proformasCreees
              - proformasValidees
              - proformasAnnulees
              - bordereauxTraites
              - laboPlusEfficace
              - laboPlusEnRetard
        callbackUrl:
          type: string
          description: >-
            Webhook HTTPS du partenaire. Si fourni, LIMS POST le JSON une fois
            le job terminé.
          example: https://partenaire.example.com/hooks/lims-stats
        email:
          type: string
          description: >-
            Adresse e-mail. Si fournie, LIMS envoie le rapport Excel en pièce
            jointe une fois le job terminé.
          example: stats@partenaire.example.com
      required:
        - from
        - to
    CreateApiKeyDto:
      type: object
      properties:
        name:
          type: string
          example: Partenaire CRM - Prod
        consumerType:
          type: string
          example: PARTNER
          description: >-
            Type métier (PARTNER, GSTOCK, STATS_DASHBOARD, OUTGOING_STATS,
            CALENDAR, …)
        direction:
          type: string
          enum:
            - INCOMING
            - OUTGOING
          default: INCOMING
        description:
          type: string
        externalId:
          type: string
        scopes:
          type: object
          description: Scopes JSON libres (permissions, modules…)
        keyOverride:
          type: string
          description: >-
            Valeur de clé fournie (sinon générée). Utile pour OUTGOING (clé
            partenaire).
      required:
        - name
        - consumerType
    UpdateApiKeyDto:
      type: object
      properties:
        name:
          type: string
          example: Partenaire CRM - Prod
        consumerType:
          type: string
          example: PARTNER
          description: >-
            Type métier (PARTNER, GSTOCK, STATS_DASHBOARD, OUTGOING_STATS,
            CALENDAR, …)
        direction:
          type: string
          enum:
            - INCOMING
            - OUTGOING
          default: INCOMING
        description:
          type: string
        externalId:
          type: string
        scopes:
          type: object
          description: Scopes JSON libres (permissions, modules…)
        keyOverride:
          type: string
          description: >-
            Valeur de clé fournie (sinon générée). Utile pour OUTGOING (clé
            partenaire).
        isActive:
          type: boolean
    CreateWebhookDto:
      type: object
      properties:
        name:
          type: string
          example: Stats CRM
        description:
          type: string
        direction:
          type: string
          enum:
            - INCOMING
            - OUTGOING
          default: OUTGOING
        event:
          type: string
          example: outgoing-stats
          description: Événement métier (outgoing-stats, rapport-sent, …)
        url:
          type: string
          example: https://partenaire.example.com/hooks/lims-stats
          description: >-
            OUTGOING = URL HTTPS partenaire ; INCOMING = path LIMS ex.
            /hooks/crm
        secret:
          type: string
        headers:
          type: object
          description: 'Headers HTTP additionnels { Authorization: "…" }'
        isActive:
          type: boolean
      required:
        - name
        - direction
        - event
        - url
    UpdateWebhookDto:
      type: object
      properties:
        name:
          type: string
          example: Stats CRM
        description:
          type: string
        direction:
          type: string
          enum:
            - INCOMING
            - OUTGOING
          default: OUTGOING
        event:
          type: string
          example: outgoing-stats
          description: Événement métier (outgoing-stats, rapport-sent, …)
        url:
          type: string
          example: https://partenaire.example.com/hooks/lims-stats
          description: >-
            OUTGOING = URL HTTPS partenaire ; INCOMING = path LIMS ex.
            /hooks/crm
        secret:
          type: string
        headers:
          type: object
          description: 'Headers HTTP additionnels { Authorization: "…" }'
        isActive:
          type: boolean
    SaveMissionExecutionDto:
      type: object
      properties:
        temperatureSite:
          type: string
          example: 4 C
        gpsCoordonnees:
          type: string
          example: 5.35995,-4.00825
        observation:
          type: string
        coldChainOk:
          type: boolean
    SaveMobileBordereauDto:
      type: object
      properties:
        modePrelevement:
          type: string
          example: PRELEVEMENT
        delaiConservation:
          type: string
          example: 24h
        lieuPrestation:
          type: string
          example: Abidjan, Cocody
        dateReception:
          type: string
        nbRapport:
          type: number
        usage:
          type: string
        transporteur:
          type: string
        preleventedBy:
          type: string
        interlocuteurName:
          type: string
        interlocuteurPhone:
          type: string
        interlocuteurEmail:
          type: string
        natureEchantillon:
          type: string
        methodEssai:
          type: string
        observation:
          type: string
      required:
        - modePrelevement
        - delaiConservation
        - lieuPrestation
    RejectMobileMissionDto:
      type: object
      properties:
        reason:
          type: string
          example: Acces site refuse
      required:
        - reason
    CaptureMobileSampleItemTafDto:
      type: object
      properties:
        parameterNormId:
          type: string
        parameterId:
          type: string
        normeName:
          type: string
      required:
        - parameterNormId
        - parameterId
        - normeName
    CaptureMobileSampleItemDto:
      type: object
      properties:
        codeClient:
          type: string
          example: CLI-EAU-01
        natureEchantillon:
          type: string
          example: Eau process
        contenant:
          type: string
          example: Flacon sterile
        conditionnement:
          type: string
          example: Flacon sterile 500 ml
        temperature:
          type: string
          example: 4 C
        gpsCoordonnees:
          type: string
          example: 5.35995,-4.00825
        datePrelevement:
          type: string
          example: '2026-06-20T17:41:00.000Z'
        observation:
          type: string
        sourceName:
          type: string
        sourceEmail:
          type: string
        analysisTypeId:
          type: string
          description: Matrice / type analyse — optionnel si TAF deja lies a la proforma
        tafs:
          description: Optionnel si TAF deja crees depuis la proforma
          type: array
          items:
            $ref: '#/components/schemas/CaptureMobileSampleItemTafDto'
        typeEchantillon:
          type: string
          deprecated: true
        lieuPrelevementSite:
          type: string
          example: Forage principal
        origine:
          type: string
          example: Forage
        qualite:
          type: string
          example: Brute
        usage:
          type: string
          example: Consommation
        eauNatureSource:
          type: string
          deprecated: true
        eauQualite:
          type: string
          deprecated: true
        eauUsage:
          type: string
          deprecated: true
        typeEchantillonAutre:
          type: string
      required:
        - codeClient
        - natureEchantillon
        - contenant
        - conditionnement
        - temperature
    SaveMobileInSituMeasureItemDto:
      type: object
      properties:
        aspect:
          type: string
        odeur:
          type: string
        saveur:
          type: string
        ph:
          type: string
        temperature:
          type: string
        temperatureUnit:
          type: string
          example: °C
        conductivite:
          type: string
        conductiviteUnit:
          type: string
          example: µS/cm
        oxygeneDissous1:
          type: string
        oxygeneDissous1Unit:
          type: string
          example: mg/L
        oxygeneDissous2:
          type: string
        oxygeneDissous2Unit:
          type: string
          example: mg/L
        turbidite:
          type: string
        turbiditeUnit:
          type: string
          example: NTU
        chloreLibre:
          type: string
        chloreLibreUnit:
          type: string
          example: mg/L
        chloreTotal:
          type: string
        chloreTotalUnit:
          type: string
          example: mg/L
        tds:
          type: string
        tdsUnit:
          type: string
          example: mg/L
        gpsCoordonnees:
          type: string
        observation:
          type: string
    SubmitClientSignatureDto:
      type: object
      properties:
        signerName:
          type: string
        signerPhone:
          type: string
        signerEmail:
          type: string
        signatureData:
          type: string
          description: Image signature en base64 ou URL
        deviceId:
          type: string
      required:
        - signerName
        - signatureData
    CloseMobileMissionDto:
      type: object
      properties:
        echantillonPreleves:
          type: number
        echantillonNonPreleves:
          type: number
        observation:
          type: string
      required:
        - echantillonPreleves
        - echantillonNonPreleves
