From 1496c83b6f34fd0228a8440ebfbb54dc8ed2af31 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Tue, 21 Apr 2026 16:28:31 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20ajouter=20openapi.yaml=20g=C3=A9n=C3=A9?= =?UTF-8?q?r=C3=A9=20depuis=20le=20backend=20de=20production=20(v1.0.5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/openapi.yaml | 16414 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 16414 insertions(+) create mode 100644 docs/openapi.yaml diff --git a/docs/openapi.yaml b/docs/openapi.yaml new file mode 100644 index 0000000..07c8b2a --- /dev/null +++ b/docs/openapi.yaml @@ -0,0 +1,16414 @@ +--- +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