--- openapi: 3.0.3 info: title: UnionFlow Server API description: API REST pour la gestion d'union avec authentification Keycloak version: 1.0.0 servers: - url: https://api.lions.dev/unionflow tags: - name: Adhésions description: Gestion des demandes d'adhésion des membres - name: Admin - Association description: Associer un utilisateur à une organisation (SUPER_ADMIN) - name: Admin - Utilisateurs description: Gestion des utilisateurs Keycloak (SUPER_ADMIN) - name: Alertes LCB-FT description: Gestion des alertes Lutte Contre le Blanchiment - name: Analytics description: APIs pour les analytics et métriques - name: Audit description: Gestion des logs d'audit - name: Comptabilité description: "Gestion comptable : comptes, journaux et écritures comptables" - name: Compte Adhérent description: Vue financière unifiée du membre connecté - name: Configuration description: Gestion de la configuration système - name: Cotisations description: Gestion des cotisations des membres - name: Dashboard description: APIs pour la gestion du dashboard - name: Dashboard Membre description: API pour le tableau de bord personnel des membres - name: Demandes d'aide description: Gestion des demandes d'aide solidarité - name: Documents description: "Gestion documentaire : documents et pièces jointes" - name: Export description: API d'export des données - name: Favoris description: Gestion des favoris utilisateur - name: Feedback description: Commentaires et suggestions utilisateur - name: Finance - Approvals description: Gestion des approbations de transactions financières - name: Finance - Budgets description: Gestion des budgets organisationnels - name: Finance - Workflow description: Statistiques et audits des workflows financiers - name: Logs & Monitoring description: Gestion des logs système et monitoring - name: Membres description: API de gestion des membres - name: Messagerie description: "Messagerie instantanée — conversations, messages, notes vocales" - name: Notifications description: "Gestion des notifications : envoi, templates et notifications groupé\ es" - name: Organisations description: Gestion des organisations - name: Paiements description: Paiements de cotisations — Wave Checkout et manuel - name: Paramètres LCB-FT description: Gestion des seuils anti-blanchiment (LCB-FT) - name: Propositions d'aide description: Gestion des propositions d'aide solidarité - name: Préférences description: API de gestion des préférences utilisateur - name: Rôles description: Gestion des rôles et permissions - name: Sauvegardes description: Gestion des sauvegardes et restaurations - name: Status description: API de statut du serveur - name: Suggestions description: Gestion des suggestions utilisateur - name: Système description: Gestion de la configuration système - name: Tickets description: Gestion des tickets support - name: Types de référence description: Gestion des données de référence paramétrables - name: Versements description: Versements de cotisations — Wave et manuel - name: Wave Mobile Money description: Gestion des comptes et transactions Wave Mobile Money - name: Événements description: Gestion des événements de l'union paths: /api/adhesions: get: tags: - Adhésions summary: Lister toutes les adhésions description: Récupère la liste paginée de toutes les adhésions parameters: - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 responses: "200": description: Liste des adhésions récupérée avec succès content: application/json: schema: $ref: "#/components/schemas/AdhesionResponse" "400": description: Paramètres de pagination invalides "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Adhésions summary: Créer une nouvelle adhésion description: Crée une nouvelle demande d'adhésion pour un membre requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateAdhesionRequest" responses: "201": description: Adhésion créée avec succès content: application/json: schema: $ref: "#/components/schemas/AdhesionResponse" "400": description: Données invalides "404": description: Membre ou organisation non trouvé "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/adhesions/en-attente: get: tags: - Adhésions summary: Lister les adhésions en attente description: Récupère toutes les adhésions en attente d'approbation parameters: - name: page in: query description: Numéro de page schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 responses: "200": description: Liste des adhésions en attente "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/membre/{membreId}: get: tags: - Adhésions summary: Lister les adhésions d'un membre description: Récupère toutes les adhésions d'un membre spécifique parameters: - name: membreId in: path description: Identifiant du membre required: true schema: $ref: "#/components/schemas/UUID" - name: page in: query description: Numéro de page schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 responses: "200": description: Liste des adhésions du membre "404": description: Membre non trouvé "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/organisation/{organisationId}: get: tags: - Adhésions summary: Lister les adhésions d'une organisation description: Récupère toutes les adhésions d'une organisation spécifique parameters: - name: organisationId in: path description: Identifiant de l'organisation required: true schema: $ref: "#/components/schemas/UUID" - name: page in: query description: Numéro de page schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 responses: "200": description: Liste des adhésions de l'organisation "404": description: Organisation non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/reference/{numeroReference}: get: tags: - Adhésions summary: Récupérer une adhésion par référence description: Récupère une adhésion par son numéro de référence unique parameters: - name: numeroReference in: path description: Numéro de référence de l'adhésion required: true schema: type: string responses: "200": description: Adhésion trouvée "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/stats: get: tags: - Adhésions summary: Statistiques des adhésions description: Récupère les statistiques globales des adhésions responses: "200": description: Statistiques récupérées avec succès "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/statut/{statut}: get: tags: - Adhésions summary: Lister les adhésions par statut description: Récupère toutes les adhésions ayant un statut spécifique parameters: - name: statut in: path description: Statut des adhésions required: true schema: type: string example: EN_ATTENTE - name: page in: query description: Numéro de page schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 responses: "200": description: Liste des adhésions avec le statut spécifié "400": description: Statut invalide "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/adhesions/{id}: get: tags: - Adhésions summary: Récupérer une adhésion par ID description: Récupère les détails d'une adhésion spécifique parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Adhésion trouvée content: application/json: schema: $ref: "#/components/schemas/AdhesionResponse" "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER put: tags: - Adhésions summary: Mettre à jour une adhésion description: Met à jour les données d'une adhésion existante parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateAdhesionRequest" responses: "200": description: Adhésion mise à jour avec succès "400": description: Données invalides "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE delete: tags: - Adhésions summary: Supprimer une adhésion description: Supprime (annule) une adhésion parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Adhésion supprimée avec succès "404": description: Adhésion non trouvée "409": description: Impossible de supprimer une adhésion payée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN /api/adhesions/{id}/approuver: post: tags: - Adhésions summary: Approuver une adhésion description: Approuve une demande d'adhésion en attente parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" - name: approuvePar in: query description: Nom de l'utilisateur qui approuve schema: type: string responses: "200": description: Adhésion approuvée avec succès "400": description: L'adhésion ne peut pas être approuvée "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION /api/adhesions/{id}/paiement: post: tags: - Adhésions summary: Enregistrer un paiement description: Enregistre un paiement pour une adhésion approuvée parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" - name: methodePaiement in: query description: Méthode de paiement schema: type: string - name: montantPaye in: query description: Montant payé required: true schema: type: number - name: referencePaiement in: query description: Référence du paiement schema: type: string responses: "200": description: Paiement enregistré avec succès "400": description: L'adhésion ne peut pas recevoir de paiement "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/adhesions/{id}/rejeter: post: tags: - Adhésions summary: Rejeter une adhésion description: Rejette une demande d'adhésion en attente parameters: - name: id in: path description: Identifiant de l'adhésion required: true schema: $ref: "#/components/schemas/UUID" - name: motifRejet in: query description: Motif du rejet required: true schema: type: string responses: "200": description: Adhésion rejetée avec succès "400": description: L'adhésion ne peut pas être rejetée "404": description: Adhésion non trouvée "500": description: Erreur interne du serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION /api/admin/associer-organisation: post: tags: - Admin - Association summary: Associer un compte à une organisation description: "En tant que super admin, associe l'utilisateur (email) à une organisation.\ \ Si aucun Membre n'existe pour cet email, une fiche minimale est créée. L'utilisateur\ \ pourra alors voir cette organisation dans « Mes organisations »." requestBody: content: application/json: schema: $ref: "#/components/schemas/AssocierOrganisationRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/admin/users: get: tags: - Admin - Utilisateurs summary: Lister les utilisateurs description: Liste paginée des utilisateurs du realm parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: search in: query schema: type: string - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN post: tags: - Admin - Utilisateurs summary: Créer un utilisateur description: Crée un nouvel utilisateur Keycloak (proxy lions-user-manager) requestBody: content: application/json: schema: $ref: "#/components/schemas/UserDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/admin/users/roles: get: tags: - Admin - Utilisateurs summary: Liste des rôles realm responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/admin/users/{id}: get: tags: - Admin - Utilisateurs summary: Détail utilisateur parameters: - name: id in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN put: tags: - Admin - Utilisateurs summary: Mettre à jour un utilisateur description: Met à jour un utilisateur (au minimum enabled) parameters: - name: id in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/UserDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/admin/users/{id}/roles: get: tags: - Admin - Utilisateurs summary: Rôles d'un utilisateur parameters: - name: id in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN put: tags: - Admin - Utilisateurs summary: Mettre à jour les rôles d'un utilisateur parameters: - name: id in: path required: true schema: type: string requestBody: content: application/json: schema: type: array items: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/alertes-lcb-ft: get: tags: - Alertes LCB-FT summary: Liste des alertes LCB-FT description: Récupère les alertes avec filtrage et pagination parameters: - name: dateDebut in: query schema: type: string - name: dateFin in: query schema: type: string - name: organisationId in: query schema: type: string - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer - name: traitee in: query schema: type: boolean - name: typeAlerte in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/alertes-lcb-ft/stats/non-traitees: get: tags: - Alertes LCB-FT summary: Statistiques alertes description: Nombre d'alertes non traitées parameters: - name: organisationId in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/alertes-lcb-ft/{id}: get: tags: - Alertes LCB-FT summary: Détails d'une alerte description: Récupère une alerte par son ID parameters: - name: id in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/alertes-lcb-ft/{id}/traiter: post: tags: - Alertes LCB-FT summary: Traiter une alerte description: Marque une alerte comme traitée avec un commentaire parameters: - name: id in: path required: true schema: type: string requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/alerts: get: tags: - Logs & Monitoring summary: Récupérer toutes les alertes actives responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/SystemAlertResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/alerts/config: get: tags: - Logs & Monitoring summary: Récupérer la configuration des alertes système responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/AlertConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR put: tags: - Logs & Monitoring summary: Mettre à jour la configuration des alertes système requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateAlertConfigRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/AlertConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/alerts/{id}/acknowledge: post: tags: - Logs & Monitoring summary: Acquitter une alerte parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/audit: get: tags: - Audit summary: Liste tous les logs d'audit description: Récupère tous les logs avec pagination parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 50 type: integer - name: sortBy in: query schema: default: dateHeure type: string - name: sortOrder in: query schema: default: desc type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION post: tags: - Audit summary: Enregistre un nouveau log d'audit description: Crée une nouvelle entrée dans le journal d'audit requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateAuditLogRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/audit/rechercher: post: tags: - Audit summary: Recherche des logs avec filtres description: Recherche avancée avec filtres multiples parameters: - name: dateDebut in: query schema: type: string - name: dateFin in: query schema: type: string - name: ipAddress in: query schema: type: string - name: module in: query schema: type: string - name: page in: query schema: format: int32 default: 0 type: integer - name: severite in: query schema: type: string - name: size in: query schema: format: int32 default: 50 type: integer - name: typeAction in: query schema: type: string - name: utilisateur in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/audit/statistiques: get: tags: - Audit summary: Récupère les statistiques d'audit description: Retourne les statistiques globales des logs responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/backups: get: tags: - Sauvegardes summary: Lister toutes les sauvegardes disponibles responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/BackupResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR post: tags: - Sauvegardes summary: Créer une nouvelle sauvegarde requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateBackupRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/backups/config: get: tags: - Sauvegardes summary: Récupérer la configuration des sauvegardes automatiques responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/BackupConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR put: tags: - Sauvegardes summary: Mettre à jour la configuration des sauvegardes automatiques requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateBackupConfigRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/BackupConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/backups/restore: post: tags: - Sauvegardes summary: Restaurer une sauvegarde requestBody: content: application/json: schema: $ref: "#/components/schemas/RestoreBackupRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/backups/restore-point: post: tags: - Sauvegardes summary: Créer un point de restauration responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/backups/{id}: get: tags: - Sauvegardes summary: Récupérer une sauvegarde par ID parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/BackupResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR delete: tags: - Sauvegardes summary: Supprimer une sauvegarde parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/comptabilite/comptes: get: tags: - Comptabilité responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Comptabilité requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateCompteComptableRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/comptabilite/comptes/{id}: get: tags: - Comptabilité parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/comptabilite/ecritures: post: tags: - Comptabilité requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateEcritureComptableRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/comptabilite/ecritures/journal/{journalId}: get: tags: - Comptabilité parameters: - name: journalId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/comptabilite/ecritures/organisation/{organisationId}: get: tags: - Comptabilité parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/comptabilite/ecritures/{id}: get: tags: - Comptabilité parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/comptabilite/journaux: get: tags: - Comptabilité responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Comptabilité requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateJournalComptableRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/comptabilite/journaux/{id}: get: tags: - Comptabilité parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/configuration: get: tags: - Configuration summary: Lister toutes les configurations responses: "200": description: Liste des configurations récupérée avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN /api/configuration/{cle}: get: tags: - Configuration summary: Récupérer une configuration par clé parameters: - name: cle in: path required: true schema: type: string responses: "200": description: Configuration trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN put: tags: - Configuration summary: Mettre à jour une configuration parameters: - name: cle in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateConfigurationRequest" responses: "200": description: Configuration mise à jour avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN /api/cotisations: get: tags: - Cotisations summary: Lister toutes les cotisations description: Récupère la liste paginée (format résumé) parameters: - name: page in: query schema: format: int32 default: 0 minimum: 0 type: integer - name: size in: query schema: format: int32 default: 20 minimum: 1 type: integer responses: "200": description: Liste récupérée content: application/json: schema: $ref: "#/components/schemas/CotisationSummaryResponse" "500": description: Erreur interne "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Cotisations summary: Créer une cotisation requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateCotisationRequest" responses: "201": description: Créée content: application/json: schema: $ref: "#/components/schemas/CotisationResponse" "400": description: Invalide "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/cotisations/en-retard: get: tags: - Cotisations summary: Cotisations en retard parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/membre/{membreId}: get: tags: - Cotisations summary: Cotisations d'un membre parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/mes-cotisations: get: tags: - Cotisations summary: Mes cotisations description: Liste toutes les cotisations du membre connecté parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 50 type: integer responses: "200": description: Liste récupérée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/cotisations/mes-cotisations/en-attente: get: tags: - Cotisations summary: Mes cotisations en attente description: Cotisations personnelles en attente de paiement responses: "200": description: Liste récupérée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/cotisations/mes-cotisations/synthese: get: tags: - Cotisations summary: Synthèse de mes cotisations description: "KPI personnels : cotisations à payer, montant dû, etc." responses: "200": description: Synthèse récupérée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/cotisations/public: get: tags: - Cotisations summary: Cotisations publiques description: Liste des cotisations simplifiée parameters: - name: page in: query schema: format: int32 default: 0 minimum: 0 type: integer - name: size in: query schema: format: int32 default: 20 minimum: 1 type: integer responses: "200": description: Liste des cotisations "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/rappels/groupes: post: tags: - Cotisations summary: Rappels groupés requestBody: content: application/json: schema: type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/cotisations/recherche: get: tags: - Cotisations summary: Recherche avancée parameters: - name: annee in: query schema: format: int32 type: integer - name: membreId in: query schema: $ref: "#/components/schemas/UUID" - name: mois in: query schema: format: int32 type: integer - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer - name: statut in: query schema: type: string - name: typeCotisation in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/reference/{numeroReference}: get: tags: - Cotisations summary: Cotisation par référence parameters: - name: numeroReference in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/statistiques: get: tags: - Cotisations summary: Statistiques globales responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/statistiques/periode: get: tags: - Cotisations summary: Statistiques par période parameters: - name: annee in: query schema: format: int32 type: integer - name: mois in: query schema: format: int32 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/stats: get: tags: - Cotisations summary: Statistiques globales responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/statut/{statut}: get: tags: - Cotisations summary: Cotisations par statut parameters: - name: statut in: path required: true schema: type: string - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/cotisations/{id}: get: tags: - Cotisations summary: Détails d'une cotisation description: Récupère les détails complets parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Succès content: application/json: schema: $ref: "#/components/schemas/CotisationResponse" "404": description: Non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER put: tags: - Cotisations summary: Mettre à jour une cotisation parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateCotisationRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE delete: tags: - Cotisations summary: Annuler une cotisation parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN /api/cotisations/{id}/payer: put: tags: - Cotisations summary: Payer une cotisation parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: {} responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - TRESORIER /api/dashboard/membre/me: get: tags: - Dashboard Membre summary: Récupérer la synthèse du dashboard pour le membre connecté responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN /api/demandes-aide: get: tags: - Demandes d'aide summary: Liste les demandes d'aide avec pagination parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION post: tags: - Demandes d'aide summary: Crée une nouvelle demande d'aide requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateDemandeAideRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/demandes-aide/mes: get: tags: - Demandes d'aide summary: Mes demandes d'aide description: Liste les demandes du membre connecté parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 50 type: integer responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/demandes-aide/search: get: tags: - Demandes d'aide summary: "Recherche les demandes d'aide avec filtres (statut, type, urgence)" parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer - name: statut in: query schema: type: string - name: type in: query schema: type: string - name: urgence in: query schema: type: string responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/demandes-aide/{id}: get: tags: - Demandes d'aide summary: Récupère une demande d'aide par son ID parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION put: tags: - Demandes d'aide summary: Met à jour une demande d'aide parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateDemandeAideRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/demandes-aide/{id}/approuver: put: tags: - Demandes d'aide summary: Approuver une demande d'aide parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: motif in: query schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/demandes-aide/{id}/rejeter: put: tags: - Demandes d'aide summary: Rejeter une demande d'aide parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: motif in: query schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/DemandeAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/documents: post: tags: - Documents requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateDocumentRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/documents/mes-documents: get: tags: - Documents responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/documents/pieces-jointes: post: tags: - Documents requestBody: content: application/json: schema: $ref: "#/components/schemas/CreatePieceJointeRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/documents/upload: post: tags: - Documents requestBody: content: multipart/form-data: schema: type: object properties: file: $ref: "#/components/schemas/FileUpload" description: type: string typeDocument: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/documents/{documentId}/pieces-jointes: get: tags: - Documents parameters: - name: documentId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/documents/{id}: get: tags: - Documents parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/documents/{id}/telechargement: post: tags: - Documents parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/evenements: get: tags: - Événements summary: Lister tous les événements actifs description: Récupère la liste paginée des événements actifs parameters: - name: direction in: query description: Direction du tri (asc/desc) schema: default: asc type: string example: asc - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 minimum: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 minimum: 1 type: integer example: 20 - name: sort in: query description: Champ de tri schema: default: dateDebut type: string example: dateDebut responses: "200": description: Liste des événements actifs content: application/json: schema: $ref: "#/components/schemas/PagedResponseEvenementMobileDTO" "401": description: Non authentifié "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER post: tags: - Événements summary: Créer un nouvel événement requestBody: content: application/json: schema: $ref: "#/components/schemas/Evenement" responses: "201": description: Événement créé avec succès "400": description: Données invalides "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT /api/evenements/a-venir: get: tags: - Événements summary: Événements à venir parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 10 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE /api/evenements/count: get: tags: - Événements summary: Compter les événements description: Compte le nombre d'événements dans la base responses: "200": description: Nombre d'événements "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN /api/evenements/mes-inscriptions: get: tags: - Événements summary: Mes inscriptions aux événements responses: "200": description: Liste de mes inscriptions "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER /api/evenements/publics: get: tags: - Événements summary: Événements publics parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK /api/evenements/recherche: get: tags: - Événements summary: Rechercher des événements parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: q in: query schema: type: string - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE /api/evenements/statistiques: get: tags: - Événements summary: Statistiques des événements responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT /api/evenements/test: get: tags: - Événements summary: Test de connectivité description: Endpoint public pour tester la connectivité responses: "200": description: Test réussi /api/evenements/type/{type}: get: tags: - Événements summary: Événements par type parameters: - name: type in: path required: true schema: type: string - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE /api/evenements/{id}: get: tags: - Événements summary: Récupérer un événement par ID parameters: - name: id in: path description: UUID de l'événement required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Événement trouvé "404": description: Événement non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE put: tags: - Événements summary: Mettre à jour un événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/Evenement" responses: "200": description: Événement mis à jour avec succès "404": description: Événement non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT delete: tags: - Événements summary: Supprimer un événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Événement supprimé avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - ORGANISATEUR_EVENEMENT /api/evenements/{id}/feedback: post: tags: - Événements summary: Soumettre un feedback sur l'événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: {} responses: "201": description: Feedback créé "400": description: Données invalides ou feedback déjà soumis "404": description: Événement non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER /api/evenements/{id}/feedbacks: get: tags: - Événements summary: Liste des feedbacks de l'événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des feedbacks "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER /api/evenements/{id}/inscriptions: post: tags: - Événements summary: S'inscrire à un événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "201": description: Inscription créée "400": description: Déjà inscrit ou événement complet "404": description: Événement non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER delete: tags: - Événements summary: Se désinscrire d'un événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Désinscription effectuée "404": description: Inscription non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER /api/evenements/{id}/me/inscrit: get: tags: - Événements summary: Statut d'inscription de l'utilisateur connecté parameters: - name: id in: path description: UUID de l'événement required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Statut d'inscription "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE - USER /api/evenements/{id}/participants: get: tags: - Événements summary: Liste des participants parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des participants "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - SECRETAIRE - ORGANISATEUR_EVENEMENT - MEMBRE /api/evenements/{id}/statut: patch: tags: - Événements summary: Changer le statut d'un événement parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - PRESIDENT - ORGANISATEUR_EVENEMENT /api/export/cotisations/csv: get: tags: - Export summary: Exporter les cotisations en CSV parameters: - name: associationId in: query schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: type: string - name: type in: query schema: type: string responses: "200": description: Fichier CSV généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Export summary: Exporter des cotisations spécifiques en CSV requestBody: content: application/json: schema: type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string responses: "200": description: Fichier CSV généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/export/cotisations/recus: post: tags: - Export summary: Générer des reçus groupés requestBody: content: application/json: schema: type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string responses: "200": description: Reçus générés "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/export/cotisations/{cotisationId}/recu: get: tags: - Export summary: Générer un reçu de paiement parameters: - name: cotisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Reçu généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/export/cotisations/{cotisationId}/recu/pdf: get: tags: - Export summary: Générer un reçu de paiement en PDF parameters: - name: cotisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: PDF généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/export/rapport/mensuel: get: tags: - Export summary: Générer un rapport mensuel parameters: - name: annee in: query schema: format: int32 type: integer - name: associationId in: query schema: $ref: "#/components/schemas/UUID" - name: mois in: query schema: format: int32 type: integer responses: "200": description: Rapport généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/export/rapport/mensuel/pdf: get: tags: - Export summary: Générer un rapport mensuel en PDF parameters: - name: annee in: query schema: format: int32 type: integer - name: associationId in: query schema: $ref: "#/components/schemas/UUID" - name: mois in: query schema: format: int32 type: integer responses: "200": description: PDF généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/favoris: post: tags: - Favoris summary: Créer un nouveau favori requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateFavoriRequest" responses: "201": description: Favori créé avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/favoris/utilisateur/{utilisateurId}: get: tags: - Favoris summary: Lister les favoris d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des favoris récupérée avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/favoris/utilisateur/{utilisateurId}/statistiques: get: tags: - Favoris summary: Obtenir les statistiques des favoris d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Statistiques récupérées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/favoris/{id}: delete: tags: - Favoris summary: Supprimer un favori parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Favori supprimé avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/feedback: post: tags: - Feedback summary: Envoyer un commentaire / feedback requestBody: content: application/json: schema: $ref: "#/components/schemas/FeedbackRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/finance/approvals: post: tags: - Finance - Approvals summary: Demande une approbation de transaction description: Crée une demande d'approbation pour une transaction financière requestBody: content: application/json: schema: type: object additionalProperties: {} responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN - MEMBRE /api/finance/approvals/count/pending: get: tags: - Finance - Approvals summary: Compte les approbations en attente description: Retourne le nombre d'approbations en attente pour une organisation parameters: - name: organizationId in: query schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/approvals/history: get: tags: - Finance - Approvals summary: Récupère l'historique des approbations description: Liste l'historique des approbations avec filtres optionnels parameters: - name: endDate in: query schema: type: string - name: organizationId in: query schema: $ref: "#/components/schemas/UUID" - name: startDate in: query schema: type: string - name: status in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/approvals/pending: get: tags: - Finance - Approvals summary: Récupère les approbations en attente description: Liste toutes les approbations de transactions en attente pour une organisation parameters: - name: organizationId in: query schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/approvals/{approvalId}: get: tags: - Finance - Approvals summary: Récupère une approbation par ID description: Retourne les détails d'une approbation spécifique parameters: - name: approvalId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/approvals/{approvalId}/approve: post: tags: - Finance - Approvals summary: Approuve une transaction description: Approuve une demande de transaction avec un commentaire optionnel parameters: - name: approvalId in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/ApproveTransactionRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/approvals/{approvalId}/reject: post: tags: - Finance - Approvals summary: Rejette une transaction description: Rejette une demande de transaction avec une raison obligatoire parameters: - name: approvalId in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/RejectTransactionRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/audit-logs: get: tags: - Finance - Workflow summary: Récupère les logs d'audit financier description: Liste les logs d'audit avec filtres optionnels parameters: - name: endDate in: query schema: type: string - name: entityType in: query schema: type: string - name: limit in: query schema: format: int32 default: 100 type: integer - name: operation in: query schema: type: string - name: organizationId in: query schema: type: string - name: severity in: query schema: type: string - name: startDate in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/audit-logs/anomalies: get: tags: - Finance - Workflow summary: Récupère les anomalies financières détectées description: Liste les anomalies et transactions suspectes parameters: - name: endDate in: query schema: type: string - name: organizationId in: query schema: type: string - name: startDate in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/audit-logs/export: post: tags: - Finance - Workflow summary: Exporte les logs d'audit description: Génère un export des logs d'audit au format spécifié (CSV/PDF) requestBody: content: application/json: schema: type: object additionalProperties: {} responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/budgets: get: tags: - Finance - Budgets summary: Récupère les budgets description: Liste tous les budgets d'une organisation avec filtres optionnels parameters: - name: organizationId in: query schema: $ref: "#/components/schemas/UUID" - name: status in: query schema: type: string - name: year in: query schema: format: int32 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN post: tags: - Finance - Budgets summary: Crée un nouveau budget description: Crée un budget avec ses lignes budgétaires requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateBudgetRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/budgets/{budgetId}: get: tags: - Finance - Budgets summary: Récupère un budget par ID description: Retourne les détails complets d'un budget parameters: - name: budgetId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN put: tags: - Finance - Budgets summary: Met à jour un budget description: "Modifie un budget existant (nom, description, lignes, statut)" parameters: - name: budgetId in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: {} responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN delete: tags: - Finance - Budgets summary: Supprime un budget description: Supprime logiquement un budget (soft delete) parameters: - name: budgetId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/budgets/{budgetId}/tracking: get: tags: - Finance - Budgets summary: Récupère le suivi budgétaire description: Retourne les statistiques de suivi et réalisation du budget parameters: - name: budgetId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/finance/stats: get: tags: - Finance - Workflow summary: Statistiques du workflow financier description: Retourne les statistiques globales du workflow financier parameters: - name: endDate in: query schema: type: string - name: organizationId in: query schema: type: string - name: startDate in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN_ORGANISATION - SUPER_ADMIN /api/logs/export: get: tags: - Logs & Monitoring summary: Exporter les logs en CSV parameters: - name: level in: query schema: type: string - name: source in: query schema: type: string - name: timeRange in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/logs/search: post: tags: - Logs & Monitoring summary: Rechercher dans les logs système description: "Recherche avec filtres (niveau, source, texte, dates)" requestBody: content: application/json: schema: $ref: "#/components/schemas/LogSearchRequest" responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/SystemLogResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/membres: get: tags: - Membres summary: Lister les membres parameters: - name: direction in: query description: Direction du tri (asc/desc) schema: default: asc type: string - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 type: integer - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer - name: sort in: query description: Champ de tri schema: default: nom type: string responses: "200": description: Liste des membres avec pagination content: application/json: schema: $ref: "#/components/schemas/PagedResponseMembreSummaryResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR post: tags: - Membres summary: Créer un nouveau membre requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateMembreRequest" responses: "201": description: Membre créé avec succès "400": description: Données invalides "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE /api/membres/accepter-invitation/{token}: post: tags: - Membres summary: Accepter une invitation description: Valide le token d'invitation et passe l'adhésion en EN_ATTENTE_VALIDATION. parameters: - name: token in: path description: Token d'invitation required: true schema: type: string responses: "200": description: Invitation acceptée "400": description: Token invalide ou expiré /api/membres/actifs: get: tags: - Membres summary: Membres actifs description: Liste tous les membres dont le compte est actif responses: "200": description: Liste des membres actifs "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TRESORIER /api/membres/auth/change-password: post: tags: - Compte Adhérent summary: Changer le mot de passe (mobile) description: Endpoint dédié à l'application mobile. Bypass lions-user-manager via API Admin Keycloak directe. requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/membres/autocomplete/professions: get: tags: - Membres summary: Obtenir la liste des professions pour autocomplétion parameters: - name: query in: query description: Terme de recherche (optionnel) schema: type: string responses: "200": description: Liste des professions distinctes /api/membres/autocomplete/villes: get: tags: - Membres summary: Obtenir la liste des villes pour autocomplétion parameters: - name: query in: query description: Terme de recherche (optionnel) schema: type: string responses: "200": description: Liste des villes distinctes /api/membres/export: get: tags: - Membres summary: "Exporter des membres en Excel, CSV ou PDF" parameters: - name: associationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: colonnes in: query description: Colonnes à exporter schema: type: array items: type: string - name: dateAdhesionDebut in: query description: Date adhésion début schema: type: string - name: dateAdhesionFin in: query description: Date adhésion fin schema: type: string - name: format in: query description: Format d'export schema: default: EXCEL type: string - name: formaterDates in: query description: Formater les dates schema: default: true type: boolean - name: inclureHeaders in: query description: Inclure les en-têtes schema: default: true type: boolean - name: inclureStatistiques in: query description: Inclure un onglet statistiques (Excel uniquement) schema: default: false type: boolean - name: motDePasse in: query description: Mot de passe pour chiffrer le fichier (optionnel) schema: type: string - name: statut in: query description: Statut des membres schema: type: string - name: type in: query description: Type de membre schema: type: string responses: "200": description: Fichier exporté "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/export/count: get: tags: - Membres summary: Compter les membres selon les filtres pour l'export parameters: - name: associationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: dateAdhesionDebut in: query description: Date adhésion début schema: type: string - name: dateAdhesionFin in: query description: Date adhésion fin schema: type: string - name: statut in: query description: Statut des membres schema: type: string - name: type in: query description: Type de membre schema: type: string responses: "200": description: Nombre de membres correspondant aux critères /api/membres/export/selection: post: tags: - Membres summary: Exporter une sélection de membres en Excel parameters: - name: format in: query description: Format d'export schema: default: EXCEL type: string requestBody: content: application/json: schema: type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string responses: "200": description: Fichier Excel généré "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/import: post: tags: - Membres summary: Importer des membres depuis un fichier Excel ou CSV description: "Format strict (colonnes obligatoires: nom, prenom, email, telephone).\ \ Si organisationId est fourni, les membres sont rattachés à l'organisation\ \ et le quota souscription (tranche) est respecté." requestBody: content: multipart/form-data: schema: type: object properties: file: $ref: "#/components/schemas/FileUpload" fileName: type: string organisationId: type: string typeMembreDefaut: type: string mettreAJourExistants: type: boolean ignorerErreurs: type: boolean responses: "200": description: Import terminé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/import/modele: get: tags: - Membres summary: Télécharger le modèle Excel pour l'import responses: "200": description: Modèle Excel généré /api/membres/me: get: tags: - Membres summary: Récupérer le membre connecté responses: "200": description: Membre connecté trouvé ou auto-provisionné "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN /api/membres/me/suivis: get: tags: - Membres summary: Liste des ids des membres suivis (réseau) responses: "200": description: Liste des UUID suivis "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - CONSULTANT - SECRETAIRE - GESTIONNAIRE_RH /api/membres/mes-organisations: get: tags: - Membres summary: Organisations du membre connecté description: Retourne la liste des organisations auxquelles le membre connecté appartient (multi-org) responses: "200": description: Liste des organisations "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN - MODERATEUR /api/membres/mon-compte: get: tags: - Compte Adhérent summary: Compte adhérent du membre connecté description: "Agrège cotisations, épargne et crédit en une vue financière unifié\ e." responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN /api/membres/mon-compte/mot-de-passe: put: tags: - Compte Adhérent summary: Changer le mot de passe au premier login description: Met à jour le mot de passe Keycloak et lève le flag premiereConnexion. requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/membres/mon-statut: get: tags: - Compte Adhérent summary: Statut du compte du membre connecté description: "Retourne statutCompte : ACTIF, EN_ATTENTE_VALIDATION, SUSPENDU\ \ ou DESACTIVE." responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/membres/numero/{numeroMembre}: get: tags: - Membres summary: Trouver un membre par son numéro parameters: - name: numeroMembre in: path required: true schema: type: string responses: "200": description: Membre trouvé "404": description: Membre non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/membres/organisation/{organisationId}: get: tags: - Membres summary: Membres d'une organisation description: Liste les membres actifs d'une organisation parameters: - name: organisationId in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des membres "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TRESORIER /api/membres/recherche: get: tags: - Membres summary: Rechercher des membres par nom ou prénom parameters: - name: direction in: query description: Direction du tri (asc/desc) schema: default: asc type: string - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 type: integer - name: q in: query description: Terme de recherche schema: type: string - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer - name: sort in: query description: Champ de tri schema: default: nom type: string responses: "200": description: Résultats de la recherche /api/membres/recherche-avancee: get: tags: - Membres summary: Recherche avancée de membres avec filtres multiples (DEPRECATED) parameters: - name: actif in: query description: Statut actif (true/false) schema: type: boolean - name: dateAdhesionMax in: query description: Date d'adhésion maximum (YYYY-MM-DD) schema: type: string - name: dateAdhesionMin in: query description: Date d'adhésion minimum (YYYY-MM-DD) schema: type: string - name: direction in: query description: Direction du tri (asc/desc) schema: default: asc type: string - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 type: integer - name: q in: query description: Terme de recherche schema: type: string - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer - name: sort in: query description: Champ de tri schema: default: nom type: string responses: "200": description: Résultats de la recherche avancée deprecated: true /api/membres/search/advanced: post: tags: - Membres summary: Recherche avancée de membres avec critères multiples description: | Recherche sophistiquée de membres avec de nombreux critères de filtrage : - Recherche textuelle dans nom, prénom, email - Filtres par organisation, rôles, statut - Filtres par âge, région, profession - Filtres par dates d'adhésion - Résultats paginés avec statistiques Réservée aux super administrateurs et administrateurs. parameters: - name: direction in: query description: Direction du tri (asc/desc) schema: default: asc type: string example: asc - name: page in: query description: Numéro de page (0-based) schema: format: int32 default: 0 type: integer example: 0 - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer example: 20 - name: sort in: query description: Champ de tri schema: default: nom type: string example: nom requestBody: description: Critères de recherche avancée content: application/json: schema: $ref: "#/components/schemas/MembreSearchCriteria" examples: Exemple de critères: value: query: marie statut: ACTIF ageMin: 25 ageMax: 45 region: Dakar roles: - PRESIDENT - SECRETAIRE dateAdhesionMin: 2020-01-01 includeInactifs: false required: false responses: "200": description: Recherche effectuée avec succès content: application/json: schema: $ref: "#/components/schemas/MembreSearchResultDTO" examples: Exemple de résultats: value: |- { "membres": [...], "totalElements": 247, "totalPages": 13, "currentPage": 0, "pageSize": 20, "hasNext": true, "hasPrevious": false, "executionTimeMs": 45, "statistics": { "membresActifs": 230, "membresInactifs": 17, "ageMoyen": 34.5, "nombreOrganisations": 12 } } "400": description: Critères de recherche invalides content: application/json: examples: {} "403": description: "Accès non autorisé - Rôle SUPER_ADMIN, ADMIN ou ADMIN_ORGANISATION\ \ requis" "500": description: Erreur interne du serveur security: - keycloak: [] /api/membres/stats: get: tags: - Membres summary: Obtenir les statistiques avancées des membres responses: "200": description: Statistiques complètes des membres /api/membres/{id}: get: tags: - Membres summary: Récupérer un membre par son ID parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Membre trouvé "404": description: Membre non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER put: tags: - Membres summary: Mettre à jour un membre existant parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateMembreRequest" responses: "200": description: Membre mis à jour avec succès "404": description: Membre non trouvé "400": description: Données invalides "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION delete: tags: - Membres summary: Désactiver un membre parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Membre désactivé avec succès "404": description: Membre non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN /api/membres/{id}/activer: put: tags: - Membres summary: Activer un membre description: Passe le membre en statut ACTIF et lui assigne le rôle MEMBRE_ACTIF dans Keycloak. parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Membre activé avec succès "404": description: Membre non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN /api/membres/{id}/affecter-organisation: put: tags: - Membres summary: Affecter un membre à une organisation description: Crée le lien MembreOrganisation (statut EN_ATTENTE_VALIDATION) si le membre n'est pas encore rattaché à une organisation. Idempotent. parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" responses: "200": description: Membre affecté à l'organisation "404": description: Membre ou organisation non trouvé "403": description: Accès réservé aux ADMIN / SUPER_ADMIN "401": description: Not Authorized security: - Keycloak: - ADMIN - SUPER_ADMIN /api/membres/{id}/promouvoir-admin-organisation: put: tags: - Membres summary: Promouvoir un membre en administrateur d'organisation description: Passe le membre en statut ACTIF et lui assigne le rôle ADMIN_ORGANISATION dans Keycloak. Réservé aux super administrateurs de la plateforme. Le compte est immédiatement opérationnel sans validation intermédiaire. parameters: - name: id in: path description: UUID du membre à promouvoir required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Membre promu administrateur d'organisation "404": description: Membre non trouvé "403": description: Accès réservé aux ADMIN / SUPER_ADMIN "401": description: Not Authorized security: - Keycloak: - ADMIN - SUPER_ADMIN /api/membres/{id}/reinitialiser-mot-de-passe: put: tags: - Membres summary: Réinitialiser le mot de passe d'un membre description: Génère un nouveau mot de passe temporaire et le définit dans Keycloak. Le nouveau mot de passe est retourné une seule fois dans la réponse. parameters: - name: id in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: "Mot de passe réinitialisé, retourné dans motDePasseTemporaire" "404": description: Membre non trouvé "400": description: Le membre n'a pas de compte Keycloak "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{id}/suivre: post: tags: - Membres summary: Suivre un membre (réseau) parameters: - name: id in: path description: UUID du membre à suivre required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Suivi activé "400": description: Requête invalide "404": description: Membre cible non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - CONSULTANT - SECRETAIRE - GESTIONNAIRE_RH delete: tags: - Membres summary: Ne plus suivre un membre (réseau) parameters: - name: id in: path description: UUID du membre à ne plus suivre required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Suivi désactivé "400": description: Requête invalide "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - MEMBRE - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - CONSULTANT - SECRETAIRE - GESTIONNAIRE_RH /api/membres/{membreId}/adhesion: get: tags: - Membres summary: Statut d'adhésion d'un membre dans une organisation parameters: - name: membreId in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" responses: "200": description: Statut d'adhésion "404": description: Aucun lien membre-organisation trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/membres/{membreId}/adhesion/activer: put: tags: - Membres summary: Activer l'adhésion par membreId + organisationId parameters: - name: membreId in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion activée "404": description: Lien membre-organisation introuvable "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreId}/adhesion/radier: put: tags: - Membres summary: Radier par membreId + organisationId parameters: - name: membreId in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion radiée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreId}/adhesion/suspendre: put: tags: - Membres summary: Suspendre l'adhésion par membreId + organisationId parameters: - name: membreId in: path description: UUID du membre required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion suspendue "404": description: Lien membre-organisation introuvable "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreId}/inviter-organisation: put: tags: - Membres summary: Inviter un membre dans une organisation description: Crée une invitation (statut INVITE) pour un membre existant. Token valable 7 jours. parameters: - name: membreId in: path description: UUID du membre à inviter required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" - name: roleOrg in: query description: Rôle proposé (optionnel) schema: type: string responses: "200": description: Invitation créée "404": description: Membre ou organisation introuvable "409": description: Membre déjà lié à cette organisation "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreOrgId}/activer-adhesion: put: tags: - Membres summary: Activer une adhésion description: "Transitions autorisées : EN_ATTENTE_VALIDATION, INVITE, SUSPENDU\ \ → ACTIF." parameters: - name: membreOrgId in: path description: UUID du lien membre-organisation required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion activée "404": description: Lien membre-organisation introuvable "409": description: Transition non autorisée depuis le statut actuel "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreOrgId}/archiver-adhesion: put: tags: - Membres summary: Archiver une adhésion description: Conserve l'historique sans supprimer le lien membre-organisation. parameters: - name: membreOrgId in: path description: UUID du lien membre-organisation required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion archivée "404": description: Lien membre-organisation introuvable "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreOrgId}/radier-adhesion: put: tags: - Membres summary: Radier un membre d'une organisation parameters: - name: membreOrgId in: path description: UUID du lien membre-organisation required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion radiée "404": description: Lien membre-organisation introuvable "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/membres/{membreOrgId}/suspendre-adhesion: put: tags: - Membres summary: Suspendre une adhésion description: "Transition autorisée : ACTIF → SUSPENDU." parameters: - name: membreOrgId in: path description: UUID du lien membre-organisation required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: Adhésion suspendue "404": description: Lien membre-organisation introuvable "409": description: Transition non autorisée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/messagerie/blocages: get: tags: - Messagerie responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE post: tags: - Messagerie requestBody: content: application/json: schema: $ref: "#/components/schemas/BloquerMembreRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/blocages/{membreId}: delete: tags: - Messagerie parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" - name: organisationId in: query schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations: get: tags: - Messagerie responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/directe: post: tags: - Messagerie requestBody: content: application/json: schema: $ref: "#/components/schemas/DemarrerConversationDirecteRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/role: post: tags: - Messagerie requestBody: content: application/json: schema: $ref: "#/components/schemas/DemarrerConversationRoleRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/{conversationId}/messages/{messageId}: delete: tags: - Messagerie parameters: - name: conversationId in: path required: true schema: $ref: "#/components/schemas/UUID" - name: messageId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/{id}: get: tags: - Messagerie parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE delete: tags: - Messagerie parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/{id}/lire: put: tags: - Messagerie parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/conversations/{id}/messages: get: tags: - Messagerie parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: page in: query schema: format: int32 default: 0 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE post: tags: - Messagerie parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/EnvoyerMessageRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/messagerie/politique/{organisationId}: get: tags: - Messagerie parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE put: tags: - Messagerie parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/MettreAJourPolitiqueRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION /api/monitoring/metrics: get: tags: - Logs & Monitoring summary: Récupérer les métriques système en temps réel responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemMetricsResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/notifications: post: tags: - Notifications requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateNotificationRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/notifications/en-attente-envoi: get: tags: - Notifications responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/groupees: post: tags: - Notifications requestBody: content: application/json: schema: $ref: "#/components/schemas/NotificationGroupeeRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/notifications/me: get: tags: - Notifications responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/me/non-lues: get: tags: - Notifications responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/membre/{membreId}: get: tags: - Notifications parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/membre/{membreId}/non-lues: get: tags: - Notifications parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/templates: post: tags: - Notifications requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateTemplateNotificationRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/notifications/{id}: get: tags: - Notifications parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/notifications/{id}/marquer-lue: post: tags: - Notifications parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MODERATEUR - MEMBRE - USER /api/organisations: get: tags: - Organisations summary: Lister les organisations description: Récupère la liste des organisations actives avec pagination parameters: - name: page in: query description: Numéro de page (commence à 0) schema: format: int32 default: 0 type: integer example: 0 - name: recherche in: query description: Terme de recherche (nom ou nom court) schema: type: string - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer example: 20 responses: "200": description: Liste des organisations récupérée avec succès content: application/json: schema: $ref: "#/components/schemas/PagedResponse" "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Organisations summary: Créer une nouvelle organisation description: Crée une nouvelle organisation dans le système requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateOrganisationRequest" responses: "201": description: Organisation créée avec succès content: application/json: schema: $ref: "#/components/schemas/OrganisationResponse" "400": description: Données invalides "409": description: Organisation déjà existante "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN /api/organisations/mes: get: tags: - Organisations summary: Mes organisations description: Liste les organisations auxquelles le membre connecté appartient (pour ADMIN_ORGANISATION) responses: "200": description: Liste des organisations du membre content: application/json: schema: type: array items: $ref: "#/components/schemas/OrganisationResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/organisations/recherche: get: tags: - Organisations summary: Recherche avancée description: Recherche d'organisations avec critères multiples parameters: - name: nom in: query description: Nom de l'organisation schema: type: string - name: page in: query description: Numéro de page schema: format: int32 default: 0 type: integer - name: pays in: query description: Pays schema: type: string - name: region in: query description: Région schema: type: string - name: size in: query description: Taille de la page schema: format: int32 default: 20 type: integer - name: statut in: query description: Statut schema: type: string - name: type in: query description: Type d'organisation schema: type: string - name: ville in: query description: Ville schema: type: string responses: "200": description: Résultats de recherche content: application/json: schema: type: array items: $ref: "#/components/schemas/OrganisationResponse" "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/organisations/statistiques: get: tags: - Organisations summary: Statistiques des organisations description: Récupère les statistiques globales des organisations responses: "200": description: Statistiques récupérées avec succès "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION /api/organisations/{id}: get: tags: - Organisations summary: Récupérer une organisation description: Récupère une organisation par son ID parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Organisation trouvée content: application/json: schema: $ref: "#/components/schemas/OrganisationResponse" "404": description: Organisation non trouvée "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER put: tags: - Organisations summary: Mettre à jour une organisation description: Met à jour les informations d'une organisation parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateOrganisationRequest" responses: "200": description: Organisation mise à jour avec succès content: application/json: schema: $ref: "#/components/schemas/OrganisationResponse" "400": description: Données invalides "404": description: Organisation non trouvée "409": description: Conflit de données "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION delete: tags: - Organisations summary: Supprimer une organisation description: Supprime une organisation (soft delete) parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Organisation supprimée avec succès "404": description: Organisation non trouvée "409": description: Impossible de supprimer l'organisation "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN /api/organisations/{id}/activer: post: tags: - Organisations summary: Activer une organisation description: Active une organisation suspendue parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Organisation activée avec succès "404": description: Organisation non trouvée "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN /api/organisations/{id}/membres/count: get: tags: - Organisations summary: Nombre de membres description: Retourne le nombre de membres actifs de l'organisation. parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/organisations/{id}/modules-actifs: get: tags: - Organisations summary: Modules actifs de l'organisation description: Retourne la liste des modules disponibles selon le type de l'organisation (Option C) parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des modules actifs "404": description: Organisation non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/organisations/{id}/suspendre: post: tags: - Organisations summary: Suspendre une organisation description: Suspend une organisation active parameters: - name: id in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Organisation suspendue avec succès "404": description: Organisation non trouvée "401": description: Non authentifié "403": description: Non autorisé security: - Keycloak: - SUPER_ADMIN - ADMIN /api/paiements: post: tags: - Paiements requestBody: content: application/json: schema: $ref: "#/components/schemas/CreatePaiementRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION /api/paiements/declarer-manuel: post: tags: - Paiements requestBody: content: application/json: schema: $ref: "#/components/schemas/DeclarerPaiementManuelRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/paiements/initier-paiement-en-ligne: post: tags: - Paiements requestBody: content: application/json: schema: $ref: "#/components/schemas/InitierPaiementEnLigneRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION - USER /api/paiements/membre/{membreId}: get: tags: - Paiements parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION /api/paiements/mon-historique: get: tags: - Paiements parameters: - name: limit in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/paiements/reference/{numeroReference}: get: tags: - Paiements parameters: - name: numeroReference in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/paiements/statut-intention/{intentionId}: get: tags: - Paiements parameters: - name: intentionId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION - USER /api/paiements/{id}: get: tags: - Paiements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/paiements/{id}/annuler: post: tags: - Paiements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/paiements/{id}/valider: post: tags: - Paiements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION /api/parametres-lcb-ft: get: tags: - Paramètres LCB-FT summary: Récupérer les paramètres LCB-FT description: Retourne les seuils anti-blanchiment pour une organisation ou la plateforme parameters: - name: codeDevise in: query description: Code devise (XOF par défaut) schema: default: XOF type: string - name: organisationId in: query description: ID de l'organisation (optionnel) schema: type: string responses: "200": description: Paramètres récupérés "404": description: Paramètres non configurés post: tags: - Paramètres LCB-FT summary: Créer ou mettre à jour les paramètres LCB-FT description: Admin uniquement - Configure les seuils pour une organisation ou la plateforme requestBody: content: application/json: schema: $ref: "#/components/schemas/ParametresLcbFtRequest" responses: "200": description: Paramètres sauvegardés "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN /api/parametres-lcb-ft/seuil-justification: get: tags: - Paramètres LCB-FT summary: Récupérer le seuil de justification uniquement description: Endpoint léger pour récupérer juste le montant seuil (utilisé par mobile) parameters: - name: codeDevise in: query schema: default: XOF type: string - name: organisationId in: query schema: type: string responses: "200": description: Seuil récupéré /api/preferences/{utilisateurId}: get: tags: - Préférences summary: Obtenir les préférences d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Préférences récupérées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - SUPER_ADMIN put: tags: - Préférences summary: Mettre à jour les préférences d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: boolean responses: "204": description: Préférences mises à jour avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - SUPER_ADMIN /api/preferences/{utilisateurId}/export: get: tags: - Préférences summary: Exporter les préférences d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Préférences exportées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - SUPER_ADMIN /api/preferences/{utilisateurId}/reinitialiser: post: tags: - Préférences summary: Réinitialiser les préférences d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Préférences réinitialisées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - SUPER_ADMIN /api/propositions-aide: get: tags: - Propositions d'aide summary: Liste les propositions d'aide avec pagination parameters: - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/PropositionAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Propositions d'aide summary: Crée une nouvelle proposition d'aide requestBody: content: application/json: schema: $ref: "#/components/schemas/CreatePropositionAideRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/propositions-aide/meilleures: get: tags: - Propositions d'aide summary: Récupère les meilleures propositions parameters: - name: limite in: query schema: format: int32 default: 5 type: integer responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/PropositionAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/propositions-aide/{id}: get: tags: - Propositions d'aide summary: Récupère une proposition d'aide par son ID parameters: - name: id in: path required: true schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/PropositionAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER put: tags: - Propositions d'aide summary: Met à jour une proposition d'aide parameters: - name: id in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdatePropositionAideRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/PropositionAideResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/references/types-organisation: get: tags: - Type Organisation Reference Resource parameters: - name: onlyActifs in: query schema: default: true type: boolean responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER post: tags: - Type Organisation Reference Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateTypeReferenceRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/references/types-organisation/{id}: put: tags: - Type Organisation Reference Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateTypeReferenceRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN delete: tags: - Type Organisation Reference Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/roles: get: tags: - Rôles summary: Liste tous les rôles actifs responses: "200": description: OK content: application/json: schema: type: array items: $ref: "#/components/schemas/RoleResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/souscriptions/admin/en-attente: get: tags: - Souscription Resource responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/souscriptions/admin/organisation/{organisationId}/active: get: tags: - Souscription Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/souscriptions/admin/toutes: get: tags: - Souscription Resource parameters: - name: organisationId in: query schema: $ref: "#/components/schemas/UUID" - name: page in: query schema: format: int32 default: 0 type: integer - name: size in: query schema: format: int32 default: 1000 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/souscriptions/admin/{id}/approuver: post: tags: - Souscription Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/souscriptions/admin/{id}/rejeter: post: tags: - Souscription Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/souscriptions/confirmer-paiement: post: tags: - Souscription Resource parameters: - name: id in: query schema: $ref: "#/components/schemas/UUID" - name: wave_id in: query schema: type: string responses: "200": description: OK /api/souscriptions/demande: post: tags: - Souscription Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/SouscriptionDemandeRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/souscriptions/formules: get: tags: - Souscription Resource responses: "200": description: OK /api/souscriptions/ma-souscription: get: tags: - Souscription Resource responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/souscriptions/{id}/initier-paiement: post: tags: - Souscription Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: [] /api/status: get: tags: - Status summary: Vérifier le statut du serveur responses: "200": description: OK /api/suggestions: get: tags: - Suggestions summary: Lister toutes les suggestions responses: "200": description: Liste des suggestions récupérée avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE post: tags: - Suggestions summary: Créer une nouvelle suggestion requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateSuggestionRequest" responses: "201": description: Suggestion créée avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/suggestions/statistiques: get: tags: - Suggestions summary: Obtenir les statistiques des suggestions responses: "200": description: Statistiques récupérées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/suggestions/{id}/voter: post: tags: - Suggestions summary: Voter pour une suggestion parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: utilisateurId in: query schema: $ref: "#/components/schemas/UUID" responses: "200": description: Vote enregistré avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/system/audit/report: get: tags: - Système summary: Générer un rapport d'audit responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/system/auth/logout-all: post: tags: - Système summary: Forcer la déconnexion de tous les utilisateurs responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/system/backup/create: post: tags: - Système summary: Créer une sauvegarde du système responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/cache/clear: post: tags: - Système summary: Vider le cache système responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/cache/stats: get: tags: - Système summary: Récupérer les statistiques du cache système responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/CacheStatsResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/system/config: get: tags: - Système summary: Récupérer la configuration système description: Retourne la configuration système complète responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR put: tags: - Système summary: Mettre à jour la configuration système requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateSystemConfigRequest" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemConfigResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/data/purge: post: tags: - Système summary: Purger les données expirées (RGPD) responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/system/database/optimize: post: tags: - Système summary: Optimiser la base de données (VACUUM ANALYZE) responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/gdpr/export: post: tags: - Système summary: Initier un export RGPD des données utilisateurs responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/system/logs/cleanup: post: tags: - Système summary: Nettoyer les anciens logs selon la politique de rétention responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/logs/export: get: tags: - Système summary: Exporter les logs des dernières 24h responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/maintenance/emergency: post: tags: - Système summary: Activer le mode maintenance d'urgence responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/system/maintenance/schedule: post: tags: - Système summary: Planifier une maintenance parameters: - name: reason in: query schema: type: string - name: scheduledAt in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/metrics: get: tags: - Système summary: Récupérer les métriques système en temps réel description: "Retourne toutes les métriques système (CPU, RAM, disque, utilisateurs\ \ actifs, etc.)" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemMetricsResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MODERATEUR /api/system/performance/analyze: post: tags: - Système summary: Analyser les performances du système responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/reports/usage: get: tags: - Système summary: Générer un rapport d'utilisation du système responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/sessions/cleanup: post: tags: - Système summary: Nettoyer les sessions expirées responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/test/database: post: tags: - Système summary: Tester la connexion à la base de données responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemTestResultResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/test/email: post: tags: - Système summary: Tester la configuration email responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/SystemTestResultResponse" "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/system/updates/check: get: tags: - Système summary: Vérifier les mises à jour disponibles responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/tickets: post: tags: - Tickets summary: Créer un nouveau ticket requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateTicketRequest" responses: "201": description: Ticket créé avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/tickets/utilisateur/{utilisateurId}: get: tags: - Tickets summary: Lister les tickets d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des tickets récupérée avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/tickets/utilisateur/{utilisateurId}/statistiques: get: tags: - Tickets summary: Obtenir les statistiques des tickets d'un utilisateur parameters: - name: utilisateurId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Statistiques récupérées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/tickets/{id}: get: tags: - Tickets summary: Récupérer un ticket par ID parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Ticket trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - USER - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/agricole/campagnes: post: tags: - Campagne Agricole Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/CampagneAgricoleDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - COOP_RESP /api/v1/agricole/campagnes/cooperative/{organisationId}: get: tags: - Campagne Agricole Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - COOP_RESP /api/v1/agricole/campagnes/{id}: get: tags: - Campagne Agricole Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - COOP_RESP - MEMBRE - USER /api/v1/analytics/dashboard/widgets: get: tags: - Analytics summary: Obtenir les widgets du tableau de bord description: Récupère tous les widgets configurés pour le tableau de bord de l'utilisateur parameters: - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: utilisateurId in: query description: ID de l'utilisateur required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Widgets récupérés avec succès "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/evolutions: get: tags: - Analytics summary: Obtenir les évolutions des KPI description: Récupère les évolutions des KPI par rapport à la période précédente parameters: - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: periode in: query description: Période d'analyse required: true schema: $ref: "#/components/schemas/PeriodeAnalyse" responses: "200": description: Évolutions récupérées avec succès "400": description: Paramètres invalides "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/kpis: get: tags: - Analytics summary: Obtenir tous les KPI description: Récupère tous les KPI calculés pour une organisation et période données parameters: - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: periode in: query description: Période d'analyse required: true schema: $ref: "#/components/schemas/PeriodeAnalyse" responses: "200": description: KPI récupérés avec succès "400": description: Paramètres invalides "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/metriques/{typeMetrique}: get: tags: - Analytics summary: Calculer une métrique analytics description: Calcule une métrique spécifique pour une période et organisation données parameters: - name: typeMetrique in: path description: Type de métrique à calculer required: true schema: $ref: "#/components/schemas/TypeMetrique" - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: periode in: query description: Période d'analyse required: true schema: $ref: "#/components/schemas/PeriodeAnalyse" responses: "200": description: Métrique calculée avec succès "400": description: Paramètres invalides "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/performance-globale: get: tags: - Analytics summary: Calculer la performance globale description: Calcule le score de performance globale de l'organisation parameters: - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: periode in: query description: Période d'analyse required: true schema: $ref: "#/components/schemas/PeriodeAnalyse" responses: "200": description: Performance globale calculée avec succès "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - SUPER_ADMIN /api/v1/analytics/periodes-analyse: get: tags: - Analytics summary: Obtenir les périodes d'analyse disponibles description: Récupère la liste de toutes les périodes d'analyse disponibles responses: "200": description: Périodes d'analyse récupérées avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/tendances/{typeMetrique}: get: tags: - Analytics summary: Calculer la tendance d'un KPI description: Calcule l'évolution et les tendances d'un KPI sur une période donnée parameters: - name: typeMetrique in: path description: Type de métrique pour la tendance required: true schema: $ref: "#/components/schemas/TypeMetrique" - name: organisationId in: query description: ID de l'organisation (optionnel) schema: $ref: "#/components/schemas/UUID" - name: periode in: query description: Période d'analyse required: true schema: $ref: "#/components/schemas/PeriodeAnalyse" responses: "200": description: Tendance calculée avec succès "400": description: Paramètres invalides "403": description: Accès non autorisé "401": description: Not Authorized security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/analytics/types-metriques: get: tags: - Analytics summary: Obtenir les types de métriques disponibles description: Récupère la liste de tous les types de métriques disponibles responses: "200": description: Types de métriques récupérés avec succès "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/v1/collectefonds/campagnes/organisation/{organisationId}: get: tags: - Campagne Collecte Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/v1/collectefonds/campagnes/{id}: get: tags: - Campagne Collecte Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/collectefonds/campagnes/{id}/contribuer: post: tags: - Campagne Collecte Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/ContributionCollecteDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - USER /api/v1/culte/dons: post: tags: - Don Religieux Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/DonReligieuxDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/culte/dons/organisation/{organisationId}: get: tags: - Don Religieux Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - CULTE_RESP /api/v1/culte/dons/{id}: get: tags: - Don Religieux Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - CULTE_RESP - MEMBRE - USER /api/v1/dashboard/activities: get: tags: - Dashboard summary: Récupérer les activités récentes description: Retourne la liste des activités récentes avec pagination parameters: - name: limit in: query description: Nombre maximum d'activités à retourner required: false schema: format: int32 default: 10 type: integer - name: organizationId in: query description: ID de l'organisation required: true schema: type: string - name: userId in: query description: ID de l'utilisateur required: true schema: type: string responses: "200": description: Activités récupérées avec succès "400": description: Paramètres invalides "500": description: Erreur serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/dashboard/data: get: tags: - Dashboard summary: Récupérer toutes les données du dashboard description: "Retourne les statistiques, activités récentes et événements à\ \ venir" parameters: - name: organizationId in: query description: ID de l'organisation required: true schema: type: string - name: userId in: query description: ID de l'utilisateur required: true schema: type: string responses: "200": description: Données récupérées avec succès "400": description: Paramètres invalides "500": description: Erreur serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/dashboard/events/upcoming: get: tags: - Dashboard summary: Récupérer les événements à venir description: Retourne la liste des événements à venir avec pagination parameters: - name: limit in: query description: Nombre maximum d'événements à retourner required: false schema: format: int32 default: 5 type: integer - name: organizationId in: query description: ID de l'organisation required: true schema: type: string - name: userId in: query description: ID de l'utilisateur required: true schema: type: string responses: "200": description: Événements récupérés avec succès "400": description: Paramètres invalides "500": description: Erreur serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/dashboard/health: get: tags: - Dashboard summary: Vérifier la santé du service dashboard description: Retourne le statut de santé du service dashboard responses: "200": description: Service en bonne santé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/dashboard/refresh: post: tags: - Dashboard summary: Rafraîchir les données du dashboard description: Force la mise à jour des données du dashboard parameters: - name: organizationId in: query description: ID de l'organisation required: true schema: type: string - name: userId in: query description: ID de l'utilisateur required: true schema: type: string responses: "200": description: Données rafraîchies avec succès "400": description: Paramètres invalides "500": description: Erreur serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/dashboard/stats: get: tags: - Dashboard summary: Récupérer les statistiques du dashboard description: Retourne uniquement les statistiques principales parameters: - name: organizationId in: query description: ID de l'organisation required: true schema: type: string - name: userId in: query description: ID de l'utilisateur required: true schema: type: string responses: "200": description: Statistiques récupérées avec succès "400": description: Paramètres invalides "500": description: Erreur serveur "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER - SUPER_ADMIN /api/v1/epargne/comptes: post: tags: - Compte Epargne Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/CompteEpargneRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/epargne/comptes/membre/{membreId}: get: tags: - Compte Epargne Resource parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/epargne/comptes/mes-comptes: get: tags: - Compte Epargne Resource responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/epargne/comptes/organisation/{organisationId}: get: tags: - Compte Epargne Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/epargne/comptes/{id}: get: tags: - Compte Epargne Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/epargne/comptes/{id}/statut: patch: tags: - Compte Epargne Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: $ref: "#/components/schemas/StatutCompteEpargne" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/epargne/transactions: post: tags: - Transaction Epargne Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionEpargneRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/epargne/transactions/compte/{compteId}: get: tags: - Transaction Epargne Resource parameters: - name: compteId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/epargne/transactions/transfert: post: tags: - Transaction Epargne Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionEpargneRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/gouvernance/organigramme: post: tags: - Echelon Organigramme Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/EchelonOrganigrammeDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION /api/v1/gouvernance/organigramme/organisation/{organisationId}: get: tags: - Echelon Organigramme Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/gouvernance/organigramme/{id}: get: tags: - Echelon Organigramme Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/mutuelle/credits: post: tags: - Demande Credit Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/DemandeCreditRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - USER /api/v1/mutuelle/credits/membre/{membreId}: get: tags: - Demande Credit Resource parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/mutuelle/credits/{id}: get: tags: - Demande Credit Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP - MEMBRE - USER /api/v1/mutuelle/credits/{id}/approbation: post: tags: - Demande Credit Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: duree in: query schema: format: int32 type: integer - name: montant in: query schema: type: number - name: notes in: query schema: type: string - name: taux in: query schema: type: number responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/mutuelle/credits/{id}/decaissement: post: tags: - Demande Credit Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: datePremiereEcheance in: query schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/mutuelle/credits/{id}/statut: patch: tags: - Demande Credit Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: notes in: query schema: type: string - name: statut in: query schema: $ref: "#/components/schemas/StatutDemandeCredit" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MUTUELLE_RESP /api/v1/ong/projets: post: tags: - Projet Ong Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/ProjetOngDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - ONG_RESP /api/v1/ong/projets/ong/{organisationId}: get: tags: - Projet Ong Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - ONG_RESP /api/v1/ong/projets/{id}: get: tags: - Projet Ong Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/ong/projets/{id}/statut: patch: tags: - Projet Ong Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: $ref: "#/components/schemas/StatutProjetOng" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - ONG_RESP /api/v1/registre/agrements: post: tags: - Agrement Professionnel Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/AgrementProfessionnelDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - REGISTRE_RESP /api/v1/registre/agrements/membre/{membreId}: get: tags: - Agrement Professionnel Resource parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/registre/agrements/organisation/{organisationId}: get: tags: - Agrement Professionnel Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - REGISTRE_RESP /api/v1/registre/agrements/{id}: get: tags: - Agrement Professionnel Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/v1/tontines: post: tags: - Tontine Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/TontineRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TONTINE_RESP /api/v1/tontines/organisation/{organisationId}: get: tags: - Tontine Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TONTINE_RESP /api/v1/tontines/{id}: get: tags: - Tontine Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TONTINE_RESP - MEMBRE - USER /api/v1/tontines/{id}/statut: patch: tags: - Tontine Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: $ref: "#/components/schemas/StatutTontine" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - TONTINE_RESP /api/v1/types-reference: get: tags: - Types de référence summary: Lister par domaine description: Récupère les valeurs actives d'un domaine donné parameters: - name: domaine in: query description: Domaine fonctionnel required: true schema: type: string example: STATUT_ORGANISATION - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" example: 550e8400-e29b-41d4-a716-446655440000 responses: "200": description: Liste récupérée content: application/json: schema: $ref: "#/components/schemas/TypeReferenceResponse" "401": description: Non authentifié "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MEMBRE - USER post: tags: - Types de référence summary: Créer une référence description: Ajoute une nouvelle valeur dans un domaine requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateTypeReferenceRequest" responses: "201": description: Référence créée "400": description: Données invalides ou code dupliqué "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN /api/v1/types-reference/defaut: get: tags: - Types de référence summary: Valeur par défaut description: Récupère la valeur par défaut d'un domaine parameters: - name: domaine in: query description: Domaine fonctionnel required: true schema: type: string - name: organisationId in: query description: UUID de l'organisation schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MEMBRE - USER /api/v1/types-reference/domaines: get: tags: - Types de référence summary: Lister les domaines description: Récupère la liste des domaines disponibles responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MEMBRE - USER /api/v1/types-reference/{id}: get: tags: - Types de référence summary: Détail d'une référence description: Récupère une référence par son identifiant parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Référence trouvée "404": description: Référence non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN - MEMBRE - USER put: tags: - Types de référence summary: Modifier une référence description: Met à jour une valeur existante parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateTypeReferenceRequest" responses: "200": description: Référence modifiée "400": description: Données invalides "404": description: Référence non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN - ADMIN delete: tags: - Types de référence summary: Supprimer une référence description: Supprime une valeur non système parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "204": description: Référence supprimée "400": description: Valeur système non supprimable "404": description: Référence non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - SUPER_ADMIN /api/v1/vote/campagnes: post: tags: - Campagne Vote Resource requestBody: content: application/json: schema: $ref: "#/components/schemas/CampagneVoteRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - VOTE_RESP /api/v1/vote/campagnes/organisation/{organisationId}: get: tags: - Campagne Vote Resource parameters: - name: organisationId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - VOTE_RESP /api/v1/vote/campagnes/{id}: get: tags: - Campagne Vote Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - VOTE_RESP - MEMBRE - USER /api/v1/vote/campagnes/{id}/candidats: post: tags: - Campagne Vote Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/CandidatDTO" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - VOTE_RESP /api/v1/vote/campagnes/{id}/statut: patch: tags: - Campagne Vote Resource parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" - name: statut in: query schema: $ref: "#/components/schemas/StatutVote" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - SUPER_ADMIN - ADMIN_ORGANISATION - VOTE_RESP /api/versements/declarer-manuel: post: tags: - Versements requestBody: content: application/json: schema: $ref: "#/components/schemas/DeclarerVersementManuelRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/versements/initier-depot-epargne: post: tags: - Versements requestBody: content: application/json: schema: $ref: "#/components/schemas/InitierDepotEpargneRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - MEMBRE_ACTIF - ADMIN - ADMIN_ORGANISATION - USER /api/versements/initier-wave: post: tags: - Versements requestBody: content: application/json: schema: $ref: "#/components/schemas/InitierVersementWaveRequest" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - MEMBRE_ACTIF - ADMIN - ADMIN_ORGANISATION - USER /api/versements/membre/{membreId}: get: tags: - Versements parameters: - name: membreId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/versements/mes-versements: get: tags: - Versements parameters: - name: limit in: query schema: format: int32 default: 20 type: integer responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - ADMIN - ADMIN_ORGANISATION /api/versements/reference/{numeroReference}: get: tags: - Versements parameters: - name: numeroReference in: path required: true schema: type: string responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/versements/statut/{intentionId}: get: tags: - Versements parameters: - name: intentionId in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - MEMBRE - MEMBRE_ACTIF - ADMIN - ADMIN_ORGANISATION - USER /api/versements/{id}: get: tags: - Versements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/versements/{id}/annuler: post: tags: - Versements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/versements/{id}/valider: post: tags: - Versements parameters: - name: id in: path required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: OK "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION /api/wave-redirect/error: get: tags: - Wave Redirect Resource parameters: - name: ref in: query schema: type: string responses: "200": description: OK /api/wave-redirect/mock-complete: get: tags: - Wave Redirect Resource parameters: - name: ref in: query schema: type: string responses: "200": description: OK /api/wave-redirect/success: get: tags: - Wave Redirect Resource parameters: - name: ref in: query schema: type: string responses: "200": description: OK /api/wave-redirect/web-success: get: tags: - Wave Redirect Resource parameters: - name: ref in: query schema: type: string responses: "200": description: OK /api/wave/comptes: post: tags: - Wave Mobile Money summary: Créer un compte Wave description: Crée un nouveau compte Wave pour un membre ou une organisation requestBody: content: application/json: schema: $ref: "#/components/schemas/CompteWaveDTO" responses: "201": description: Compte Wave créé avec succès "400": description: Données invalides "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/wave/comptes/organisation/{organisationId}: get: tags: - Wave Mobile Money summary: Lister les comptes Wave d'une organisation description: Retourne tous les comptes Wave associés à une organisation parameters: - name: organisationId in: path description: UUID de l'organisation required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Liste des comptes Wave "400": description: Erreur lors de la récupération "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/wave/comptes/telephone/{numeroTelephone}: get: tags: - Wave Mobile Money summary: Trouver un compte Wave par téléphone description: Recherche un compte Wave par numéro de téléphone parameters: - name: numeroTelephone in: path description: Numéro de téléphone associé au compte Wave required: true schema: type: string responses: "200": description: Compte Wave trouvé "404": description: Compte Wave non trouvé pour ce numéro "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/wave/comptes/{id}: get: tags: - Wave Mobile Money summary: Trouver un compte Wave par ID description: Recherche un compte Wave par son identifiant unique parameters: - name: id in: path description: UUID du compte Wave required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Compte Wave trouvé "404": description: Compte Wave non trouvé "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER put: tags: - Wave Mobile Money summary: Mettre à jour un compte Wave description: Met à jour les informations d'un compte Wave existant parameters: - name: id in: path description: UUID du compte Wave required: true schema: $ref: "#/components/schemas/UUID" requestBody: content: application/json: schema: $ref: "#/components/schemas/CompteWaveDTO" responses: "200": description: Compte Wave mis à jour "404": description: Compte Wave non trouvé "400": description: Données invalides "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/wave/comptes/{id}/verifier: post: tags: - Wave Mobile Money summary: Vérifier un compte Wave description: Vérifie la validité d'un compte Wave parameters: - name: id in: path description: UUID du compte Wave required: true schema: $ref: "#/components/schemas/UUID" responses: "200": description: Compte Wave vérifié "404": description: Compte Wave non trouvé "400": description: Erreur de vérification "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/wave/transactions: post: tags: - Wave Mobile Money summary: Créer une transaction Wave description: Initie une nouvelle transaction de paiement Wave requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionWaveDTO" responses: "201": description: Transaction Wave créée "400": description: Données invalides ou erreur de traitement "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /api/wave/transactions/{waveTransactionId}: get: tags: - Wave Mobile Money summary: Trouver une transaction Wave description: Recherche une transaction Wave par son identifiant Wave parameters: - name: waveTransactionId in: path description: Identifiant Wave de la transaction required: true schema: type: string responses: "200": description: Transaction trouvée "404": description: Transaction non trouvée "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE - USER /api/wave/transactions/{waveTransactionId}/statut: put: tags: - Wave Mobile Money summary: Mettre à jour le statut d'une transaction description: "Met à jour le statut d'une transaction Wave (ex: COMPLETED, FAILED)" parameters: - name: waveTransactionId in: path description: Identifiant Wave de la transaction required: true schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/StatutTransactionWave" responses: "200": description: Statut mis à jour "404": description: Transaction non trouvée "400": description: Erreur de mise à jour "401": description: Not Authorized "403": description: Not Allowed security: - Keycloak: - ADMIN - ADMIN_ORGANISATION - MEMBRE /auth/callback: get: tags: - Auth Callback Resource parameters: - name: code in: query schema: type: string - name: error in: query schema: type: string - name: error_description in: query schema: type: string - name: session_state in: query schema: type: string - name: state in: query schema: type: string responses: "200": description: OK components: schemas: AdhesionResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean numeroReference: type: string membreId: $ref: "#/components/schemas/UUID" numeroMembre: type: string nomMembre: type: string emailMembre: type: string organisationId: $ref: "#/components/schemas/UUID" nomOrganisation: type: string dateDemande: $ref: "#/components/schemas/LocalDate" fraisAdhesion: type: number montantPaye: type: number codeDevise: type: string statut: type: string dateApprobation: $ref: "#/components/schemas/LocalDate" datePaiement: $ref: "#/components/schemas/LocalDateTime" methodePaiement: type: string referencePaiement: type: string motifRejet: type: string observations: type: string approuvePar: type: string dateValidation: $ref: "#/components/schemas/LocalDate" payeeIntegralement: type: boolean enAttentePaiement: type: boolean montantRestant: type: number pourcentagePaiement: format: int32 type: integer joursDepuisDemande: format: int64 type: integer statutLibelle: type: string statutSeverity: type: string statutIcon: type: string methodePaiementLibelle: type: string dateDemandeFormatee: type: string dateApprobationFormatee: type: string datePaiementFormatee: type: string fraisAdhesionFormatte: type: string montantPayeFormatte: type: string montantRestantFormatte: type: string AgrementProfessionnelDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean membreId: type: string organisationId: type: string secteurOuOrdre: type: string numeroLicenceOuRegistre: type: string categorieClassement: type: string dateDelivrance: $ref: "#/components/schemas/LocalDate" dateExpiration: $ref: "#/components/schemas/LocalDate" statut: $ref: "#/components/schemas/StatutAgrement" AlertConfigResponse: type: object properties: cpuHighAlertEnabled: type: boolean cpuThresholdPercent: format: int32 type: integer cpuDurationMinutes: format: int32 type: integer memoryLowAlertEnabled: type: boolean memoryThresholdPercent: format: int32 type: integer criticalErrorAlertEnabled: type: boolean errorAlertEnabled: type: boolean connectionFailureAlertEnabled: type: boolean connectionFailureThreshold: format: int32 type: integer connectionFailureWindowMinutes: format: int32 type: integer emailNotificationsEnabled: type: boolean pushNotificationsEnabled: type: boolean smsNotificationsEnabled: type: boolean alertEmailRecipients: type: string totalAlertsLast24h: format: int32 type: integer activeAlerts: format: int32 type: integer acknowledgedAlerts: format: int32 type: integer acknowledgedPercentage: format: double type: number configValid: type: boolean ApiErrorDTO: description: Réponse d'erreur standard type: object properties: message: description: Message d'erreur type: string ApproveTransactionRequest: type: object properties: comment: maxLength: 1000 type: string AssocierOrganisationRequest: required: - email - organisationId type: object properties: email: pattern: \S type: string organisationId: $ref: "#/components/schemas/UUID" AuditLogDTO: description: Entrée d'audit des actions utilisateur type: object properties: id: description: Identifiant unique (UUID Keycloak) type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 dateCreation: description: Date de création type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateModification: description: Date de dernière modification type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T14:20:00 creeParUsername: description: Utilisateur ayant créé l'entité type: string example: admin@lions.dev modifieParUsername: description: Utilisateur ayant modifié l'entité type: string example: superadmin@lions.dev version: format: int64 description: Numéro de version pour gestion optimiste type: integer example: 1 acteurUserId: description: ID de l'utilisateur qui a effectué l'action type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 acteurUsername: description: Username de l'utilisateur qui a effectué l'action type: string example: admin@lions.dev acteurNomComplet: description: Nom complet de l'acteur type: string example: Admin Principal acteurRoles: description: Rôles de l'acteur au moment de l'action type: string dateAction: description: Date et heure de l'action type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 typeAction: description: Type d'action effectuée type: string allOf: - $ref: "#/components/schemas/TypeActionAudit" example: USER_CREATE ressourceType: description: Type de ressource affectée type: string example: USER ressourceId: description: ID de la ressource affectée type: string example: a1b2c3d4-e5f6-7890-1234-567890abcdef ressourceName: description: Nom/Identifiant de la ressource type: string example: jdupont realmName: description: Nom du Realm type: string example: btpxpress ipAddress: description: Adresse IP de l'acteur type: string example: 192.168.1.100 userAgent: description: User-Agent du client type: string example: Mozilla/5.0... geolocation: description: Localisation géographique type: string example: "Abidjan, Côte d'Ivoire" apiEndpoint: description: Endpoint API appelé type: string example: /api/users/create httpMethod: description: Méthode HTTP type: string example: POST description: description: Description de l'action type: string example: Création d'un nouvel utilisateur detailsJson: description: Détails de l'action au format JSON type: string oldValue: description: Ancienne valeur (avant modification) type: string newValue: description: Nouvelle valeur (après modification) type: string diff: description: Différences entre ancienne et nouvelle valeur type: string success: description: Succès de l'opération type: boolean example: true errorCode: description: Code d'erreur (si échec) type: string example: USER_ALREADY_EXISTS errorMessage: description: Message d'erreur (si échec) type: string stackTrace: description: Trace d'erreur complète (si échec) type: string executionTimeMs: format: int64 description: Durée d'exécution en millisecondes type: integer example: 145 sessionId: description: ID de session/transaction type: string example: sess_abc123 correlationId: description: ID de corrélation (pour tracer requêtes liées) type: string example: corr_xyz789 raison: description: Raison de l'action type: string example: Demande du manager commentaires: description: Commentaires administratifs type: string example: Promotion suite à évaluation annuelle metadata: description: Métadonnées supplémentaires type: object additionalProperties: type: string critique: description: Indique si l'action est critique type: boolean example: false requiresAlert: description: Indique si l'action nécessite une alerte type: boolean example: false notified: description: Indique si l'action a été notifiée type: boolean example: true successful: type: boolean failed: type: boolean summary: type: string AuthorizedRealmsDTO: description: Liste des realms autorisés pour un utilisateur type: object properties: realms: description: Liste des realms (peut être vide si super admin) type: array items: type: string isSuperAdmin: description: L'utilisateur est super admin type: boolean superAdmin: type: boolean BackupConfigResponse: type: object properties: autoBackupEnabled: type: boolean frequency: type: string retention: type: string retentionDays: format: int32 type: integer backupTime: type: string includeDatabase: type: boolean includeFiles: type: boolean includeConfiguration: type: boolean lastBackup: $ref: "#/components/schemas/LocalDateTime" nextScheduledBackup: $ref: "#/components/schemas/LocalDateTime" totalBackups: format: int32 type: integer totalSizeBytes: format: int64 type: integer totalSizeFormatted: type: string BackupResponse: type: object properties: id: $ref: "#/components/schemas/UUID" name: type: string description: type: string type: type: string sizeBytes: format: int64 type: integer sizeFormatted: type: string status: type: string createdAt: $ref: "#/components/schemas/LocalDateTime" completedAt: $ref: "#/components/schemas/LocalDateTime" createdBy: type: string includesDatabase: type: boolean includesFiles: type: boolean includesConfiguration: type: boolean filePath: type: string errorMessage: type: string BaseDTO: description: DTO de base contenant les attributs communs à tous les objets type: object properties: id: description: Identifiant unique (UUID Keycloak) type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 dateCreation: description: Date de création type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateModification: description: Date de dernière modification type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T14:20:00 creeParUsername: description: Utilisateur ayant créé l'entité type: string example: admin@lions.dev modifieParUsername: description: Utilisateur ayant modifié l'entité type: string example: superadmin@lions.dev version: format: int64 description: Numéro de version pour gestion optimiste type: integer example: 1 BeneficiaireAideDTO: required: - nomComplet - relationDemandeur type: object properties: id: type: string nomComplet: maxLength: 100 pattern: \S type: string relationDemandeur: pattern: \S type: string dateNaissance: $ref: "#/components/schemas/LocalDate" age: format: int32 type: integer genre: type: string telephone: pattern: "^\\+?[0-9]{8,15}$" type: string email: type: string adresse: maxLength: 200 type: string situationParticuliere: maxLength: 500 type: string estDemandeurPrincipal: type: boolean pourcentageAide: format: double maximum: 100 minimum: 0 type: number montantSpecifique: format: double minimum: 0 type: number BloquerMembreRequest: required: - membreABloquerId - organisationId type: object properties: membreABloquerId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" CacheEntry: type: object properties: name: type: string sizeBytes: format: int64 type: integer entries: format: int32 type: integer hitRate: format: double type: number hits: format: int64 type: integer misses: format: int64 type: integer lastAccessed: $ref: "#/components/schemas/LocalDateTime" CacheStatsResponse: type: object properties: totalSizeBytes: format: int64 type: integer totalSizeFormatted: type: string totalEntries: format: int32 type: integer hitRate: format: double type: number hits: format: int64 type: integer misses: format: int64 type: integer lastCleared: $ref: "#/components/schemas/LocalDateTime" caches: type: object additionalProperties: $ref: "#/components/schemas/CacheEntry" CampagneAgricoleDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean organisationCoopId: type: string designation: type: string typeCulturePrincipale: type: string surfaceTotaleEstimeeHectares: type: number volumePrevisionnelTonnes: type: number volumeReelTonnes: type: number statut: $ref: "#/components/schemas/StatutCampagneAgricole" CampagneCollecteResponse: description: Campagne de levée de fonds (Crowdfunding / ONG) type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean organisationId: type: string titre: type: string courteDescription: type: string htmlDescriptionComplete: type: string imageBanniereUrl: type: string objectifFinancier: description: Objectif monétaire escompté type: number montantCollecteActuel: description: Somme totale déjà récoltée sur cette campagne type: number nombreDonateurs: format: int32 type: integer statut: $ref: "#/components/schemas/StatutCampagneCollecte" dateOuverture: $ref: "#/components/schemas/LocalDateTime" dateCloturePrevue: $ref: "#/components/schemas/LocalDateTime" estPublique: type: boolean CampagneVoteRequest: description: Requête de création d'une campagne de vote électronique required: - titre - organisationId - typeVote - modeScrutin - dateOuverture - dateFermeture type: object properties: titre: pattern: \S type: string descriptionOuResolution: type: string organisationId: pattern: \S type: string typeVote: $ref: "#/components/schemas/TypeVote" modeScrutin: $ref: "#/components/schemas/ModeScrutin" dateOuverture: $ref: "#/components/schemas/LocalDateTime" dateFermeture: $ref: "#/components/schemas/LocalDateTime" restreindreMembresAJour: description: Restreindre le vote aux membres à jour de cotisations (Optionnel) type: boolean autoriserVoteBlanc: description: Permettre le vote blanc (Optionnel) type: boolean CandidatDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean campagneVoteId: type: string nomCandidatureOuChoix: type: string membreIdAssocie: type: string professionDeFoi: type: string photoUrl: type: string nombreDeVoix: format: int32 type: integer pourcentageObtenu: type: number CommentaireAideResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean contenu: type: string typeCommentaire: type: string auteurId: $ref: "#/components/schemas/UUID" auteurNom: type: string auteurRole: type: string estPrive: type: boolean estImportant: type: boolean commentaireParentId: $ref: "#/components/schemas/UUID" reponses: type: array items: $ref: "#/components/schemas/CommentaireAideResponse" piecesJointes: type: array items: $ref: "#/components/schemas/PieceJustificativeDTO" mentionsUtilisateurs: type: array items: type: string estModifie: type: boolean nombreReactions: format: int32 type: integer estResolu: type: boolean dateResolution: $ref: "#/components/schemas/LocalDateTime" resoluteurId: $ref: "#/components/schemas/UUID" CompteEpargneRequest: description: Requête d'ouverture d'un compte d'épargne required: - membreId - organisationId - typeCompte type: object properties: membreId: description: ID UUID du Membre détenteur pattern: \S type: string organisationId: description: ID UUID de l'Organisation / Mutuelle pattern: \S type: string typeCompte: description: Le type du compte d'épargne demandé type: string allOf: - $ref: "#/components/schemas/TypeCompteEpargne" notesOuverture: description: Notes ou détails éventuels lors de l'ouverture type: string CompteEpargneResponse: description: Réponse des informations d'un compte épargne type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean membreId: type: string organisationId: type: string numeroCompte: description: "Numéro de compte généré de manière unique (ex: MEC-00123)" type: string typeCompte: $ref: "#/components/schemas/TypeCompteEpargne" soldeActuel: description: Solde principal disponible type: number soldeBloque: description: Fonds gelés pour garantie de crédits type: number statut: $ref: "#/components/schemas/StatutCompteEpargne" dateOuverture: $ref: "#/components/schemas/LocalDate" dateDerniereTransaction: $ref: "#/components/schemas/LocalDate" description: type: string CompteWaveDTO: required: - numeroTelephone type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean numeroTelephone: pattern: "^\\+225[0-9]{8}$" type: string statutCompte: $ref: "#/components/schemas/StatutCompteWave" waveAccountId: type: string environnement: type: string dateDerniereVerification: $ref: "#/components/schemas/LocalDateTime" commentaire: type: string organisationId: $ref: "#/components/schemas/UUID" membreId: $ref: "#/components/schemas/UUID" ContactProposantDTO: type: object properties: telephonePrincipal: pattern: "^\\+?[0-9]{8,15}$" type: string telephoneSecondaire: pattern: "^\\+?[0-9]{8,15}$" type: string email: type: string emailSecondaire: type: string whatsapp: pattern: "^\\+?[0-9]{8,15}$" type: string telegram: maxLength: 50 type: string autresContacts: type: object additionalProperties: type: string adressePhysique: maxLength: 200 type: string rencontresPhysiquesPossibles: type: boolean appelsAcceptes: type: boolean smsAcceptes: type: boolean emailsAcceptes: type: boolean horairesDisponibilite: maxLength: 200 type: string languesPreferees: type: array items: type: string instructionsSpeciales: maxLength: 300 type: string ContactUrgenceDTO: required: - nomComplet - relation - telephonePrincipal type: object properties: nomComplet: maxLength: 100 pattern: \S type: string relation: maxLength: 50 pattern: \S type: string telephonePrincipal: pattern: "^\\+?[0-9]{8,15}$" type: string telephoneSecondaire: pattern: "^\\+?[0-9]{8,15}$" type: string email: type: string adresse: maxLength: 200 type: string disponibilite: maxLength: 100 type: string peutPrendreDecisions: type: boolean notificationAutomatique: type: boolean commentaires: maxLength: 300 type: string ContributionCollecteDTO: description: Don transactionnel reçu pour une campagne de collecte type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean campagneId: type: string membreDonateurId: description: Id du membre (Null si le don est public/externe) type: string aliasDonateur: description: Nom affiché si don public ou pour le mur de contributeurs type: string estAnonyme: type: boolean montantSoutien: type: number messageSoutien: type: string dateContribution: $ref: "#/components/schemas/LocalDateTime" transactionPaiementId: type: string statutPaiement: $ref: "#/components/schemas/StatutTransactionWave" CotisationResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean numeroReference: type: string membreId: $ref: "#/components/schemas/UUID" nomMembre: type: string nomCompletMembre: type: string numeroMembre: type: string initialesMembre: type: string typeMembre: type: string organisationId: $ref: "#/components/schemas/UUID" nomOrganisation: type: string regionOrganisation: type: string iconeOrganisation: type: string typeCotisation: type: string type: type: string typeCotisationLibelle: type: string typeLibelle: type: string typeSeverity: type: string typeIcon: type: string libelle: type: string description: type: string montantDu: type: number montant: type: number montantFormatte: type: string montantPaye: type: number montantRestant: type: number codeDevise: type: string statut: type: string statutLibelle: type: string statutSeverity: type: string statutIcon: type: string dateEcheance: $ref: "#/components/schemas/LocalDate" dateEcheanceFormattee: type: string retardCouleur: type: string retardTexte: type: string datePaiementFormattee: type: string modePaiementIcon: type: string modePaiementLibelle: type: string datePaiement: $ref: "#/components/schemas/LocalDateTime" periode: type: string annee: format: int32 type: integer mois: format: int32 type: integer observations: type: string recurrente: type: boolean nombreRappels: format: int32 type: integer dateDernierRappel: $ref: "#/components/schemas/LocalDateTime" valideParId: $ref: "#/components/schemas/UUID" nomValidateur: type: string dateValidation: $ref: "#/components/schemas/LocalDateTime" pourcentagePaiement: format: int32 type: integer joursRetard: format: int64 type: integer enRetard: type: boolean methodePaiement: type: string referencePaiement: type: string waveSessionId: type: string montantDuFormatte: type: string montantPayeFormatte: type: string montantRestantFormatte: type: string montantRestantPositif: type: boolean methodePaiementLibelle: type: string CotisationSummaryResponse: type: object properties: id: $ref: "#/components/schemas/UUID" numeroReference: type: string nomMembre: type: string montantDu: type: number montantPaye: type: number statut: type: string statutLibelle: type: string dateEcheance: $ref: "#/components/schemas/LocalDate" annee: format: int32 type: integer actif: type: boolean CountDTO: description: Réponse de comptage générique type: object properties: count: format: int64 description: Nombre d'éléments type: integer CreateAdhesionRequest: required: - numeroReference - membreId - organisationId - dateDemande - fraisAdhesion - codeDevise type: object properties: numeroReference: maxLength: 50 pattern: \S type: string membreId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" dateDemande: $ref: "#/components/schemas/LocalDate" fraisAdhesion: minimum: 0 exclusiveMinimum: true pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number codeDevise: pattern: "^[A-Z]{3}$" type: string observations: maxLength: 1000 type: string CreateAuditLogRequest: type: object properties: typeAction: type: string severite: type: string utilisateur: type: string role: type: string module: type: string description: type: string details: type: string ipAddress: type: string userAgent: type: string sessionId: type: string dateHeure: $ref: "#/components/schemas/LocalDateTime" donneesAvant: type: string donneesApres: type: string entiteId: type: string entiteType: type: string CreateBackupRequest: required: - name type: object properties: name: pattern: \S type: string description: type: string type: type: string includeDatabase: type: boolean includeFiles: type: boolean includeConfiguration: type: boolean CreateBudgetLineRequest: required: - category - name - amountPlanned type: object properties: category: pattern: ^(CONTRIBUTIONS|SAVINGS|SOLIDARITY|EVENTS|OPERATIONAL|INVESTMENTS|OTHER)$ type: string name: maxLength: 200 pattern: \S type: string description: maxLength: 500 type: string amountPlanned: minimum: 0 pattern: "^\\d{1,14}([.]\\d{1,2})?$" type: number notes: maxLength: 1000 type: string CreateBudgetRequest: required: - name - organizationId - period - year - lines type: object properties: name: maxLength: 200 pattern: \S type: string description: maxLength: 1000 type: string organizationId: $ref: "#/components/schemas/UUID" period: pattern: ^(MONTHLY|QUARTERLY|SEMIANNUAL|ANNUAL)$ type: string year: format: int32 maximum: 2100 minimum: 2020 type: integer month: format: int32 maximum: 12 minimum: 1 type: integer lines: minItems: 1 type: array items: $ref: "#/components/schemas/CreateBudgetLineRequest" currency: pattern: "^[A-Z]{3}$" type: string CreateCompteComptableRequest: required: - numeroCompte - libelle - typeCompte - classeComptable type: object properties: numeroCompte: pattern: \S type: string libelle: pattern: \S type: string typeCompte: $ref: "#/components/schemas/TypeCompteComptable" classeComptable: format: int32 maximum: 7 minimum: 1 type: integer soldeInitial: type: number soldeActuel: type: number compteCollectif: type: boolean compteAnalytique: type: boolean description: type: string CreateCotisationRequest: required: - membreId - organisationId - typeCotisation - libelle - montantDu - dateEcheance type: object properties: membreId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" typeCotisation: pattern: \S type: string libelle: maxLength: 100 pattern: \S type: string description: maxLength: 500 type: string montantDu: minimum: 0 exclusiveMinimum: true pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number codeDevise: maxLength: 3 minLength: 3 type: string dateEcheance: $ref: "#/components/schemas/LocalDate" periode: maxLength: 50 type: string annee: format: int32 maximum: 2100 minimum: 2020 type: integer mois: format: int32 maximum: 12 minimum: 1 type: integer recurrente: type: boolean observations: maxLength: 1000 type: string CreateDemandeAideRequest: required: - typeAide - titre - description - membreDemandeurId - associationId type: object properties: typeAide: $ref: "#/components/schemas/TypeAide" titre: maxLength: 200 pattern: \S type: string description: maxLength: 2000 pattern: \S type: string justification: maxLength: 1000 type: string montantDemande: minimum: 0 exclusiveMinimum: true pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number devise: pattern: "^[A-Z]{3}$" type: string membreDemandeurId: $ref: "#/components/schemas/UUID" associationId: $ref: "#/components/schemas/UUID" priorite: $ref: "#/components/schemas/PrioriteAide" piecesJustificatives: type: array items: $ref: "#/components/schemas/PieceJustificativeDTO" beneficiaires: type: array items: $ref: "#/components/schemas/BeneficiaireAideDTO" donneesPersonnalisees: type: object additionalProperties: {} tags: type: array items: type: string estConfidentielle: type: boolean localisation: $ref: "#/components/schemas/LocalisationDTO" contactUrgence: $ref: "#/components/schemas/ContactUrgenceDTO" dateLimite: $ref: "#/components/schemas/LocalDate" CreateDocumentRequest: required: - nomFichier - cheminStockage - tailleOctets type: object properties: nomFichier: pattern: \S type: string nomOriginal: type: string cheminStockage: pattern: \S type: string typeMime: type: string tailleOctets: format: int64 minimum: 0 type: integer typeDocument: $ref: "#/components/schemas/TypeDocument" hashMd5: type: string hashSha256: type: string description: type: string CreateEcritureComptableRequest: required: - numeroPiece - dateEcriture - libelle - journalId type: object properties: numeroPiece: pattern: \S type: string dateEcriture: $ref: "#/components/schemas/LocalDate" libelle: pattern: \S type: string reference: type: string lettrage: type: string pointe: type: boolean montantDebit: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number montantCredit: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number commentaire: type: string journalId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" paiementId: $ref: "#/components/schemas/UUID" lignes: type: array items: $ref: "#/components/schemas/CreateLigneEcritureRequest" CreateFavoriRequest: type: object properties: utilisateurId: $ref: "#/components/schemas/UUID" typeFavori: type: string titre: type: string description: type: string url: type: string icon: type: string couleur: type: string categorie: type: string ordre: format: int32 type: integer nbVisites: format: int32 type: integer derniereVisite: type: string estPlusUtilise: type: boolean CreateJournalComptableRequest: required: - code - libelle - typeJournal type: object properties: code: pattern: \S type: string libelle: pattern: \S type: string typeJournal: $ref: "#/components/schemas/TypeJournalComptable" dateDebut: $ref: "#/components/schemas/LocalDate" dateFin: $ref: "#/components/schemas/LocalDate" statut: type: string description: type: string CreateLigneEcritureRequest: required: - numeroLigne - ecritureId - compteComptableId type: object properties: numeroLigne: format: int32 minimum: 1 type: integer montantDebit: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number montantCredit: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number libelle: type: string reference: type: string ecritureId: $ref: "#/components/schemas/UUID" compteComptableId: $ref: "#/components/schemas/UUID" CreateMembreRequest: required: - prenom - nom - email - dateNaissance type: object properties: prenom: maxLength: 100 pattern: \S type: string nom: maxLength: 100 pattern: \S type: string email: maxLength: 255 pattern: \S type: string telephone: maxLength: 20 type: string telephoneWave: maxLength: 20 type: string dateNaissance: $ref: "#/components/schemas/LocalDate" profession: maxLength: 100 type: string photoUrl: maxLength: 500 type: string statutMatrimonial: maxLength: 50 type: string nationalite: maxLength: 100 type: string typeIdentite: maxLength: 50 type: string numeroIdentite: maxLength: 100 type: string organisationId: $ref: "#/components/schemas/UUID" CreateNotificationRequest: required: - typeNotification type: object properties: typeNotification: type: string priorite: type: string sujet: type: string corps: type: string dateEnvoiPrevue: $ref: "#/components/schemas/LocalDateTime" donneesAdditionnelles: type: string membreId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" templateId: $ref: "#/components/schemas/UUID" CreateOrganisationRequest: required: - nom - email type: object properties: nom: maxLength: 255 pattern: \S type: string nomCourt: maxLength: 50 type: string description: maxLength: 2000 type: string email: maxLength: 255 pattern: \S type: string telephone: maxLength: 20 type: string telephoneSecondaire: maxLength: 20 type: string emailSecondaire: maxLength: 255 type: string siteWeb: maxLength: 500 type: string logo: maxLength: 500 type: string reseauxSociaux: maxLength: 1000 type: string typeOrganisation: maxLength: 50 type: string statut: maxLength: 30 type: string dateFondation: $ref: "#/components/schemas/LocalDate" numeroEnregistrement: maxLength: 100 type: string devise: maxLength: 3 type: string budgetAnnuel: type: number cotisationObligatoire: type: boolean montantCotisationAnnuelle: type: number objectifs: maxLength: 2000 type: string activitesPrincipales: maxLength: 2000 type: string certifications: maxLength: 500 type: string partenaires: maxLength: 1000 type: string notes: maxLength: 1000 type: string latitude: type: number longitude: type: number adresse: maxLength: 500 type: string ville: maxLength: 100 type: string region: maxLength: 100 type: string pays: maxLength: 100 type: string codePostal: maxLength: 20 type: string organisationPublique: type: boolean accepteNouveauxMembres: type: boolean CreatePaiementRequest: required: - numeroReference - montant - codeDevise - methodePaiement type: object properties: numeroReference: pattern: \S type: string montant: minimum: 0.01 type: number codeDevise: pattern: \S type: string methodePaiement: pattern: \S type: string commentaire: type: string membreId: $ref: "#/components/schemas/UUID" CreatePieceJointeRequest: required: - ordre - documentId - typeEntiteRattachee - entiteRattacheeId type: object properties: ordre: format: int32 minimum: 1 type: integer libelle: type: string commentaire: type: string documentId: $ref: "#/components/schemas/UUID" typeEntiteRattachee: type: string entiteRattacheeId: $ref: "#/components/schemas/UUID" CreatePropositionAideRequest: type: object properties: typeAide: $ref: "#/components/schemas/TypeAide" titre: type: string description: type: string conditions: type: string montantMaximum: type: number nombreMaxBeneficiaires: format: int32 type: integer devise: type: string proposantId: type: string organisationId: type: string demandeAideId: type: string dateExpiration: $ref: "#/components/schemas/LocalDateTime" delaiReponseHeures: format: int32 type: integer CreateSuggestionRequest: required: - utilisateurId - titre type: object properties: utilisateurId: $ref: "#/components/schemas/UUID" utilisateurNom: type: string titre: pattern: \S type: string description: type: string justification: type: string categorie: type: string prioriteEstimee: type: string piecesJointes: type: array items: type: string CreateTemplateNotificationRequest: required: - code type: object properties: code: pattern: \S type: string sujet: type: string corpsTexte: type: string corpsHtml: type: string variablesDisponibles: type: string canauxSupportes: type: string langue: type: string description: type: string CreateTicketRequest: required: - utilisateurId - sujet - description - categorie - priorite type: object properties: utilisateurId: $ref: "#/components/schemas/UUID" sujet: maxLength: 200 pattern: \S type: string description: maxLength: 2000 pattern: \S type: string categorie: pattern: \S type: string priorite: pattern: \S type: string piecesJointes: type: array items: type: string CreateTypeReferenceRequest: required: - domaine - code - libelle type: object properties: domaine: maxLength: 50 pattern: \S type: string code: maxLength: 50 pattern: \S type: string libelle: maxLength: 200 pattern: \S type: string description: maxLength: 1000 type: string icone: maxLength: 100 type: string couleur: maxLength: 50 type: string severity: maxLength: 20 type: string ordreAffichage: format: int32 type: integer estDefaut: type: boolean estSysteme: type: boolean organisationId: $ref: "#/components/schemas/UUID" categorie: maxLength: 50 type: string modulesRequis: type: string CreneauDisponibiliteDTO: required: - heureDebut - heureFin - type type: object properties: id: type: string jourSemaine: $ref: "#/components/schemas/DayOfWeek" dateSpecifique: $ref: "#/components/schemas/LocalDate" heureDebut: $ref: "#/components/schemas/LocalTime" heureFin: $ref: "#/components/schemas/LocalTime" type: $ref: "#/components/schemas/TypeCreneau" estActif: type: boolean fuseauHoraire: type: string commentaires: maxLength: 200 type: string priorite: format: int32 maximum: 5 minimum: 1 type: integer dureeMaxMinutes: format: int32 maximum: 480 minimum: 15 type: integer pausesNecessaires: type: boolean dureePauseMinutes: format: int32 minimum: 5 type: integer valide: type: boolean dureeMinutes: format: int64 type: integer libelle: type: string CritereSelectionDTO: required: - nom - type - operateur - valeur type: object properties: nom: maxLength: 100 pattern: \S type: string type: pattern: \S type: string operateur: pattern: \S type: string valeur: pattern: \S type: string valeurMax: type: string estObligatoire: type: boolean poids: format: int32 maximum: 10 minimum: 1 type: integer description: maxLength: 200 type: string DayOfWeek: enum: - MONDAY - TUESDAY - WEDNESDAY - THURSDAY - FRIDAY - SATURDAY - SUNDAY type: string DeclarerPaiementManuelRequest: required: - cotisationId - methodePaiement type: object properties: cotisationId: $ref: "#/components/schemas/UUID" methodePaiement: pattern: \S type: string reference: type: string commentaire: type: string DeclarerVersementManuelRequest: required: - cotisationId - methodePaiement type: object properties: cotisationId: $ref: "#/components/schemas/UUID" methodePaiement: pattern: ^(ESPECES|VIREMENT|CHEQUE|AUTRE)$ type: string reference: maxLength: 100 type: string commentaire: maxLength: 500 type: string origineFonds: type: string justificationLcbFt: type: string DemandeAideResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean numeroReference: type: string typeAide: $ref: "#/components/schemas/TypeAide" titre: type: string description: type: string justification: type: string montantDemande: type: number montantApprouve: type: number montantVerse: type: number devise: type: string membreDemandeurId: $ref: "#/components/schemas/UUID" nomDemandeur: type: string numeroMembreDemandeur: type: string evaluateurId: type: string evaluateurNom: type: string approvateurId: type: string approvateurNom: type: string associationId: $ref: "#/components/schemas/UUID" nomAssociation: type: string statut: $ref: "#/components/schemas/StatutAide" priorite: $ref: "#/components/schemas/PrioriteAide" motifRejet: type: string commentairesEvaluateur: type: string dateSoumission: $ref: "#/components/schemas/LocalDateTime" dateLimiteTraitement: $ref: "#/components/schemas/LocalDateTime" dateEvaluation: $ref: "#/components/schemas/LocalDateTime" dateApprobation: $ref: "#/components/schemas/LocalDateTime" dateVersement: $ref: "#/components/schemas/LocalDateTime" dateCloture: $ref: "#/components/schemas/LocalDateTime" piecesJustificatives: type: array items: $ref: "#/components/schemas/PieceJustificativeDTO" beneficiaires: type: array items: $ref: "#/components/schemas/BeneficiaireAideDTO" historiqueStatuts: type: array items: $ref: "#/components/schemas/HistoriqueStatutDTO" commentaires: type: array items: $ref: "#/components/schemas/CommentaireAideResponse" donneesPersonnalisees: type: object additionalProperties: {} tags: type: array items: type: string estConfidentielle: type: boolean necessiteSuivi: type: boolean scorePriorite: format: double type: number nombreVues: format: int32 type: integer localisation: $ref: "#/components/schemas/LocalisationDTO" contactUrgence: $ref: "#/components/schemas/ContactUrgenceDTO" dateLimite: $ref: "#/components/schemas/LocalDate" justificatifsFournis: type: boolean documentsJoints: type: string dateDebutAide: $ref: "#/components/schemas/LocalDate" dateFinAide: $ref: "#/components/schemas/LocalDate" membreAidantId: $ref: "#/components/schemas/UUID" nomAidant: type: string modeVersement: type: string numeroTransaction: type: string rejeteParId: $ref: "#/components/schemas/UUID" rejetePar: type: string dateRejet: $ref: "#/components/schemas/LocalDateTime" raisonRejet: type: string pourcentageAvancement: format: double type: number delaiRestantHeures: format: int64 type: integer statutLibelle: type: string prioriteLibelle: type: string DemandeCreditRequest: description: Requête initiale pour une demande de financement (Crédit) required: - membreId - typeCredit - montantDemande - justificationDetaillee type: object properties: membreId: pattern: \S type: string typeCredit: $ref: "#/components/schemas/TypeCredit" montantDemande: minimum: 1 type: number dureeMois: format: int32 minimum: 1 type: integer compteLieId: description: Compte épargne adossé (si remboursement automatique ou nantissement) type: string justificationDetaillee: pattern: \S type: string documentIds: description: Liste des IDs de documents justificatifs attachés au dossier type: array items: type: string garantiesProposees: description: Liste des garanties proposées avec la demande type: array items: $ref: "#/components/schemas/GarantieDemandeDTO" DemandeCreditResponse: description: Réponse avec le tableau de bord résumé d'un dossier de crédit type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean numeroDossier: type: string membreId: type: string typeCredit: $ref: "#/components/schemas/TypeCredit" compteLieId: type: string montantDemande: type: number dureeMoisDemande: format: int32 type: integer montantApprouve: type: number dureeMoisApprouvee: format: int32 type: integer tauxInteretAnnuel: type: number coutTotalCredit: type: number statut: $ref: "#/components/schemas/StatutDemandeCredit" notesComite: type: string dateSoumission: $ref: "#/components/schemas/LocalDate" dateValidation: $ref: "#/components/schemas/LocalDate" datePremierEcheance: $ref: "#/components/schemas/LocalDate" echeancier: description: Aperçu des échéances générées pour le tableau d'amortissement type: array items: $ref: "#/components/schemas/EcheanceCreditDTO" DemarrerConversationDirecteRequest: required: - destinataireId - organisationId type: object properties: destinataireId: $ref: "#/components/schemas/UUID" organisationId: $ref: "#/components/schemas/UUID" contenuInitial: maxLength: 2000 type: string DemarrerConversationRoleRequest: required: - organisationId - roleCible - contenuInitial type: object properties: organisationId: $ref: "#/components/schemas/UUID" roleCible: pattern: ^(PRESIDENT|TRESORIER|SECRETAIRE|VICE_PRESIDENT|ADMIN|ADMIN_ORGANISATION)$ type: string contenuInitial: maxLength: 2000 pattern: \S type: string DonReligieuxDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean institutionId: type: string fideleId: type: string typeDon: $ref: "#/components/schemas/TypeDonReligieux" montant: type: number dateEncaissement: $ref: "#/components/schemas/LocalDateTime" periodeOuNatureAssociee: type: string EcheanceCreditDTO: description: Représente une ligne unique du tableau d'amortissement d'un crédit type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean demandeCreditId: type: string ordre: format: int32 description: "Indice de l'échéance (ex: mois 1, 2, 3...)" type: integer dateEcheancePrevue: $ref: "#/components/schemas/LocalDate" datePaiementEffectif: $ref: "#/components/schemas/LocalDate" capitalAmorti: type: number interetsDeLaPeriode: type: number montantTotalExigible: type: number capitalRestantDu: type: number penalitesRetard: type: number montantRegle: type: number statut: $ref: "#/components/schemas/StatutEcheanceCredit" EchelonOrganigrammeDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean organisationId: type: string echelonParentId: type: string niveau: $ref: "#/components/schemas/NiveauEchelon" designation: type: string zoneGeographiqueOuDelegation: type: string EnvoyerMessageRequest: type: object properties: typeMessage: pattern: ^(TEXTE|VOCAL|IMAGE|SYSTEME)$ type: string contenu: maxLength: 4000 type: string urlFichier: maxLength: 500 type: string dureeAudio: format: int32 maximum: 300 minimum: 1 type: integer messageParentId: $ref: "#/components/schemas/UUID" ErrorType: description: Type d'erreur d'import enum: - INVALID_FORMAT - VALIDATION_ERROR - DUPLICATE_USER - CREATION_ERROR - SYSTEM_ERROR type: string Evenement: required: - titre - dateDebut type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean titre: maxLength: 200 minLength: 3 pattern: \S type: string description: maxLength: 2000 type: string dateDebut: $ref: "#/components/schemas/LocalDateTime" dateFin: $ref: "#/components/schemas/LocalDateTime" lieu: maxLength: 500 type: string adresse: maxLength: 1000 type: string typeEvenement: type: string statut: type: string capaciteMax: format: int32 minimum: 0 type: integer prix: minimum: 0 pattern: "^\\d{1,8}([.]\\d{1,2})?$" type: number inscriptionRequise: type: boolean dateLimiteInscription: $ref: "#/components/schemas/LocalDateTime" instructionsParticulieres: maxLength: 1000 type: string contactOrganisateur: maxLength: 500 type: string materielRequis: maxLength: 2000 type: string visiblePublic: type: boolean organisation: $ref: "#/components/schemas/Organisation" organisateur: $ref: "#/components/schemas/Membre" enCours: type: boolean termine: type: boolean dureeEnHeures: format: int64 type: integer EvenementMobileDTO: type: object properties: id: $ref: "#/components/schemas/UUID" titre: type: string description: type: string dateDebut: $ref: "#/components/schemas/LocalDateTime" dateFin: $ref: "#/components/schemas/LocalDateTime" lieu: type: string adresse: type: string ville: type: string codePostal: type: string type: type: string statut: type: string maxParticipants: format: int32 type: integer participantsActuels: format: int32 type: integer organisateurId: $ref: "#/components/schemas/UUID" organisateurNom: type: string organisationId: $ref: "#/components/schemas/UUID" organisationNom: type: string priorite: type: string estPublic: type: boolean inscriptionRequise: type: boolean cout: type: number devise: type: string tags: type: array items: type: string imageUrl: type: string documentUrl: type: string notes: type: string dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" actif: type: boolean FederatedIdentityDTO: description: Identité fédérée type: object properties: identityProvider: description: Fournisseur d'identité type: string example: google userId: description: ID utilisateur chez le fournisseur type: string userName: description: Nom d'utilisateur chez le fournisseur type: string FeedbackRequest: type: object properties: subject: type: string message: type: string FileUpload: type: object FrequenceTour: enum: - JOURNALIERE - HEBDOMADAIRE - DECADE - QUINZAINE - MENSUELLE - TRIMESTRIELLE type: string GarantieDemandeDTO: required: - typeGarantie - referenceOuDescription type: object properties: typeGarantie: $ref: "#/components/schemas/TypeGarantie" valeurEstimee: type: number referenceOuDescription: pattern: \S type: string documentPreuveId: type: string HealthStatusDTO: description: Statut de santé de Keycloak type: object properties: timestamp: format: int64 description: Timestamp du check de santé (millisecondes) type: integer example: 1699545600000 keycloakAccessible: description: Indique si Keycloak est accessible type: boolean example: true keycloakVersion: description: Version de Keycloak type: string example: 23.0.3 realmsAccessible: description: Indique si les realms sont accessibles type: boolean example: true realmsCount: format: int32 description: Nombre de realms disponibles type: integer example: 5 overallHealthy: description: Indique si Keycloak est globalement en bonne santé type: boolean example: true errorMessage: description: Message d'erreur si le check a échoué type: string HistoriqueStatutDTO: required: - nouveauStatut - dateChangement - auteurId type: object properties: id: type: string ancienStatut: $ref: "#/components/schemas/StatutAide" nouveauStatut: $ref: "#/components/schemas/StatutAide" dateChangement: $ref: "#/components/schemas/LocalDateTime" auteurId: pattern: \S type: string auteurNom: type: string motif: maxLength: 500 type: string commentaires: maxLength: 1000 type: string estAutomatique: type: boolean dureeDepuisPrecedent: format: int64 type: integer donneesAdditionnelles: type: object additionalProperties: {} ImportErrorDTO: description: Détail d'une erreur d'import type: object properties: lineNumber: format: int32 description: Numéro de ligne (1-indexed) type: integer example: 42 lineContent: description: Contenu de la ligne en erreur type: string example: "john.doe,invalid-email,John,Doe,true" errorType: description: Type d'erreur type: string allOf: - $ref: "#/components/schemas/ErrorType" example: VALIDATION_ERROR field: description: Champ concerné par l'erreur type: string example: email message: description: Message d'erreur descriptif type: string example: Format d'email invalide details: description: Détails techniques de l'erreur type: string ImportResultDTO: description: Résultat d'un import CSV d'utilisateurs type: object properties: totalLines: format: int32 description: Nombre total de lignes traitées type: integer example: 100 successCount: format: int32 description: Nombre d'utilisateurs créés avec succès type: integer example: 95 errorCount: format: int32 description: Nombre d'erreurs rencontrées type: integer example: 5 message: description: Message de statut global type: string example: "Import terminé: 95 utilisateurs créés, 5 erreurs" errors: description: Liste des erreurs détaillées type: array items: $ref: "#/components/schemas/ImportErrorDTO" InitierDepotEpargneRequest: required: - compteId - montant type: object properties: compteId: $ref: "#/components/schemas/UUID" montant: minimum: 0.01 type: number numeroTelephone: pattern: "^\\d{9,15}$" type: string origineFonds: type: string justificationLcbFt: type: string InitierPaiementEnLigneRequest: required: - cotisationId - methodePaiement type: object properties: cotisationId: $ref: "#/components/schemas/UUID" methodePaiement: type: string numeroTelephone: type: string InitierVersementWaveRequest: required: - cotisationId type: object properties: cotisationId: $ref: "#/components/schemas/UUID" numeroTelephone: pattern: "^\\d{9,15}$" type: string origineFonds: type: string justificationLcbFt: type: string LocalDate: format: date type: string example: 2022-03-10 LocalDateTime: format: date-time type: string example: 2022-03-10T12:15:50 LocalTime: format: local-time type: string externalDocs: description: As defined by 'partial-time' in RFC3339 url: https://www.rfc-editor.org/rfc/rfc3339.html#section-5.6 example: 13:45:30.123456789 LocalisationDTO: type: object properties: latitude: format: double maximum: 90 minimum: -90 type: number longitude: format: double maximum: 180 minimum: -180 type: number adresseComplete: maxLength: 300 type: string ville: maxLength: 100 type: string region: maxLength: 100 type: string pays: maxLength: 100 type: string codePostal: maxLength: 20 type: string precision: format: double minimum: 0 type: number estApproximative: type: boolean LogSearchRequest: type: object properties: level: type: string source: type: string searchQuery: type: string timeRange: type: string limit: format: int32 type: integer offset: format: int32 type: integer Membre: required: - numeroMembre - prenom - nom - email - dateNaissance type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean keycloakId: $ref: "#/components/schemas/UUID" numeroMembre: pattern: \S type: string prenom: pattern: \S type: string nom: pattern: \S type: string email: pattern: \S type: string telephone: type: string telephoneWave: pattern: "^\\+[1-9][0-9]{6,14}$" type: string dateNaissance: $ref: "#/components/schemas/LocalDate" profession: type: string photoUrl: type: string statutCompte: type: string premiereConnexion: type: boolean statutMatrimonial: type: string nationalite: type: string typeIdentite: type: string numeroIdentite: type: string notes: type: string niveauVigilanceKyc: type: string statutKyc: type: string dateVerificationIdentite: $ref: "#/components/schemas/LocalDate" nomComplet: type: string majeur: type: boolean age: format: int32 type: integer MembreSearchCriteria: description: Critères de recherche avancée pour les membres type: object properties: query: description: "Terme de recherche général dans nom, prénom ou email" maxLength: 100 type: string example: marie nom: description: Filtre par nom (recherche partielle) maxLength: 50 type: string example: Dupont prenom: description: Filtre par prénom (recherche partielle) maxLength: 50 type: string example: Marie email: description: Filtre par email (recherche partielle) maxLength: 100 type: string example: '@unionflow.com' telephone: description: Filtre par numéro de téléphone maxLength: 20 type: string example: "+221" organisationIds: description: Liste des IDs d'organisations à inclure type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string roles: description: Liste des rôles à rechercher type: array items: type: string example: - PRESIDENT - SECRETAIRE statut: description: Filtre par statut d'activité pattern: ^(ACTIF|INACTIF|SUSPENDU|RADIE)$ type: string example: ACTIF dateAdhesionMin: description: Date d'adhésion minimum type: string allOf: - $ref: "#/components/schemas/LocalDate" example: 2020-01-01 dateAdhesionMax: description: Date d'adhésion maximum type: string allOf: - $ref: "#/components/schemas/LocalDate" example: 2025-12-31 ageMin: format: int32 description: Âge minimum maximum: 120 minimum: 0 type: integer example: 18 ageMax: format: int32 description: Âge maximum maximum: 120 minimum: 0 type: integer example: 65 region: description: Filtre par région maxLength: 50 type: string example: Dakar ville: description: Filtre par ville maxLength: 50 type: string example: Dakar profession: description: Filtre par profession maxLength: 100 type: string example: Ingénieur nationalite: description: Filtre par nationalité maxLength: 50 type: string example: Sénégalaise membreBureau: description: Filtre pour les membres du bureau uniquement type: boolean responsable: description: Filtre pour les responsables uniquement type: boolean includeInactifs: description: Inclure les membres inactifs default: false type: boolean valid: type: boolean description: type: string MembreSearchResultDTO: description: Résultats de recherche avancée des membres avec pagination type: object properties: membres: description: Liste des membres correspondant aux critères type: array items: $ref: "#/components/schemas/MembreSummaryResponse" totalElements: format: int64 description: Nombre total de résultats trouvés type: integer example: 247 totalPages: format: int32 description: Nombre total de pages type: integer example: 13 currentPage: format: int32 description: Numéro de la page actuelle type: integer example: 0 pageSize: format: int32 description: Nombre d'éléments par page type: integer example: 20 numberOfElements: format: int32 description: Nombre d'éléments sur cette page type: integer example: 20 hasNext: description: Indique s'il y a une page suivante type: boolean hasPrevious: description: Indique s'il y a une page précédente type: boolean isFirst: description: Indique si c'est la première page type: boolean isLast: description: Indique si c'est la dernière page type: boolean criteria: description: Critères de recherche qui ont été appliqués type: object allOf: - $ref: "#/components/schemas/MembreSearchCriteria" executionTimeMs: format: int64 description: Temps d'exécution de la recherche en ms type: integer example: 45 statistics: description: Statistiques sur les résultats de recherche type: object allOf: - $ref: "#/components/schemas/SearchStatistics" empty: type: boolean nextPageNumber: format: int32 type: integer previousPageNumber: format: int32 type: integer resultDescription: type: string MembreSummaryResponse: type: object properties: id: $ref: "#/components/schemas/UUID" numeroMembre: type: string prenom: type: string nom: type: string email: type: string telephone: type: string profession: type: string statutCompte: type: string statutCompteLibelle: type: string statutCompteSeverity: type: string actif: type: boolean roles: type: array items: type: string organisationId: $ref: "#/components/schemas/UUID" organisationNom: type: string dateAdhesion: $ref: "#/components/schemas/LocalDate" nomComplet: type: string statut: type: string statutLibelle: type: string statutSeverity: type: string statutIcon: type: string typeMembre: type: string typeSeverity: type: string typeIcon: type: string MettreAJourPolitiqueRequest: type: object properties: typePolitique: pattern: ^(OUVERT|BUREAU_SEULEMENT|GROUPES_INTERNES)$ type: string autoriserMembreVersMembre: type: boolean autoriserMembreVersRole: type: boolean autoriserNotesVocales: type: boolean ModeScrutin: enum: - MAJORITAIRE_UN_TOUR - MAJORITAIRE_DEUX_TOURS - PROPORTIONNEL - BUREAU_CONSENSUEL type: string NiveauEchelon: enum: - SIEGE_MONDIAL - NATIONAL - REGIONAL - LOCAL type: string NotificationGroupeeRequest: type: object properties: membreIds: type: array items: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string sujet: type: string corps: type: string canaux: type: array items: type: string Organisation: required: - nom - typeOrganisation - statut - email type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nom: pattern: \S type: string nomCourt: type: string typeOrganisation: pattern: \S type: string statut: pattern: \S type: string description: type: string dateFondation: $ref: "#/components/schemas/LocalDate" numeroEnregistrement: type: string email: pattern: \S type: string telephone: type: string telephoneSecondaire: type: string emailSecondaire: type: string adresse: type: string ville: type: string region: type: string pays: type: string codePostal: type: string latitude: maximum: 90 minimum: -90 pattern: "^\\d{1,3}([.]\\d{1,6})?$" type: number longitude: maximum: 180 minimum: -180 pattern: "^\\d{1,3}([.]\\d{1,6})?$" type: number siteWeb: type: string logo: type: string reseauxSociaux: type: string organisationParente: $ref: "#/components/schemas/Organisation" niveauHierarchique: format: int32 type: integer estOrganisationRacine: type: boolean cheminHierarchique: type: string nombreMembres: format: int32 type: integer nombreAdministrateurs: format: int32 type: integer budgetAnnuel: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number devise: type: string cotisationObligatoire: type: boolean montantCotisationAnnuelle: minimum: 0 pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number objectifs: type: string activitesPrincipales: type: string certifications: type: string partenaires: type: string notes: type: string organisationPublique: type: boolean accepteNouveauxMembres: type: boolean categorieType: type: string modulesActifs: type: string nomComplet: type: string ancienneteAnnees: format: int32 type: integer recente: type: boolean active: type: boolean OrganisationResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nom: type: string nomCourt: type: string description: type: string email: type: string telephone: type: string telephoneSecondaire: type: string emailSecondaire: type: string siteWeb: type: string logo: type: string reseauxSociaux: type: string typeOrganisation: type: string typeAssociation: type: string typeOrganisationLibelle: type: string typeLibelle: type: string statut: type: string statutLibelle: type: string statutSeverity: type: string dateFondation: $ref: "#/components/schemas/LocalDate" numeroEnregistrement: type: string adresse: type: string quartier: type: string ville: type: string region: type: string pays: type: string codePostal: type: string latitude: type: number longitude: type: number organisationParenteId: $ref: "#/components/schemas/UUID" organisationParenteNom: type: string niveauHierarchique: format: int32 type: integer estOrganisationRacine: type: boolean devise: type: string budgetAnnuel: type: number cotisationObligatoire: type: boolean montantCotisationAnnuelle: type: number nombreMembres: format: int32 type: integer nombreAdministrateurs: format: int32 type: integer nombreEvenements: format: int32 type: integer objectifs: type: string activitesPrincipales: type: string certifications: type: string partenaires: type: string notes: type: string organisationPublique: type: boolean accepteNouveauxMembres: type: boolean numeroRegistre: type: string nomOrganisationParente: type: string PagedResponse: type: object properties: data: type: array items: {} total: format: int64 type: integer page: format: int32 type: integer size: format: int32 type: integer totalPages: format: int32 type: integer empty: type: boolean PagedResponseEvenementMobileDTO: type: object properties: data: type: array items: $ref: "#/components/schemas/EvenementMobileDTO" total: format: int64 type: integer page: format: int32 type: integer size: format: int32 type: integer totalPages: format: int32 type: integer empty: type: boolean PagedResponseMembreSummaryResponse: type: object properties: data: type: array items: $ref: "#/components/schemas/MembreSummaryResponse" total: format: int64 type: integer page: format: int32 type: integer size: format: int32 type: integer totalPages: format: int32 type: integer empty: type: boolean ParametresLcbFtRequest: description: Paramètres LCB-FT (seuils de vigilance) required: - montantSeuilJustification - montantSeuilValidationManuelle - codeDevise type: object properties: organisationId: description: ID de l'organisation (null pour paramètres plateforme) type: string montantSeuilJustification: description: Montant au-dessus duquel l'origine des fonds est obligatoire (ex. 500000 XOF) minimum: 0 type: number example: 500000 montantSeuilValidationManuelle: description: Montant au-dessus duquel une validation manuelle est requise (ex. 1000000 XOF) minimum: 0 type: number example: 1000000 codeDevise: description: "Code devise ISO 4217 (ex. XOF, EUR, USD)" maxLength: 3 pattern: \S type: string example: XOF notes: description: Notes ou commentaires sur la configuration type: string ParametresLcbFtResponse: description: Paramètres LCB-FT avec seuils de vigilance type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean organisationId: description: ID de l'organisation (null si paramètres plateforme) type: string organisationNom: description: Nom de l'organisation (null si paramètres plateforme) type: string montantSeuilJustification: description: Montant au-dessus duquel l'origine des fonds est obligatoire type: number example: 500000 montantSeuilValidationManuelle: description: Montant au-dessus duquel une validation manuelle est requise type: number example: 1000000 codeDevise: description: Code devise ISO 4217 type: string example: XOF notes: description: Notes ou commentaires sur la configuration type: string estParametrePlateforme: description: Indique si ces paramètres s'appliquent à toute la plateforme type: boolean PasswordResetRequestDTO: description: Requête de réinitialisation de mot de passe required: - password type: object properties: password: description: Nouveau mot de passe type: string temporary: description: Indique si le mot de passe est temporaire default: true type: boolean PeriodeAnalyse: enum: - AUJOURD_HUI - HIER - CETTE_SEMAINE - SEMAINE_DERNIERE - CE_MOIS - MOIS_DERNIER - TROIS_DERNIERS_MOIS - SIX_DERNIERS_MOIS - CETTE_ANNEE - ANNEE_DERNIERE - DEUX_DERNIERES_ANNEES - SEPT_DERNIERS_JOURS - TRENTE_DERNIERS_JOURS - QUATRE_VINGT_DIX_DERNIERS_JOURS - DEPUIS_CREATION - PERIODE_PERSONNALISEE type: string PieceJustificativeDTO: required: - nomFichier - typePiece - urlFichier type: object properties: id: type: string nomFichier: maxLength: 255 pattern: \S type: string typePiece: pattern: \S type: string description: maxLength: 500 type: string urlFichier: pattern: \S type: string typeMime: type: string tailleFichier: format: int64 minimum: 1 type: integer estObligatoire: type: boolean estVerifiee: type: boolean dateAjout: $ref: "#/components/schemas/LocalDateTime" dateVerification: $ref: "#/components/schemas/LocalDateTime" verificateurId: type: string commentairesVerification: maxLength: 500 type: string PrioriteAide: enum: - CRITIQUE - URGENTE - ELEVEE - NORMALE - FAIBLE type: string ProjetOngDTO: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean organisationId: type: string nomProjet: type: string descriptionMandat: type: string zoneGeographiqueIntervention: type: string budgetPrevisionnel: type: number depensesReelles: type: number dateLancement: $ref: "#/components/schemas/LocalDate" dateFinEstimee: $ref: "#/components/schemas/LocalDate" statut: $ref: "#/components/schemas/StatutProjetOng" PropositionAideResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean numeroReference: type: string typeAide: $ref: "#/components/schemas/TypeAide" titre: type: string description: type: string conditions: type: string montantMaximum: type: number nombreMaxBeneficiaires: format: int32 type: integer devise: type: string proposantId: type: string proposantNom: type: string organisationId: type: string demandeAideId: type: string statut: $ref: "#/components/schemas/StatutProposition" estDisponible: type: boolean estRecurrente: type: boolean frequenceRecurrence: type: string dateExpiration: $ref: "#/components/schemas/LocalDateTime" delaiReponseHeures: format: int32 type: integer criteresSelection: type: array items: $ref: "#/components/schemas/CritereSelectionDTO" zonesGeographiques: type: array items: type: string groupesCibles: type: array items: type: string competencesRessources: type: array items: type: string contactProposant: $ref: "#/components/schemas/ContactProposantDTO" creneauxDisponibilite: type: array items: $ref: "#/components/schemas/CreneauDisponibiliteDTO" modeContactPrefere: type: string nombreDemandesTraitees: format: int32 type: integer nombreBeneficiairesAides: format: int32 type: integer montantTotalVerse: format: double type: number noteMoyenne: format: double type: number nombreEvaluations: format: int32 type: integer tags: type: array items: type: string donneesPersonnalisees: type: object additionalProperties: {} estMiseEnAvant: type: boolean scorePertinence: format: double type: number nombreVues: format: int32 type: integer nombreCandidatures: format: int32 type: integer activeEtDisponible: type: boolean expiree: type: boolean pourcentageCapaciteUtilisee: format: double type: number placesRestantes: format: int32 type: integer RealmAccessCheckDTO: description: Réponse de vérification d'accès au realm type: object properties: canManage: description: L'utilisateur peut gérer le realm type: boolean userId: description: ID de l'utilisateur type: string realmName: description: Nom du realm type: string RealmAssignmentDTO: description: Attribution ou révocation d'accès à un realm required: - userId - realmName type: object properties: id: description: Identifiant unique (UUID Keycloak) type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 dateCreation: description: Date de création type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateModification: description: Date de dernière modification type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T14:20:00 creeParUsername: description: Utilisateur ayant créé l'entité type: string example: admin@lions.dev modifieParUsername: description: Utilisateur ayant modifié l'entité type: string example: superadmin@lions.dev version: format: int64 description: Numéro de version pour gestion optimiste type: integer example: 1 userId: description: ID de l'utilisateur Keycloak pattern: \S type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 username: description: Username de l'utilisateur type: string example: jdupont email: description: Email de l'utilisateur type: string example: jdupont@example.com realmName: description: Nom du realm assigné pattern: \S type: string example: btpxpress isSuperAdmin: description: Indique si l'utilisateur est super admin (peut gérer tous les realms) type: boolean example: false assignedAt: description: Date d'assignation type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 assignedBy: description: Username de l'administrateur qui a fait l'assignation type: string example: admin@lions.dev raison: description: Raison de l'assignation type: string example: Nouveau gestionnaire du realm client commentaires: description: Commentaires administratifs type: string example: Accès temporaire pour support temporaire: description: Indique si c'est une assignation temporaire type: boolean example: false dateExpiration: description: Date d'expiration de l'assignation temporaire type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-12-31T23:59:59 active: description: Indique si l'assignation est active type: boolean example: true expired: type: boolean superAdmin: type: boolean summary: type: string RejectTransactionRequest: required: - reason type: object properties: reason: maxLength: 1000 minLength: 10 pattern: \S type: string RestoreBackupRequest: required: - backupId type: object properties: backupId: $ref: "#/components/schemas/UUID" restoreDatabase: type: boolean restoreFiles: type: boolean restoreConfiguration: type: boolean createRestorePoint: type: boolean RoleAssignmentDTO: description: Attribution ou révocation de rôles required: - userId - roleNames - typeRole type: object properties: userId: description: ID de l'utilisateur cible pattern: \S type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 username: description: Username de l'utilisateur cible (optionnel) type: string example: jdupont roleNames: description: Liste des noms de rôles à attribuer ou révoquer minItems: 1 type: array items: type: string roleIds: description: Liste des IDs de rôles à attribuer ou révoquer type: array items: type: string typeRole: description: Type de rôle type: string allOf: - $ref: "#/components/schemas/TypeRole" example: REALM_ROLE realmName: description: Nom du Realm type: string example: btpxpress clientName: description: Nom du Client (requis si typeRole = CLIENT_ROLE) type: string example: btpxpress-app clientId: description: ID du Client (optionnel) type: string raison: description: Raison de l'attribution/révocation type: string example: Promotion au poste de gestionnaire commentaires: description: Commentaires administratifs type: string example: Demandé par le manager temporaire: description: Indique si c'est une attribution temporaire type: boolean example: false dateExpiration: description: Date d'expiration de l'attribution temporaire type: string example: 2025-12-31T23:59:59 includeComposites: description: Indique si les rôles composites doivent être inclus type: boolean example: true notifyUser: description: Indique si l'opération doit notifier l'utilisateur type: boolean example: true validForClientRole: type: boolean validForRealmRole: type: boolean roleCount: format: int32 type: integer RoleAssignmentRequestDTO: description: Requête d'attribution ou de révocation de rôles required: - roleNames type: object properties: roleNames: description: Liste des noms de rôles type: array items: type: string RoleCompositeDTO: description: Rôle composite type: object properties: id: description: ID du rôle type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 name: description: Nom du rôle type: string example: gestionnaire description: description: Description du rôle type: string typeRole: description: Type de rôle type: string allOf: - $ref: "#/components/schemas/TypeRole" example: REALM_ROLE clientName: description: Nom du client (si client role) type: string RoleDTO: description: Rôle Keycloak (Realm ou Client) required: - name type: object properties: id: description: Identifiant unique (UUID Keycloak) type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 dateCreation: description: Date de création type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateModification: description: Date de dernière modification type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T14:20:00 creeParUsername: description: Utilisateur ayant créé l'entité type: string example: admin@lions.dev modifieParUsername: description: Utilisateur ayant modifié l'entité type: string example: superadmin@lions.dev version: format: int64 description: Numéro de version pour gestion optimiste type: integer example: 1 name: description: Nom du rôle maxLength: 100 minLength: 2 pattern: "^[a-zA-Z0-9_-]+$" type: string example: admin_btpxpress description: description: Description du rôle type: string example: Administrateur avec tous les privilèges typeRole: description: Type de rôle type: string allOf: - $ref: "#/components/schemas/TypeRole" example: REALM_ROLE composite: description: Indique si c'est un rôle composite type: boolean example: false containerId: description: ID du conteneur (Realm ou Client) type: string example: btpxpress realmName: description: Nom du Realm type: string example: btpxpress clientName: description: Nom du Client (si rôle client) type: string example: btpxpress-app clientId: description: ID du Client (si rôle client) type: string compositeRoles: description: Rôles composites inclus dans ce rôle type: array items: type: string compositeRealmRoles: description: Rôles Realm composites type: array items: $ref: "#/components/schemas/RoleCompositeDTO" compositeClientRoles: description: Rôles Client composites par client type: object additionalProperties: type: array items: $ref: "#/components/schemas/RoleCompositeDTO" attributes: description: Attributs personnalisés du rôle type: object additionalProperties: type: array items: type: string userCount: format: int32 description: Nombre d'utilisateurs ayant ce rôle type: integer example: 15 systemRole: description: Indique si le rôle est un rôle système type: boolean example: false deletable: description: Indique si le rôle peut être supprimé type: boolean example: true realmRole: type: boolean clientRole: type: boolean fullName: type: string RoleResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean code: type: string libelle: type: string description: type: string typeRole: type: string niveauHierarchique: format: int32 type: integer organisationId: $ref: "#/components/schemas/UUID" nomOrganisation: type: string SearchStatistics: description: Statistiques sur les résultats de recherche type: object properties: membresActifs: format: int64 description: Nombre de membres actifs dans les résultats type: integer membresInactifs: format: int64 description: Nombre de membres inactifs dans les résultats type: integer ageMoyen: format: double description: Âge moyen des membres trouvés type: number ageMin: format: int32 description: Âge minimum des membres trouvés type: integer ageMax: format: int32 description: Âge maximum des membres trouvés type: integer nombreOrganisations: format: int64 description: Nombre d'organisations représentées type: integer nombreRegions: format: int64 description: Nombre de régions représentées type: integer ancienneteMoyenne: format: double description: Ancienneté moyenne en années type: number ServiceStatus: type: object properties: name: type: string online: type: boolean status: type: string responseTimeMs: format: int64 type: integer lastChecked: $ref: "#/components/schemas/LocalDateTime" errorMessage: type: string operational: type: boolean degraded: type: boolean down: type: boolean SessionsRevokedDTO: description: Réponse de révocation de sessions type: object properties: count: format: int32 description: Nombre de sessions révoquées type: integer SouscriptionDemandeRequest: required: - typeFormule - plageMembres - typePeriode - organisationId type: object properties: typeFormule: pattern: \S type: string plageMembres: pattern: \S type: string typePeriode: pattern: \S type: string typeOrganisation: type: string organisationId: type: string StatutAgrement: enum: - PROVISOIRE - VALIDE - SUSPENDU - RETRETIRE type: string StatutAide: enum: - BROUILLON - SOUMISE - EN_ATTENTE - EN_COURS_EVALUATION - INFORMATIONS_REQUISES - APPROUVEE - APPROUVEE_PARTIELLEMENT - REJETEE - EN_COURS_TRAITEMENT - EN_COURS_VERSEMENT - VERSEE - LIVREE - TERMINEE - ANNULEE - SUSPENDUE - EXPIREE - EN_SUIVI - CLOTUREE type: string StatutCampagneAgricole: enum: - PREPARATION - LABOUR_SEMIS - ENTRETIEN - RECOLTE - COMMERCIALISATION - CLOTUREE type: string StatutCampagneCollecte: enum: - BROUILLON - EN_COURS - ATTEINTE - EXPIREE - SUSPENDUE type: string StatutCompteEpargne: enum: - ACTIF - INACTIF - BLOQUE - EN_CLOTURE - CLOTURE type: string StatutCompteWave: enum: - NON_VERIFIE - VERIFIE - SUSPENDU - BLOQUE type: string StatutDemandeCredit: enum: - BROUILLON - SOUMISE - EN_EVALUATION - INFORMATIONS_REQUISES - APPROUVEE - REJETEE - DECAISSEE - SOLDEE - EN_CONTENTIEUX type: string StatutEcheanceCredit: enum: - A_VENIR - EXIGIBLE - PAYEE - PAYEE_PARTIELLEMENT - EN_RETARD - IMPAYEE - RESTRUCTUREE type: string StatutProjetOng: enum: - EN_ETUDE - FINANCEMENT - EN_COURS - EVALUE - CLOTURE type: string StatutProposition: enum: - BROUILLON - ACTIVE - SUSPENDUE - EXPIREE - TERMINEE - ANNULEE type: string StatutTontine: enum: - PLANIFIEE - EN_COURS - EN_PAUSE - CLOTUREE - ANNULEE type: string StatutTransactionWave: enum: - INITIALISE - EN_ATTENTE - EN_COURS - REUSSIE - ECHOUE - ANNULEE - EXPIRED type: string StatutUser: description: Statut d'un utilisateur enum: - ACTIF - INACTIF - SUSPENDU - EN_ATTENTE - VERROUILLE - EXPIRE - SUPPRIME type: string StatutVote: enum: - BROUILLON - PLANIFIE - OUVERT - SUSPENDU - CLOTURE - RESULTATS_PUBLIES type: string SyncResultDTO: description: Résultat d'une synchronisation avec Keycloak type: object properties: realmName: description: Nom du realm synchronisé type: string example: lions usersCount: format: int32 description: Nombre d'utilisateurs synchronisés type: integer example: 150 realmRolesCount: format: int32 description: Nombre de rôles realm synchronisés type: integer example: 25 clientRolesCount: format: int32 description: Nombre de rôles client synchronisés type: integer example: 50 success: description: Indique si la synchronisation a réussi type: boolean example: true errorMessage: description: Message d'erreur si la synchronisation a échoué type: string startTime: format: int64 description: Timestamp de début de la synchronisation (millisecondes) type: integer example: 1699545600000 endTime: format: int64 description: Timestamp de fin de la synchronisation (millisecondes) type: integer example: 1699545615000 durationMs: format: int64 type: integer SystemAlertResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean level: type: string title: type: string message: type: string timestamp: $ref: "#/components/schemas/LocalDateTime" acknowledged: type: boolean acknowledgedBy: type: string acknowledgedAt: $ref: "#/components/schemas/LocalDateTime" source: type: string alertType: type: string currentValue: format: double type: number thresholdValue: format: double type: number unit: type: string recommendedActions: type: string critical: type: boolean error: type: boolean ageInMinutes: format: int64 type: integer old: type: boolean formattedMessage: type: string levelColor: type: string thresholdExceeded: type: boolean SystemConfigResponse: type: object properties: applicationName: type: string timezone: type: string defaultLanguage: type: string maintenanceMode: type: boolean version: type: string lastUpdated: $ref: "#/components/schemas/LocalDateTime" networkTimeout: format: int32 type: integer maxRetries: format: int32 type: integer connectionPoolSize: format: int32 type: integer twoFactorAuthEnabled: type: boolean sessionTimeoutMinutes: format: int32 type: integer auditLoggingEnabled: type: boolean metricsCollectionEnabled: type: boolean metricsIntervalSeconds: format: int32 type: integer performanceOptimizationEnabled: type: boolean autoBackupEnabled: type: boolean backupFrequency: type: string backupRetentionDays: format: int32 type: integer lastBackup: $ref: "#/components/schemas/LocalDateTime" logLevel: type: string logRetentionDays: format: int32 type: integer detailedLoggingEnabled: type: boolean logCompressionEnabled: type: boolean realTimeMonitoringEnabled: type: boolean monitoringIntervalSeconds: format: int32 type: integer emailAlertsEnabled: type: boolean pushAlertsEnabled: type: boolean cpuHighAlertEnabled: type: boolean cpuThresholdPercent: format: int32 type: integer memoryLowAlertEnabled: type: boolean memoryThresholdPercent: format: int32 type: integer criticalErrorAlertEnabled: type: boolean connectionFailureAlertEnabled: type: boolean connectionFailureThreshold: format: int32 type: integer systemStatus: type: string uptime: format: int64 type: integer SystemLogResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean level: type: string source: type: string message: type: string details: type: string timestamp: $ref: "#/components/schemas/LocalDateTime" userId: type: string sessionId: type: string ipAddress: type: string endpoint: type: string httpStatusCode: format: int32 type: integer critical: type: boolean error: type: boolean warning: type: boolean shortMessage: type: string levelColor: type: string SystemMetricsResponse: type: object properties: cpuUsagePercent: format: double type: number availableProcessors: format: int32 type: integer systemLoadAverage: format: double type: number totalMemoryBytes: format: int64 type: integer usedMemoryBytes: format: int64 type: integer freeMemoryBytes: format: int64 type: integer maxMemoryBytes: format: int64 type: integer memoryUsagePercent: format: double type: number totalMemoryFormatted: type: string usedMemoryFormatted: type: string freeMemoryFormatted: type: string totalDiskBytes: format: int64 type: integer usedDiskBytes: format: int64 type: integer freeDiskBytes: format: int64 type: integer diskUsagePercent: format: double type: number totalDiskFormatted: type: string usedDiskFormatted: type: string freeDiskFormatted: type: string activeUsersCount: format: int32 type: integer totalUsersCount: format: int32 type: integer activeSessionsCount: format: int32 type: integer failedLoginAttempts24h: format: int32 type: integer apiRequestsLastHour: format: int64 type: integer apiRequestsToday: format: int64 type: integer averageResponseTimeMs: format: double type: number totalRequestsCount: format: int64 type: integer dbConnectionPoolSize: format: int32 type: integer dbActiveConnections: format: int32 type: integer dbIdleConnections: format: int32 type: integer dbHealthy: type: boolean criticalErrorsCount: format: int32 type: integer warningsCount: format: int32 type: integer infoLogsCount: format: int32 type: integer debugLogsCount: format: int32 type: integer totalLogsCount: format: int64 type: integer networkBytesReceivedPerSec: format: double type: number networkBytesSentPerSec: format: double type: number networkInFormatted: type: string networkOutFormatted: type: string systemStatus: type: string uptimeMillis: format: int64 type: integer uptimeFormatted: type: string startTime: $ref: "#/components/schemas/LocalDateTime" currentTime: $ref: "#/components/schemas/LocalDateTime" javaVersion: type: string quarkusVersion: type: string applicationVersion: type: string lastBackup: $ref: "#/components/schemas/LocalDateTime" nextScheduledMaintenance: $ref: "#/components/schemas/LocalDateTime" lastMaintenance: $ref: "#/components/schemas/LocalDateTime" apiBaseUrl: type: string authServerUrl: type: string cdnUrl: type: string totalCacheSizeBytes: format: int64 type: integer totalCacheSizeFormatted: type: string totalCacheEntries: format: int32 type: integer services: type: object additionalProperties: $ref: "#/components/schemas/ServiceStatus" timestamp: $ref: "#/components/schemas/LocalDateTime" errorRate: format: double type: number activeConnections: format: int32 type: integer networkUsageMbps: format: double type: number totalLogs24h: format: int64 type: integer totalErrors24h: format: int64 type: integer totalWarnings24h: format: int64 type: integer totalRequests24h: format: int64 type: integer uptime: format: int64 type: integer healthy: type: boolean cpuOverloaded: type: boolean memoryCritical: type: boolean SystemTestResultResponse: type: object properties: testType: type: string success: type: boolean message: type: string responseTimeMs: format: int64 type: integer testedAt: $ref: "#/components/schemas/LocalDateTime" details: type: string TontineRequest: description: Requête de création/paramétrage d'une tontine required: - nom - organisationId - typeTontine - frequence - dateDebutPrevue type: object properties: nom: pattern: \S type: string description: type: string organisationId: pattern: \S type: string typeTontine: $ref: "#/components/schemas/TypeTontine" frequence: $ref: "#/components/schemas/FrequenceTour" dateDebutPrevue: $ref: "#/components/schemas/LocalDate" montantMiseParTour: description: Montant fixe si tontine classique minimum: 0 type: number limiteParticipants: format: int32 description: Le nombre maximum de membres pouvant rejoindre cette tontine (Optionnel) minimum: 2 type: integer TontineResponse: description: Réponse contenant la structure d'une tontine type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean nom: type: string description: type: string organisationId: type: string typeTontine: $ref: "#/components/schemas/TypeTontine" frequence: $ref: "#/components/schemas/FrequenceTour" statut: $ref: "#/components/schemas/StatutTontine" dateDebutEffective: $ref: "#/components/schemas/LocalDate" dateFinPrevue: $ref: "#/components/schemas/LocalDate" montantMiseParTour: type: number limiteParticipants: format: int32 type: integer nombreParticipantsActuels: format: int32 description: "Statistiques directes : nombre de participants actifs et fonds\ \ totaux levés à ce jour" type: integer fondTotalCollecte: type: number calendrierTours: description: Calendrier généré des tours de cette tontine type: array items: $ref: "#/components/schemas/TourTontineDTO" TourTontineDTO: description: Informations d'un tour spécifique d'une tontine rotative type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean tontineId: type: string ordreTour: format: int32 description: "Ordre cronologique (Tour 1, Tour 2...)" type: integer dateOuvertureCotisations: $ref: "#/components/schemas/LocalDate" dateTirageOuRemise: $ref: "#/components/schemas/LocalDate" montantCible: description: "Montant cible total (Ex: 10 membres x 10 000 = 100 000 cibles)" type: number cagnotteCollectee: description: Montant de la cagnotte réellement collectée pour ce tour type: number membreBeneficiaireId: description: Membre désigné pour remporter ce tour (bénéficiaire de la caisse) type: string statutInterne: description: "Statut: A_VENIR, EN_COURS, CLOTURE/REMIS" type: string TransactionEpargneRequest: description: Requête d'initialisation d'une transaction sur un compte d'épargne required: - compteId - typeTransaction - montant type: object properties: compteId: pattern: \S type: string typeTransaction: $ref: "#/components/schemas/TypeTransactionEpargne" montant: minimum: 0.01 type: number compteDestinationId: description: ID d'un compte de destination en cas de transfert interne type: string motif: description: "Motif, libellé ou preuve de dépôt" type: string origineFonds: description: "Origine des fonds (LCB-FT) — obligatoire au-dessus du seuil\ \ configuré (ex. Salaire, Vente, Héritage)" type: string pieceJustificativeId: description: ID de la pièce justificative (document) — requis au-dessus du seuil LCB-FT type: string TransactionWaveDTO: required: - waveTransactionId - typeTransaction - statutTransaction - montant - codeDevise - compteWaveId type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean nouveau: type: boolean waveTransactionId: pattern: \S type: string waveRequestId: type: string waveReference: type: string typeTransaction: $ref: "#/components/schemas/TypeTransactionWave" statutTransaction: $ref: "#/components/schemas/StatutTransactionWave" montant: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number frais: minimum: 0 pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number montantNet: minimum: 0 pattern: "^\\d{1,12}([.]\\d{1,2})?$" type: number codeDevise: pattern: "^[A-Z]{3}$" type: string telephonePayeur: type: string telephoneBeneficiaire: type: string metadonnees: type: string nombreTentatives: format: int32 type: integer dateDerniereTentative: $ref: "#/components/schemas/LocalDateTime" messageErreur: type: string compteWaveId: $ref: "#/components/schemas/UUID" TypeActionAudit: description: Type d'action pour l'audit enum: - USER_CREATE - USER_UPDATE - USER_DELETE - USER_ACTIVATE - USER_DEACTIVATE - USER_SUSPEND - USER_UNLOCK - USER_PASSWORD_RESET - USER_EMAIL_VERIFY - USER_FORCE_LOGOUT - USER_IMPORT - ROLE_CREATE - ROLE_UPDATE - ROLE_DELETE - ROLE_ASSIGN - ROLE_REVOKE - ROLE_ADD_COMPOSITE - ROLE_REMOVE_COMPOSITE - GROUP_CREATE - GROUP_UPDATE - GROUP_DELETE - GROUP_ADD_MEMBER - GROUP_REMOVE_MEMBER - REALM_SYNC - SYNC_USERS - SYNC_ROLES - REALM_EXPORT - REALM_IMPORT - REALM_ASSIGN - REALM_REVOKE - REALM_ACTIVATE - REALM_DEACTIVATE - REALM_SET_SUPER_ADMIN - SESSION_CREATE - SESSION_DELETE - SESSION_REVOKE_ALL - SYSTEM_BACKUP - SYSTEM_RESTORE - SYSTEM_CONFIG_CHANGE type: string TypeAide: enum: - AIDE_FINANCIERE_URGENTE - PRET_SANS_INTERET - AIDE_COTISATION - AIDE_FRAIS_MEDICAUX - AIDE_FRAIS_SCOLARITE - DON_MATERIEL - PRET_MATERIEL - AIDE_DEMENAGEMENT - AIDE_TRAVAUX - AIDE_RECHERCHE_EMPLOI - FORMATION_PROFESSIONNELLE - CONSEIL_JURIDIQUE - AIDE_CREATION_ENTREPRISE - GARDE_ENFANTS - AIDE_PERSONNES_AGEES - TRANSPORT - AIDE_ADMINISTRATIVE - HEBERGEMENT_URGENCE - AIDE_ALIMENTAIRE - AIDE_VESTIMENTAIRE - SOUTIEN_PSYCHOLOGIQUE - AIDE_NUMERIQUE - TRADUCTION - AUTRE type: string TypeCompteComptable: enum: - ACTIF - PASSIF - CHARGES - PRODUITS - TRESORERIE - AUTRE type: string TypeCompteEpargne: enum: - COURANT - EPARGNE_LIBRE - EPARGNE_BLOQUEE - DEPOT_A_TERME - EPARGNE_PROJET type: string TypeCredit: enum: - CONSOMMATION - IMMOBILIER - PROFESSIONNEL - AGRICOLE - SCOLAIRE - URGENCE - DECOUVERT type: string TypeCreneau: enum: - RECURRENT - PONCTUEL - URGENCE - FLEXIBLE type: string TypeDocument: enum: - IDENTITE - JUSTIFICATIF_DOMICILE - PIECE_JUSTIFICATIVE - PHOTO - CONTRAT - FACTURE - RECU - RAPPORT - AUTRE type: string TypeDonReligieux: enum: - QUETE_ORDINAIRE - DIME - ZAKAT - OFFRANDE_SPECIALE - INTENTION_PRIERE type: string TypeGarantie: enum: - EPARGNE_BLOQUEE - CAUTION_SOLIDAIRE - MATERIELLE - IMMOBILIERE - FOND_GARANTIE type: string TypeJournalComptable: enum: - ACHATS - VENTES - BANQUE - CAISSE - OD type: string TypeMetrique: enum: - NOMBRE_MEMBRES_ACTIFS - NOMBRE_MEMBRES_INACTIFS - TAUX_CROISSANCE_MEMBRES - MOYENNE_AGE_MEMBRES - REPARTITION_GENRE_MEMBRES - TOTAL_COTISATIONS_COLLECTEES - COTISATIONS_EN_ATTENTE - TAUX_RECOUVREMENT_COTISATIONS - MOYENNE_COTISATION_MEMBRE - EVOLUTION_REVENUS_MENSUELLE - NOMBRE_EVENEMENTS_ORGANISES - TAUX_PARTICIPATION_EVENEMENTS - MOYENNE_PARTICIPANTS_EVENEMENT - EVENEMENTS_ANNULES - SATISFACTION_EVENEMENTS - NOMBRE_DEMANDES_AIDE - MONTANT_AIDES_ACCORDEES - TAUX_APPROBATION_AIDES - DELAI_TRAITEMENT_DEMANDES - IMPACT_SOCIAL_MESURE - TAUX_CONNEXION_MOBILE - FREQUENCE_UTILISATION_APP - ACTIONS_UTILISATEUR_JOUR - RETENTION_UTILISATEURS - NPS_SATISFACTION - NOMBRE_ORGANISATIONS_ACTIVES - TAUX_CROISSANCE_ORGANISATIONS - MOYENNE_MEMBRES_PAR_ORGANISATION - ORGANISATIONS_PREMIUM - CHURN_RATE_ORGANISATIONS - TEMPS_REPONSE_API - TAUX_DISPONIBILITE_SYSTEME - NOMBRE_ERREURS_SYSTEME - UTILISATION_STOCKAGE - PERFORMANCE_MOBILE type: string TypeReferenceResponse: type: object properties: id: $ref: "#/components/schemas/UUID" dateCreation: $ref: "#/components/schemas/LocalDateTime" dateModification: $ref: "#/components/schemas/LocalDateTime" creePar: type: string modifiePar: type: string version: format: int64 type: integer actif: type: boolean domaine: type: string code: type: string libelle: type: string description: type: string icone: type: string couleur: type: string severity: type: string ordreAffichage: format: int32 type: integer estDefaut: type: boolean estSysteme: type: boolean organisationId: $ref: "#/components/schemas/UUID" categorie: type: string modulesRequis: type: string TypeRole: description: Type de rôle Keycloak enum: - REALM_ROLE - CLIENT_ROLE - COMPOSITE_ROLE type: string TypeTontine: enum: - ROTATIVE_CLASSIQUE - VARIABLE - ACCUMULATIVE type: string TypeTransactionEpargne: enum: - DEPOT - RETRAIT - TRANSFERT_ENTRANT - TRANSFERT_SORTANT - PAIEMENT_INTERETS - PRELEVEMENT_FRAIS - RETENUE_GARANTIE - LIBERATION_GARANTIE - REMBOURSEMENT_CREDIT type: string TypeTransactionWave: enum: - DEPOT - RETRAIT - TRANSFERT - PAIEMENT - REMBOURSEMENT type: string TypeVote: enum: - ELECTION_BUREAU - ADOPTION_RESOLUTION - MODIFICATION_STATUTS - EXCLUSION_MEMBRE - REFERENDUM type: string UUID: format: uuid pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" type: string UpdateAdhesionRequest: type: object properties: montantPaye: minimum: 0 pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number statut: pattern: ^(EN_ATTENTE|APPROUVEE|REJETEE|ANNULEE|EN_PAIEMENT|PAYEE)$ type: string dateApprobation: $ref: "#/components/schemas/LocalDate" datePaiement: $ref: "#/components/schemas/LocalDateTime" methodePaiement: pattern: ^(ESPECES|VIREMENT|CHEQUE|WAVE_MONEY|ORANGE_MONEY|FREE_MONEY|CARTE_BANCAIRE)$ type: string referencePaiement: maxLength: 100 type: string motifRejet: maxLength: 1000 type: string observations: maxLength: 1000 type: string approuvePar: maxLength: 255 type: string dateValidation: $ref: "#/components/schemas/LocalDate" UpdateAlertConfigRequest: type: object properties: cpuHighAlertEnabled: type: boolean cpuThresholdPercent: format: int32 maximum: 100 minimum: 0 type: integer cpuDurationMinutes: format: int32 maximum: 120 minimum: 1 type: integer memoryLowAlertEnabled: type: boolean memoryThresholdPercent: format: int32 maximum: 100 minimum: 0 type: integer criticalErrorAlertEnabled: type: boolean errorAlertEnabled: type: boolean connectionFailureAlertEnabled: type: boolean connectionFailureThreshold: format: int32 maximum: 1000 minimum: 1 type: integer connectionFailureWindowMinutes: format: int32 maximum: 60 minimum: 1 type: integer emailNotificationsEnabled: type: boolean pushNotificationsEnabled: type: boolean smsNotificationsEnabled: type: boolean alertEmailRecipients: type: string UpdateBackupConfigRequest: type: object properties: autoBackupEnabled: type: boolean frequency: type: string retention: type: string retentionDays: format: int32 type: integer backupTime: type: string includeDatabase: type: boolean includeFiles: type: boolean includeConfiguration: type: boolean UpdateConfigurationRequest: type: object properties: cle: type: string valeur: type: string type: type: string categorie: type: string description: type: string modifiable: type: boolean visible: type: boolean metadonnees: type: object additionalProperties: {} UpdateCotisationRequest: type: object properties: libelle: maxLength: 100 type: string description: maxLength: 500 type: string montantDu: minimum: 0 exclusiveMinimum: true pattern: "^\\d{1,10}([.]\\d{1,2})?$" type: number dateEcheance: $ref: "#/components/schemas/LocalDate" observations: maxLength: 1000 type: string statut: type: string annee: format: int32 maximum: 2100 minimum: 2020 type: integer mois: format: int32 maximum: 12 minimum: 1 type: integer recurrente: type: boolean UpdateDemandeAideRequest: type: object properties: typeAide: $ref: "#/components/schemas/TypeAide" titre: maxLength: 200 type: string description: maxLength: 2000 type: string justification: maxLength: 1000 type: string montantDemande: type: number devise: type: string priorite: $ref: "#/components/schemas/PrioriteAide" piecesJustificatives: type: array items: $ref: "#/components/schemas/PieceJustificativeDTO" beneficiaires: type: array items: $ref: "#/components/schemas/BeneficiaireAideDTO" donneesPersonnalisees: type: object additionalProperties: {} tags: type: array items: type: string estConfidentielle: type: boolean necessiteSuivi: type: boolean localisation: $ref: "#/components/schemas/LocalisationDTO" contactUrgence: $ref: "#/components/schemas/ContactUrgenceDTO" dateLimite: $ref: "#/components/schemas/LocalDate" statut: $ref: "#/components/schemas/StatutAide" montantApprouve: type: number commentairesEvaluateur: type: string documentsJoints: type: string dateSoumission: $ref: "#/components/schemas/LocalDateTime" dateEvaluation: $ref: "#/components/schemas/LocalDateTime" dateVersement: $ref: "#/components/schemas/LocalDateTime" UpdateMembreRequest: required: - prenom - nom - email - dateNaissance type: object properties: prenom: maxLength: 100 pattern: \S type: string nom: maxLength: 100 pattern: \S type: string email: maxLength: 255 pattern: \S type: string telephone: maxLength: 20 type: string telephoneWave: maxLength: 20 type: string dateNaissance: $ref: "#/components/schemas/LocalDate" profession: maxLength: 100 type: string photoUrl: maxLength: 500 type: string statutMatrimonial: maxLength: 50 type: string nationalite: maxLength: 100 type: string typeIdentite: maxLength: 50 type: string numeroIdentite: maxLength: 100 type: string actif: type: boolean UpdateOrganisationRequest: required: - nom - email type: object properties: nom: maxLength: 255 pattern: \S type: string nomCourt: maxLength: 50 type: string description: maxLength: 2000 type: string email: maxLength: 255 pattern: \S type: string telephone: maxLength: 20 type: string telephoneSecondaire: maxLength: 20 type: string emailSecondaire: maxLength: 255 type: string siteWeb: maxLength: 500 type: string logo: maxLength: 500 type: string reseauxSociaux: maxLength: 1000 type: string typeOrganisation: maxLength: 50 type: string statut: maxLength: 30 type: string dateFondation: $ref: "#/components/schemas/LocalDate" numeroEnregistrement: maxLength: 100 type: string devise: maxLength: 3 type: string budgetAnnuel: type: number cotisationObligatoire: type: boolean montantCotisationAnnuelle: type: number objectifs: maxLength: 2000 type: string activitesPrincipales: maxLength: 2000 type: string certifications: maxLength: 500 type: string partenaires: maxLength: 1000 type: string notes: maxLength: 1000 type: string latitude: type: number longitude: type: number adresse: maxLength: 500 type: string ville: maxLength: 100 type: string region: maxLength: 100 type: string pays: maxLength: 100 type: string codePostal: maxLength: 20 type: string organisationPublique: type: boolean accepteNouveauxMembres: type: boolean UpdatePropositionAideRequest: type: object properties: typeAide: $ref: "#/components/schemas/TypeAide" titre: type: string description: type: string conditions: type: string montantMaximum: type: number nombreMaxBeneficiaires: format: int32 type: integer devise: type: string statut: $ref: "#/components/schemas/StatutProposition" estDisponible: type: boolean estRecurrente: type: boolean frequenceRecurrence: type: string dateExpiration: $ref: "#/components/schemas/LocalDateTime" delaiReponseHeures: format: int32 type: integer UpdateSystemConfigRequest: type: object properties: applicationName: type: string timezone: type: string defaultLanguage: type: string maintenanceMode: type: boolean networkTimeout: format: int32 type: integer maxRetries: format: int32 type: integer connectionPoolSize: format: int32 type: integer twoFactorAuthEnabled: type: boolean sessionTimeoutMinutes: format: int32 type: integer auditLoggingEnabled: type: boolean metricsCollectionEnabled: type: boolean metricsIntervalSeconds: format: int32 type: integer performanceOptimizationEnabled: type: boolean autoBackupEnabled: type: boolean backupFrequency: type: string backupRetentionDays: format: int32 type: integer logLevel: type: string logRetentionDays: format: int32 type: integer detailedLoggingEnabled: type: boolean logCompressionEnabled: type: boolean realTimeMonitoringEnabled: type: boolean monitoringIntervalSeconds: format: int32 type: integer emailAlertsEnabled: type: boolean pushAlertsEnabled: type: boolean cpuHighAlertEnabled: type: boolean cpuThresholdPercent: format: int32 type: integer memoryLowAlertEnabled: type: boolean memoryThresholdPercent: format: int32 type: integer criticalErrorAlertEnabled: type: boolean connectionFailureAlertEnabled: type: boolean connectionFailureThreshold: format: int32 type: integer UpdateTypeReferenceRequest: type: object properties: code: maxLength: 50 type: string libelle: maxLength: 200 type: string description: maxLength: 1000 type: string icone: maxLength: 100 type: string couleur: maxLength: 50 type: string severity: maxLength: 20 type: string ordreAffichage: format: int32 type: integer estDefaut: type: boolean actif: type: boolean categorie: maxLength: 50 type: string modulesRequis: type: string UserDTO: description: Utilisateur Keycloak required: - username - email - prenom - nom type: object properties: id: description: Identifiant unique (UUID Keycloak) type: string example: f47ac10b-58cc-4372-a567-0e02b2c3d479 dateCreation: description: Date de création type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateModification: description: Date de dernière modification type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T14:20:00 creeParUsername: description: Utilisateur ayant créé l'entité type: string example: admin@lions.dev modifieParUsername: description: Utilisateur ayant modifié l'entité type: string example: superadmin@lions.dev version: format: int64 description: Numéro de version pour gestion optimiste type: integer example: 1 username: description: Nom d'utilisateur unique maxLength: 100 minLength: 3 pattern: "^[a-zA-Z0-9._-]+$" type: string example: jdupont email: description: Adresse email pattern: \S type: string example: jean.dupont@lions.dev emailVerified: description: Email vérifié type: boolean example: true prenom: description: Prénom maxLength: 100 minLength: 2 pattern: \S type: string example: Jean nom: description: Nom de famille maxLength: 100 minLength: 2 pattern: \S type: string example: Dupont statut: description: Statut de l'utilisateur type: string allOf: - $ref: "#/components/schemas/StatutUser" example: ACTIF enabled: description: Compte activé type: boolean example: true telephone: description: Numéro de téléphone type: string example: +225 07 12 34 56 78 organisation: description: Organisation/Entreprise type: string example: Lions Dev departement: description: Département type: string example: IT fonction: description: Fonction/Poste type: string example: Développeur Senior pays: description: Pays type: string example: Côte d'Ivoire ville: description: Ville type: string example: Abidjan langue: description: Langue préférée type: string example: fr timezone: description: Fuseau horaire type: string example: Africa/Abidjan realmName: description: Realm Keycloak type: string example: btpxpress realmRoles: description: Liste des rôles Realm assignés type: array items: type: string clientRoles: description: Liste des rôles Client assignés type: object additionalProperties: type: array items: type: string groups: description: Liste des groupes auxquels appartient l'utilisateur type: array items: type: string derniereConnexion: description: Date de dernière connexion type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T10:30:00 dateExpiration: description: Date d'expiration du compte type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2026-01-15T23:59:59 dateVerrouillage: description: Date de verrouillage du compte type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-15T16:00:00 attributes: description: Attributs personnalisés Keycloak type: object additionalProperties: type: array items: type: string requiredActions: description: "Actions requises (ex: UPDATE_PASSWORD, VERIFY_EMAIL)" type: array items: type: string federatedIdentityProvider: description: Fournisseur d'identité fédéré type: string example: google federatedIdentities: description: Lien d'identité fédérée type: array items: $ref: "#/components/schemas/FederatedIdentityDTO" temporaryPassword: description: Mot de passe temporaire (création uniquement) type: string temporaryPasswordFlag: description: Indique si le mot de passe est temporaire type: boolean activeSessions: format: int32 description: Nombre de sessions actives type: integer example: 2 failedLoginAttempts: format: int32 description: Nombre d'échecs de connexion type: integer example: 0 raisonModification: description: Raison de la dernière modification type: string commentaires: description: Commentaires administratifs type: string nomComplet: type: string actif: type: boolean expire: type: boolean UserSearchCriteriaDTO: description: Critères de recherche d'utilisateurs type: object properties: searchTerm: description: "Terme de recherche générale (username, email, nom, prénom)" type: string example: dupont username: description: Nom d'utilisateur exact type: string example: jdupont email: description: Email exact type: string example: jean.dupont@lions.dev prenom: description: Prénom type: string example: Jean nom: description: Nom de famille type: string example: Dupont telephone: description: Numéro de téléphone type: string example: +225 01 02 03 04 05 statut: description: Statut de l'utilisateur type: string allOf: - $ref: "#/components/schemas/StatutUser" example: ACTIF enabled: description: Compte activé type: boolean example: true emailVerified: description: Email vérifié type: boolean example: true realmRoles: description: Liste des rôles Realm à filtrer type: array items: type: string clientRoles: description: Liste des rôles Client à filtrer type: array items: type: string groups: description: Liste des groupes à filtrer type: array items: type: string clientName: description: Nom du client pour filtrer par rôles client type: string example: btpxpress-app organisation: description: Organisation/Entreprise type: string example: Lions Dev departement: description: Département type: string example: IT fonction: description: Fonction/Poste type: string example: Développeur pays: description: Pays type: string example: Côte d'Ivoire ville: description: Ville type: string example: Abidjan dateCreationMin: description: Date de création minimum type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-01T00:00:00 dateCreationMax: description: Date de création maximum type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-12-31T23:59:59 derniereConnexionMin: description: Date de dernière connexion minimum type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-01T00:00:00 derniereConnexionMax: description: Date de dernière connexion maximum type: string allOf: - $ref: "#/components/schemas/LocalDateTime" example: 2025-01-31T23:59:59 hasRequiredActions: description: Utilisateurs avec actions requises uniquement type: boolean example: true isLocked: description: Utilisateurs verrouillés uniquement type: boolean example: false isExpired: description: Utilisateurs expirés uniquement type: boolean example: false hasActiveSessions: description: Utilisateurs avec sessions actives uniquement type: boolean example: true realmName: description: Nom du Realm à filtrer type: string example: btpxpress page: format: int32 description: Numéro de page (commence à 0) default: 0 type: integer example: 0 pageSize: format: int32 description: Taille de la page default: 20 type: integer example: 20 maxResults: format: int32 description: Nombre maximum de résultats type: integer example: 100 sortBy: description: "Champ de tri (username, email, prenom, nom, dateCreation,\ \ derniereConnexion)" type: string example: username sortOrder: description: Ordre de tri (ASC ou DESC) type: string example: ASC includeRoles: description: Inclure les rôles dans les résultats type: boolean example: true includeGroups: description: Inclure les groupes dans les résultats type: boolean example: true includeAttributes: description: Inclure les attributs personnalisés type: boolean example: false includeSessionInfo: description: Inclure les informations de session type: boolean example: false offset: format: int32 type: integer UserSearchResultDTO: description: Résultat paginé de recherche d'utilisateurs type: object properties: users: description: Liste des utilisateurs trouvés type: array items: $ref: "#/components/schemas/UserDTO" totalCount: format: int64 description: Nombre total d'utilisateurs correspondant aux critères type: integer example: 156 currentPage: format: int32 description: Numéro de la page actuelle (commence à 0) type: integer example: 0 pageSize: format: int32 description: Taille de la page type: integer example: 20 totalPages: format: int32 description: Nombre total de pages type: integer example: 8 hasNextPage: description: Indique s'il y a une page suivante type: boolean example: true hasPreviousPage: description: Indique s'il y a une page précédente type: boolean example: false firstElement: format: int32 description: Index du premier élément de la page type: integer example: 0 lastElement: format: int32 description: Index du dernier élément de la page type: integer example: 19 isEmpty: description: Indique si la page est vide type: boolean example: false isFirstPage: description: Indique si c'est la première page type: boolean example: true isLastPage: description: Indique si c'est la dernière page type: boolean example: false criteria: description: Critères de recherche utilisés type: object allOf: - $ref: "#/components/schemas/UserSearchCriteriaDTO" executionTimeMs: format: int64 description: Temps d'exécution de la recherche en millisecondes type: integer example: 145 currentPageSize: format: int32 type: integer UserSessionStatsDTO: description: Statistiques de sessions et d'utilisateurs en ligne pour un realm type: object properties: realmName: description: Nom du realm concerné type: string totalUsers: format: int64 description: Nombre total d'utilisateurs dans le realm type: integer activeSessions: format: int64 description: Nombre total de sessions actives (approximation) type: integer onlineUsers: format: int64 description: Nombre d'utilisateurs considérés comme en ligne (approximation) type: integer securitySchemes: Keycloak: type: openIdConnect description: Authentification Bearer JWT via Keycloak openIdConnectUrl: https://security.lions.dev/realms/unionflow/.well-known/openid-configuration