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/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/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/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/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-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: >-
          Fichier PDF signé de la proforma (bon pour accord) - OBLIGATOIRE pour
          la validation
        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
      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/{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/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/this-provider:
    get:
      operationId: FacturationAdvController_findAll
      summary: Récupérer la liste des avis de crédit
      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/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/{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/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/{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: Supprimer 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/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/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/force/{id}:
    delete:
      operationId: ServiceProviderUserController_forceRemoveProviderUser
      summary: Supprimer complètement 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: []
      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/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}:
    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/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/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/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/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
      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/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-echantillon-item/synchronize-missing/all:
    get:
      operationId: LabEchantillonItemController_synchronizeMissing
      summary: Synchroniser tous les LabEchantillonItems manquants
      parameters: []
      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/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/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/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/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/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_addTechnician
      summary: Ajouter des techniciens à 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/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_findTechnicians
      summary: Récupérer les techniciens 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_getTechnicianPrelevements
      summary: Récupérer les prélèvements d un technicien
      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/{technicianId}:
    delete:
      operationId: PreleveurController_remove
      summary: Supprimer un technicien d un prélèvement
      parameters:
        - name: technicianId
          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/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/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/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/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: Marquer un rapport comme non généré
      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:
        - 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
      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: 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/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/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/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/create-all-demande-group:
    get:
      operationId: DemandeAnalyseController_createAllDemandeGroup
      summary: Créer un groupe de demande d'analyse
      parameters: []
      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/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: []
      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
      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: []
      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
      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
      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/{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/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/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/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/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/generate/{rapportId}:
    get:
      operationId: FinalRapportController_generateFinalRapport
      summary: Générer le rapport final
      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-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/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/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: []
      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
      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/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/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:
    get:
      operationId: LaboratoryStatsController_exportToExcel
      summary: Exporter les statistiques en Excel
      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:
        '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/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/remove/{id}:
    delete:
      operationId: PlanificationController_remove
      summary: Supprimer une planification
      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/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/reject/{id}:
    put:
      operationId: ResultatAnalyseController_rejectResult
      summary: Rejeter 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/invalidate/{id}:
    put:
      operationId: ResultatAnalyseController_invalidateResult
      summary: Invalider 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/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: Supprimer 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/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/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/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/this-provider:
    get:
      operationId: LabPackageController_findAllByLab
      summary: Trouver tous les packages
      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/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/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/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/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/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/create:
    post:
      operationId: UpdateNotificationController_createNotification
      summary: Créer une notification de mise à jour (Admin seulement)
      parameters: []
      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/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/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/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/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/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/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
      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: 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/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/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
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:
    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
    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: Labwlcka
        description:
          type: string
          description: Description du laboratoire
          example: >-
            Dolor velit sapiente ex temporibus excepturi vel hic aspernatur
            quam.
        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: Labwlcka
        description:
          type: string
          description: Description du laboratoire
          example: >-
            Dolor velit sapiente ex temporibus excepturi vel hic aspernatur
            quam.
        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-130
        description:
          type: string
          description: Description de la matrice
          example: Odio facilis officia illum quos tenetur optio maxime unde magni.
        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-130
        description:
          type: string
          description: Description de la matrice
          example: Odio facilis officia illum quos tenetur optio maxime unde magni.
        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
    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
      required:
        - id
    CreateAuditLogDto:
      type: object
      properties: {}
    CreateProformaDto:
      type: object
      properties:
        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
      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: a094d2e5-a9e6-44e0-914e-ee8dbe8227dd
              parameterId: e1a60c2c-f112-41e0-a309-3ec8b44dc0f3
              parameterNormId: bf835b2f-f8a7-4116-b859-c19e12c87ad1
            - laboratoryId: c315da26-ceb7-422a-a55c-2289b3979271
              parameterId: 3e55b4c5-fb70-4b20-9ae8-4a4f2c7d69bd
              parameterNormId: 311c5e88-3474-450b-aadf-8736ccaa43b5
      required:
        - nbrEchantillons
        - subTotal
    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:
        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
        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
    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
    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
      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
      required:
        - dateRecouvrement
        - referenceFacture
    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
    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-04-13T10:34:46.698Z
          default: 2026-04-13T10:34:46.698Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour du fournisseur de service
          example: 2026-04-13T10:34:46.698Z
          default: 2026-04-13T10:34:46.698Z
      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: 3
          maxLength: 50
        lastname:
          type: string
          example: Souleymane
          description: Prénom d'utilisateur
          minLength: 3
        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
        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
      required:
        - email
        - firstname
        - lastname
        - role
    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'
        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'
        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-04-13T10:34:46.705Z
          default: 2026-04-13T10:34:46.705Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour de l entreprise du client
          example: 2026-04-13T10:34:46.705Z
          default: 2026-04-13T10:34:46.705Z
      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-04-13T10:34:46.714Z
          default: 2026-04-13T10:34:46.714Z
        updatedAt:
          format: date-time
          type: string
          description: La date de mise à jour du client
          example: 2026-04-13T10:34:46.714Z
          default: 2026-04-13T10:34:46.714Z
      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 - 169
          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 - 169
          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: d9217340-5902-44f3-b2ee-4780fd032a6c
        lieuPrelevement:
          type: string
          description: Le lieu de prélèvement
          example: Saint-Étienne
        datePrelevement:
          type: string
          description: La date de prélèvement
          example: 2026-01-10T22:25:34.952Z
        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: >-
            Dolorum necessitatibus quaerat exercitationem ut magni quisquam
            beatae.
        nbEchantillon:
          type: number
          description: Le nombre d'échantillon
          example: Nu
        usage:
          type: string
          description: Le type de prélèvement
          example: quo
        delaiConservation:
          type: string
          description: Le délai de conservation
          example: nemo
        withProforma:
          type: boolean
          description: Le prélèvement est-il avec proforma?
          example: true
        proformaId:
          type: string
          description: L'identifiant de la proforma
          example: 5fb48d5a9acff473e4ec3b3d
        customerId:
          type: string
          description: L'identifiant du client
          example: 5da9be03bbd2d5ced685fec8
        customerType:
          type: string
          description: Le type de client
          example: COMPANY
        companyId:
          type: string
          description: L'identifiant de l'entreprise cliente
          example: 61cabce9d5eb1b9d6debf4d5
        preleveurs:
          type: array
          description: Les identifiants des préleveurs
          example:
            - 05b7fbc9d6ccd5e852dacf1a
            - bfccce2d70bab4eecdd76bfc
        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: d96eadaf7bab6f1759e5f152
        processMode:
          type: string
          description: >-
            Le mode de traitement du prélèvement (PACKAGE, PROFORMA,
            NO_PACKAGE_NO_PROFORMA)
          example: PACKAGE
      required:
        - lieuPrelevement
        - status
        - modePrelevement
    UpdatePrelevementDto:
      type: object
      properties:
        reference:
          type: string
          description: 'La référence du prélèvement: Généré automatiquement'
          example: d9217340-5902-44f3-b2ee-4780fd032a6c
        lieuPrelevement:
          type: string
          description: Le lieu de prélèvement
          example: Saint-Étienne
        datePrelevement:
          type: string
          description: La date de prélèvement
          example: 2026-01-10T22:25:34.952Z
        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: >-
            Dolorum necessitatibus quaerat exercitationem ut magni quisquam
            beatae.
        nbEchantillon:
          type: number
          description: Le nombre d'échantillon
          example: Nu
        usage:
          type: string
          description: Le type de prélèvement
          example: quo
        delaiConservation:
          type: string
          description: Le délai de conservation
          example: nemo
        withProforma:
          type: boolean
          description: Le prélèvement est-il avec proforma?
          example: true
        proformaId:
          type: string
          description: L'identifiant de la proforma
          example: 5fb48d5a9acff473e4ec3b3d
        customerId:
          type: string
          description: L'identifiant du client
          example: 5da9be03bbd2d5ced685fec8
        customerType:
          type: string
          description: Le type de client
          example: COMPANY
        companyId:
          type: string
          description: L'identifiant de l'entreprise cliente
          example: 61cabce9d5eb1b9d6debf4d5
        preleveurs:
          type: array
          description: Les identifiants des préleveurs
          example:
            - 05b7fbc9d6ccd5e852dacf1a
            - bfccce2d70bab4eecdd76bfc
        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: d96eadaf7bab6f1759e5f152
        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
    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
    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: d5fc2b51-622a-4001-ad10-750581bac085
          default: c264f0dc-eb3b-417a-98fa-b0fe37684364
        tafs:
          type: array
          description: Travaux à effectuer
          example:
            - parameterNormId: a7c92835-3a67-4088-84c4-e73d9d3f39de
            - parameterNormId: d1bb97c2-16f4-484e-acfc-d874a8900b73
          default:
            - parameterNormId: f82cb0a4-3494-4655-abb6-1b945ff45aee
            - parameterNormId: 5820d0ea-ac27-462b-b4f8-7a4c544f42d0
        id:
          type: number
          description: Id de  l item de  l'échantillon
          example: 9dd3382a-57f6-4fc6-a22f-e8e70e809a3a
      required:
        - id
    CreatePreleveurDto:
      type: object
      properties:
        preleveurUsersIds:
          type: array
          description: Liste userIds des identifiants des preleveurs
          example:
            - sqeresdaezdh-azeazd-azdazd
            - sqeresdadsezdh-azeazd-azdazd
      required:
        - preleveurUsersIds
    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
    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: 58ee0e8f-1f79-4fb1-8c0b-8a76374435f0
      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
    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-04-13T10:34:46.805Z
          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: 44e9aed48dc2e4cffd36ee80
        interlocuteurs:
          type: array
          description: >-
            Liste des interlocuteurs qui recoivent le rapport si le client est
            une entreprise
          example:
            - 2afeb88a3cbdb8e6cff55237
            - 74b8794ee6c60b74fa1aaf9d
        libelle:
          type: string
          description: le libelle du rapport
          example: Velociter adeptio viriliter.
        observation:
          type: string
          description: observation
          example: Adsidue tepesco deripio tribuo suus.
        uploadType:
          type: string
          description: Le type d'upload
          example: local
          enum:
            - local
            - cloudinary
        url:
          type: string
          description: le lien du rapport
          example: https://youthful-success.info/
        type:
          type: string
          description: le type du rapport
          example: surgo
        originalname:
          type: string
          description: le nom original du fichier
          example: variant_impact.elc
        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: 44e9aed48dc2e4cffd36ee80
        interlocuteurs:
          type: array
          description: >-
            Liste des interlocuteurs qui recoivent le rapport si le client est
            une entreprise
          example:
            - 2afeb88a3cbdb8e6cff55237
            - 74b8794ee6c60b74fa1aaf9d
        libelle:
          type: string
          description: le libelle du rapport
          example: Velociter adeptio viriliter.
        observation:
          type: string
          description: observation
          example: Adsidue tepesco deripio tribuo suus.
        uploadType:
          type: string
          description: Le type d'upload
          example: local
          enum:
            - local
            - cloudinary
        url:
          type: string
          description: le lien du rapport
          example: https://youthful-success.info/
        type:
          type: string
          description: le type du rapport
          example: surgo
        originalname:
          type: string
          description: le nom original du fichier
          example: variant_impact.elc
        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.
        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
        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
        - helpText
        - questionType
        - isRequired
        - order
        - options
        - 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: 0065f6bd-2166-414f-83a3-b0ba4e2be0aa
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2025-06-29T04:05:49.217Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '7'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Voluptas sonitus adopto considero totam carpo adsidue delibero.
        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: 2c1c0ddd-8802-4cbf-9906-1917504b2a8d
            - id: da2be857-a238-4b9c-8367-ea22332e1d60
            - id: 1ce6db95-b53d-418e-b464-05d807d67525
      required:
        - analyseExecutionId
        - dateExigence
        - techniciens
    UpdateAnalysesExectutionDto:
      type: object
      properties:
        analyseExecutionId:
          type: string
          description: L'identifiant de l'item de la demande d'analyse
          example: 0065f6bd-2166-414f-83a3-b0ba4e2be0aa
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2025-06-29T04:05:49.217Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '7'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Voluptas sonitus adopto considero totam carpo adsidue delibero.
        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: 2c1c0ddd-8802-4cbf-9906-1917504b2a8d
            - id: da2be857-a238-4b9c-8367-ea22332e1d60
            - id: 1ce6db95-b53d-418e-b464-05d807d67525
    CreateRapportPrelevementDto:
      type: object
      properties:
        observation:
          type: string
          example: >-
            Placeat quisquam aspernatur qui aut corporis. Ducimus dignissimos
            officiis itaque odio maiores deleniti excepturi consequatur.
          description: Une observation sur le prélèvement
        echantillonPreleves:
          type: number
          example: '69'
          description: Nombre d'échantillons prélevés
        echantillonNonPreleves:
          type: number
          example: '42'
          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: >-
            Placeat quisquam aspernatur qui aut corporis. Ducimus dignissimos
            officiis itaque odio maiores deleniti excepturi consequatur.
          description: Une observation sur le prélèvement
        echantillonPreleves:
          type: number
          example: '69'
          description: Nombre d'échantillons prélevés
        echantillonNonPreleves:
          type: number
          example: '42'
          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: 7e05888a-df03-4a7f-98cd-273c40bd3c0f
        dateExigence:
          type: date
          description: La date d'exigence pour les résultats de l'analyse
          example: 2026-04-02T11:03:59.877Z
        requiredTime:
          type: number
          description: Le temps requis pour l analyse en minutes
          example: '8'
        observation:
          type: string
          description: Les observations sur l analyse
          example: Sortitus aperiam theatrum demergo sto solvo subito strues cultura.
        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: a426d414-8b7b-4431-8864-dbc72f47b9de
            - id: 55de1415-cace-4972-a85c-bbad862b048b
            - id: 256ab632-9f5d-4a94-9236-33c801f1120f
      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
    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
        status:
          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
        - status
        - dateDebut
        - dateFin
    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
        status:
          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: ce2ff2e7-abdd-434a-8e67-016bdb0be2b0
          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
    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-300
        description:
          type: string
          description: Description du package
          example: At velit exercitationem blanditiis itaque nobis quam.
        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: e5e258189e7d29e02d9ffba1
              normId: dbf363af7d7602b5476d0ebf
            - parameterId: 344bcaac6a52e75ddc6ef9e3
              normId: 2acbcba06b0a07e83f672bcd
          type: array
          items:
            $ref: '#/components/schemas/CreateLabPackageParameterDto'
        matriceName:
          type: string
          description: Nom de la matrice
          example: Matrice 1
      required:
        - name
        - laboratoryId
        - packagePrice
        - parameters
        - matriceName
    UpdateLabPackageDto:
      type: object
      properties:
        name:
          type: string
          description: Nom du Package
          example: Package 1
          default: Mat-300
        description:
          type: string
          description: Description du package
          example: At velit exercitationem blanditiis itaque nobis quam.
        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: e5e258189e7d29e02d9ffba1
              normId: dbf363af7d7602b5476d0ebf
            - parameterId: 344bcaac6a52e75ddc6ef9e3
              normId: 2acbcba06b0a07e83f672bcd
          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? }
          example:
            - compoundName: Glyphosate
              detectionLimit: 0.005 µg/L
              critereName: NQ
              critereLimit: 0.1 µg/L
          type: array
          items:
            type: string
      required:
        - isMolecular
    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
    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
    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
    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
    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
    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
      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
    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:
        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)
        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'
      required:
        - equipmentName
        - 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'
    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
