openapi: 3.0.3
info:
  title: SMICO Perfect / Juakali API (hosts SMICO)
  description: |
    Documentation SMICO des API constatées sur les hôtes SMICO.

    Catalogue exhaustif (noms + paramètres) : onglet `Catalogue runtime` du
    [Sheet CAGECFI](https://docs.google.com/spreadsheets/d/1mqi66P8WOL6mMK6BVjL4xqGToXvvsvFUXqFxt2akdb4/edit?gid=1420988214#gid=1420988214)
    et fichier `catalog.csv` de ce site.

    Familles au 2026-09-30 :
    - Juakali `pmobileapi.awp` : actif sur mobile2 ; chemin DEMO nginx 405, certificat TLS ne correspond pas à `demo.smico.pro`.
    - SOAP WEBDEV `P_MobileWebService` : 334 opérations, service HTTP up sur la VM DEMO (VPN), opérations non appelées.
    - SOAP Java `PERFECTWS` : 63 méthodes, contexte down (JDBC TLS).
    - REST Vision `perfect-web-smico` 2.1.9 : 35 chemins dans le WAR, contexte non déployé.
    - Contrat métier des chemins `/api-perfect/v1/itf/**` et `/oauth` : champs du portail CAGECFI
      `visiondaw.cagecfi.pro:3030`. Hébergement client SMICO : ces champs s'appliquent, le préfixe
      d'URL non. Portail = `/gateway-perfect/...`. WAR = `/perfect-vision-smico/api-perfect/v1/...`.
      MoMo, facturation, langues et centrale/nexus du portail ne sont pas dans ce WAR.
  version: 0.3.0
  contact:
    name: IT4Life / SMICO

security: []

servers:
  - url: https://mobile2.smico.pro/API_JUAKALI_SMICO_WEB/FR/APIEXTERNE
    description: Juakali mobile2 actif (POST sans clé → 100003)
  - url: https://demo.smico.pro/API_JUAKALI_WEB/FR/APIEXTERNE
    description: Juakali DEMO KO — nginx 405, certificat CN=devel-tourscanner.abra.bid
  - url: http://10.243.12.5
    description: VM DEMO PERFECTSRV (VPN)

tags:
  - name: pmobileapi
    description: Juakali — un POST, routage par champ methode
  - name: soap-pmobile
    description: WEBDEV P_MobileWebService — une URL SOAP, 334 opérations (enum)
  - name: perfectws
    description: Java PERFECTWS — une URL SOAP, 63 méthodes, service down
  - name: vision-rest
    description: REST embarqué dans perfect-vision-smico, contexte non déployé

paths:
  /pmobileapi.awp:
    get:
      tags: [pmobileapi]
      summary: Probe connectivité (GET refusé)
      description: Sur mobile2, JSON codereponse 100206.
      responses:
        "200":
          description: JSON d'erreur Juakali
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JuakaliResponse"
    post:
      tags: [pmobileapi]
      summary: Appel métier Juakali
      description: |
        `codeapi=API_MOBILE`, `apikey` = Base64(agent:passe), `methode`.
        Ne pas committer d'apikey réelle. Clé doc 0000:0000 refusée.
        DEMO public : POST 405 nginx (2026-09-30). mobile2 : 100003 sans clé.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JuakaliRequest"
      responses:
        "200":
          description: Réponse Juakali
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JuakaliResponse"
        "405":
          description: nginx — chemin DEMO non mappé Juakali

  /P_MOBILEWEBSERVICE_WEB/awws/P_MobileWebService.awws:
    post:
      tags: [soap-pmobile]
      servers:
        - url: http://10.243.12.5
          description: IIS DEMO, VPN. WSDL ?wsdl
      summary: SOAP P_MobileWebService (334 opérations)
      description: |
        Une seule URL. Le nom d'opération est l'élément du corps SOAP.
        Service joignable. Aucune opération n'a été invoquée (pas de session agent).
        Paramètres nommés : onglet Sheet `Catalogue runtime` / `inventory/p-mobilewebservice-operations.tsv`.
      requestBody:
        required: true
        content:
          text/xml:
            schema:
              $ref: "#/components/schemas/SoapPmobileOperation"
      responses:
        "200":
          description: Réponse SOAP (non appelée)

  /perfect-ws-drdit/PERFECTWS:
    post:
      tags: [perfectws]
      servers:
        - url: http://10.243.12.5:8080
          description: Tomcat DEMO. Contexte en 404 (JDBC TLS PKIX).
      summary: SOAP PERFECTWS (63 méthodes)
      description: |
        Interface `com.cagecfi.mobile.ws.api.IPERFECTWS`.
        Contexte down au 2026-09-30. Signatures dans `inventory/perfectws-operations.tsv`.
        Les noms de paramètres Java ne sont pas dans le bytecode (uniquement les types).
      requestBody:
        required: true
        content:
          text/xml:
            schema:
              $ref: "#/components/schemas/PerfectWsOperation"
      responses:
        "404":
          description: Contexte non démarré
        "200":
          description: Non atteint

  /api-perfect/v1/oauth:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Authentification"
      description: |
        Authentification. Permet de récupérer un jeton d'accès (`accessToken`) nécessaire pour appeler les autres fonctionnalités de l'API.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/authentification`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/oauth` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
        Champs `username`, `password`, `scope` présents dans `OAuthRequest` du WAR. Le portail gateway envoie ces champs en `application/x-www-form-urlencoded` avec `scope=perfect`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_oauthRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiAccessToken"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/current-time:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/current-time"
      description: |
        Contrôleur `PerfectTokenController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/itf/adh/situation:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Consulter la situation d'un adhérent"
      description: |
        Consulter la situation d'un adhérent. Récupère les informations et la situation globale d'un adhérent existant. Au moins un des trois identifiants est requis.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/adh/situation`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/adh/situation` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_situationRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_situationResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/adh/adhesion-individu:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Créer une adhésion pour un individu"
      description: |
        Créer une adhésion pour un individu. Permet d'enregistrer un nouveau client individuel dans le système. L'adhésion est créée avec un statut en attente de validation.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/adh/adhesion-individu`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/adh/adhesion-individu` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_adhesion_individuRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_adhesion_individuResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/adh/adhesion-entreprise:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Créer une adhésion pour une entreprise"
      description: |
        Créer une adhésion pour une entreprise. Permet d'enregistrer une nouvelle entreprise individuel dans le système. L'adhésion est créée avec un statut en attente de validation.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/adh/adhesion-entreprise`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/adh/adhesion-entreprise` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_adhesion_entrepriseRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_adh_adhesion_entrepriseResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/crd/simple:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Soumettre une demande de crédit simple"
      description: |
        Soumettre une demande de crédit simple. Crée une nouvelle demande de crédit pour un adhérent identifié. L'adhérent doit être identifié par l'un des trois identifiants possibles.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/crd/simple`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/crd/simple` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_simpleRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_simpleResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/crd/operation:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Effectuer une opération sur crédit"
      description: |
        Effectuer une opération sur crédit. Exécute une action spécifique (comme un déboursement ou un remboursement) sur une demande de crédit existante.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/crd/operation`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/crd/operation` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_operationRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_operationResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/crd/update-limit:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Mettre à jour la limite de crédit"
      description: |
        Mettre à jour la limite de crédit. Met à jour la limite de crédit pour un adhérent, souvent suite à l'approbation d'une demande de crédit.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/crd/update-limit`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/crd/update-limit` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_update_limitRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_update_limitResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/crd/situation:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Consulter la situation d'un crédit"
      description: |
        Consulter la situation d'un crédit. Récupère les détails, le statut et l'échéancier d'une demande de crédit spécifique.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/crd/situation`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/crd/situation` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_situationRequest"
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Cagecfi_api_perfect_v1_itf_crd_situationResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/src/apk-name:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/apk-name"
      description: |
        Contrôleur `CommonITController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/permission-it:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/permission-it"
      description: |
        Contrôleur `CommonITController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/tunnel-key:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/tunnel-key"
      description: |
        Contrôleur `CommonITController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/solde/numCpte/debit:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/solde/numCpte/debit"
      description: |
        Contrôleur `SoldeCompteController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/solde/numCpte/credit:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/solde/numCpte/credit"
      description: |
        Contrôleur `SoldeCompteController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/credit/situation/dossier:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/credit/situation/dossier"
      description: |
        Contrôleur `CreditController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/credit/situation/globale:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/credit/situation/globale"
      description: |
        Contrôleur `CreditController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/credit/simulation/tableau:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "POST /api-perfect/v1/src/credit/simulation/tableau"
      description: |
        Contrôleur `CreditController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/prc/credit/simple:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "POST /api-perfect/v1/src/prc/credit/simple"
      description: |
        Contrôleur `PrcCreditController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/prc/decouvert/solde:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "POST /api-perfect/v1/src/prc/decouvert/solde"
      description: |
        Contrôleur `PrcEpargneController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/prc/decouvert/encours:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "POST /api-perfect/v1/src/prc/decouvert/encours"
      description: |
        Contrôleur `PrcEpargneController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/prc/decouvert/calcul-frais:
    post:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "POST /api-perfect/v1/src/prc/decouvert/calcul-frais"
      description: |
        Contrôleur `PrcEpargneController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/rib/numCpte:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/rib/numCpte"
      description: |
        Contrôleur `ContratRIBController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/src/ribFile/numCpte:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "GET /api-perfect/v1/src/ribFile/numCpte"
      description: |
        Contrôleur `ContratRIBController`. Auth Bearer (`POST /api-perfect/v1/oauth`).
        Statut : listé, non appelé — le contexte Tomcat n'est pas déployé.
      responses:
        "200":
          description: Non vérifié (contexte absent)
        "401":
          description: Bearer absent ou refusé (non vérifié)

  /api-perfect/v1/itf/ref/devise-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Devises"
      description: |
        Liste des Devises. Récupère la liste de toutes les devises disponibles dans le système (ex: XOF, EUR, USD).
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/devise-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/devise-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/point-service-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Points de Service"
      description: |
        Liste des Points de Service. Récupère la liste de toutes les agences ou points de service disponibles.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/point-service-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/point-service-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/type-piece-identite-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Types de Pièce d'Identité"
      description: |
        Liste des Types de Pièce d'Identité. Récupère la liste des types de pièces d'identité acceptés (CNI, Passeport, etc.).
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/type-piece-identite-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/type-piece-identite-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/gestionnaire-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Gestionnaires"
      description: |
        Liste des Gestionnaires. Récupère la liste des gestionnaires de comptes.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/gestionnaire-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/gestionnaire-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/periodicite-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Périodicités"
      description: |
        Liste des Périodicités. Récupère la liste des périodicités de remboursement possibles pour un crédit.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/periodicite-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/periodicite-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/motif-decision-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Motifs de Décision"
      description: |
        Liste des Motifs de Décision. Récupère la liste des motifs possibles pour une décision de crédit (ex: 'Accepté', 'Refusé pour solvabilité').
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/motif-decision-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/motif-decision-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/object-fin-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Objets de Financement"
      description: |
        Liste des Objets de Financement. Récupère la liste des objets de financement possibles pour une demande de crédit.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/object-fin-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/object-fin-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/source-fin-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Sources de Financement"
      description: |
        Liste des Sources de Financement. Récupère la liste des sources de financement possibles.
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/source-fin-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/source-fin-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/zone-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des zones"
      description: |
        Liste des zones. Récupère la liste des zones acceptés .
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/zone-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/zone-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/profession-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des Professions"
      description: |
        Liste des Professions. Récupère la liste des professions acceptés (CNI, Passeport, etc.).
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/profession-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/profession-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/pays-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des pays"
      description: |
        Liste des pays. Récupère la liste des pays acceptés .
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/pays-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/pays-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


  /api-perfect/v1/itf/ref/nationalite-list:
    get:
      tags: [vision-rest]
      servers:
        - url: http://10.243.12.5:8080/perfect-vision-smico
          description: Contexte non déployé au 2026-09-30 (WAR présent, pas dans webapps). VPN seulement.
      summary: "Liste des nationalités"
      description: |
        Liste des nationalités. Récupère la liste des nationalités acceptés .
        
        Contrat repris du portail CAGECFI (visiondaw.cagecfi.pro:3030), pas rejoué sur SMICO.
        Chemin portail : `{{baseUrl}}/gateway-perfect/ref/nationalite-list`.
        Chemin dans le WAR SMICO : `/api-perfect/v1/itf/ref/nationalite-list` (contexte `/perfect-vision-smico`, non déployé).
        Le préfixe n'est pas un simple changement de baseUrl : le portail parle à une gateway `/gateway-perfect`, le binaire client expose `/api-perfect/v1/itf` (auth : `/api-perfect/v1/oauth`).
      responses:
        "200":
          description: Forme documentée par CAGECFI. Non appelée sur SMICO.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CagecfiRefListResponse"
        "401":
          description: Bearer absent ou refusé (non vérifié)


components:
  schemas:
    CagecfiRefItem:
      type: object
      description: Élément de référentiel (détail documenté pour les devises ; les autres listes renvoient aussi `datas`).
      properties:
        id:
          type: string
        code:
          type: string
        libelle:
          type: string
      additionalProperties: true
    CagecfiRefListResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        datas:
          type: array
          items:
            $ref: "#/components/schemas/CagecfiRefItem"
    CagecfiAccessToken:
      type: object
      properties:
        accessToken:
          type: string
          description: Jeton à renvoyer dans Authorization Bearer.

    Cagecfi_api_perfect_v1_itf_crd_simpleRequest:
      type: object
      required: [externalId, callbackUrl, idPointService, idPeriodicite, taux, nombreEcheance, idObjetFinancement, idGestionnaire, idProduitCrd, idProduitRemb, montantDemande, codeDevise]
      properties:
        externalId:
          type: string
          description: "Identifiant unique de la demande provenant du système externe."
        callbackUrl:
          type: string
          description: "URL de callback pour les notifications."
        idPointService:
          type: string
          description: "Identifiant du point de service."
        numManuel:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        codeAdherent:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        numPieceIdentite:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        idPeriodicite:
          type: string
          description: "Identifiant de la périodicité de remboursement (ex: 'MENSUEL')."
        taux:
          type: number
          description: "Taux d'intérêt annuel du crédit (ex: 5.5)."
        nombreEcheance:
          type: number
          description: "Nombre total d'échéances pour le remboursement."
        idObjetFinancement:
          type: string
          description: "Identifiant de l'objet du financement (motif du crédit)."
        idGestionnaire:
          type: string
          description: "Identifiant du gestionnaire de compte."
        idProduitCrd:
          type: string
          description: "Identifiant du produit de crédit."
        idProduitRemb:
          type: string
          description: "Identifiant du produit utilisé pour le remboursement."
        montantDemande:
          type: number
          description: "Montant total du crédit demandé."
        codeDevise:
          type: string
          description: "Code de la devise (ex: 'XOF')."
    Cagecfi_api_perfect_v1_itf_crd_simpleResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        externalId:
          type: string
        numDemande:
          type: string
        refDemande:
          type: string
        numContrat:
          type: string
        limitCredit:
          type: number
        montant:
          type: number
        codeDevise:
          type: string
        dateOperation:
          type: string
        context:
          type: string
    Cagecfi_api_perfect_v1_itf_crd_operationRequest:
      type: object
      required: [externalId, callbackUrl, refDemande, numeroComptePartenaire, action, idJournalOperation]
      properties:
        externalId:
          type: string
          description: "Identifiant unique de l'opération provenant du système externe."
        callbackUrl:
          type: string
          description: "URL de callback."
        numManuel:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        codeAdherent:
          type: string
          description: "Identifiant de l'adhérent."
        numPieceIdentite:
          type: string
          description: "Identifiant de l'adhérent."
        refDemande:
          type: string
          description: "Référence unique de la demande de crédit à opérer."
        numeroComptePartenaire:
          type: string
          description: "Numéro du compte partenaire pour l'opération (ex: compte pour le déboursement)."
        action:
          type: string
          description: "L'action à effectuer (ex: 'DECAISSEMENT', 'REMBOURSEMENT')."
        idJournalOperation:
          type: string
          description: "Identifiant du journal comptable pour l'opération."
    Cagecfi_api_perfect_v1_itf_crd_operationResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        externalId:
          type: string
        numTransaction:
          type: string
        numeroRecu:
          type: string
        montant:
          type: number
        codeDevise:
          type: string
        dateOperation:
          type: string
        context:
          type: string
    Cagecfi_api_perfect_v1_itf_crd_update_limitRequest:
      type: object
      required: [externalId, limitCredit]
      properties:
        externalId:
          type: string
          description: "Identifiant unique de la demande provenant du système externe."
        numManuel:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        codeAdherent:
          type: string
          description: "Identifiant de l'adhérent."
        numPieceIdentite:
          type: string
          description: "Identifiant de l'adhérent."
        limitCredit:
          type: number
          description: "Limite de crédit initiale. Mettre 0 par défaut."
    Cagecfi_api_perfect_v1_itf_crd_update_limitResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        codeAdherent:
          type: string
        numManuel:
          type: string
        limitCredit:
          type: number
        idPointService:
          type: string
        nomPointService:
          type: string
        context:
          type: string
    Cagecfi_api_perfect_v1_oauthRequest:
      type: object
      required: [username, password, scope]
      properties:
        username:
          type: string
          description: "Le nom d'utilisateur pour l'accès API."
        password:
          type: string
          description: "Le mot de passe associé à l'utilisateur."
        scope:
          type: string
          description: "La portée d'accès. Doit avoir la valeur `perfect`."
    Cagecfi_api_perfect_v1_itf_adh_adhesion_individuRequest:
      type: object
      required: [externalId, limitCredit, callbackUrl, idPointService, nom, prenoms, idTypeClient, idProduitEpg, dateNaissance, lieuNaissance, civilite, statutMatrimonial, nomConjoint, idTypePieceIdentite, numPieceIdentite, dateEtablissementPiece, dateExpirationPiece, idGestionnaire, idZone, contact, adresseContact, telephone, fax, email, boitePostale, ville, adresse, idProfession, idNationalite, ayantDroit, tuteur, domicile, distance, observations]
      properties:
        externalId:
          type: string
          description: "Identifiant unique de la requête provenant du système externe."
        limitCredit:
          type: number
          description: "Limite de crédit initiale. Mettre 0 par défaut."
        callbackUrl:
          type: string
          description: "URL de callback pour les notifications."
        idPointService:
          type: string
          description: "Identifiant du point de service."
        nom:
          type: string
          description: "Nom de famille de l'individu."
        prenoms:
          type: string
          description: "Prénom(s) de l'individu."
        idTypeClient:
          type: string
          description: "Identifiant du type de client (ex: 'PART')."
        idProduitEpg:
          type: string
          description: "Identifiant du produit d'épargne souscrit."
        dateNaissance:
          type: string
          description: "Date de naissance au format 'YYYY-MM-DD'."
        lieuNaissance:
          type: string
          description: "Lieu de naissance."
        civilite:
          type: string
          description: "Civilité (ex: 'M.', 'Mme')."
        statutMatrimonial:
          type: string
          description: "Statut matrimonial (ex: 'Célibataire')."
        nomConjoint:
          type: string
          description: "Nom complet du conjoint (mettre 'N/A' si non applicable)."
        idTypePieceIdentite:
          type: string
          description: "Identifiant du type de pièce d'identité."
        numPieceIdentite:
          type: string
          description: "Numéro de la pièce d'identité."
        dateEtablissementPiece:
          type: string
          description: "Date d'établissement de la pièce ('YYYY-MM-DD')."
        dateExpirationPiece:
          type: string
          description: "Date d'expiration de la pièce ('YYYY-MM-DD')."
        idGestionnaire:
          type: string
          description: "Identifiant du gestionnaire de compte."
        idZone:
          type: string
          description: "Identifiant de la zone géographique."
        contact:
          type: string
          description: "Nom du contact principal (souvent le nom de la personne)."
        adresseContact:
          type: string
          description: "Adresse du contact."
        telephone:
          type: string
          description: "Numéro de téléphone principal."
        fax:
          type: string
          description: "Numéro de fax (mettre 'N/A' si non applicable)."
        email:
          type: string
          description: "Adresse e-mail."
        boitePostale:
          type: string
          description: "Boîte postale (mettre 'N/A' si non applicable)."
        ville:
          type: string
          description: "Ville de résidence."
        adresse:
          type: string
          description: "Adresse complète de résidence."
        idProfession:
          type: string
          description: "Identifiant de la profession."
        idNationalite:
          type: string
          description: "Identifiant de la nationalité."
        estPersonnel:
          type: boolean
          description: "Indique si c'est un membre du personnel."
        estAlphabetise:
          type: boolean
          description: "Indique si l'adhérent est alphabétisé."
        estDirigeant:
          type: boolean
          description: "Indique si l'adhérent est un dirigeant."
        estDuplicata:
          type: boolean
          description: "Indique s'il s'agit d'un duplicata."
        ayantDroit:
          type: string
          description: "Nom de l'ayant droit (mettre 'N/A' si non applicable)."
        tuteur:
          type: string
          description: "Nom du tuteur légal (mettre 'N/A' si non applicable)."
        domicile:
          type: string
          description: "Description du domicile."
        distance:
          type: number
          description: "Distance en km par rapport à l'agence."
        observations:
          type: string
          description: "Observations ou notes additionnelles (peut être une chaîne vide)."
    Cagecfi_api_perfect_v1_itf_adh_adhesion_individuResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        externalId:
          type: string
        codeAdherent:
          type: string
        numManuel:
          type: string
        limitCredit:
          type: number
        estValide:
          type: boolean
        idPointService:
          type: string
        nomPointService:
          type: string
        dateOperation:
          type: string
        nomAdherent:
          type: string
        numPieceIdentite:
          type: string
        telephone:
          type: string
        email:
          type: string
        boitePostale:
          type: string
        ville:
          type: string
        adresse:
          type: string
        dateInscription:
          type: string
        context:
          type: string
    Cagecfi_api_perfect_v1_itf_crd_situationRequest:
      type: object
      required: [refDemande]
      properties:
        numManuel:
          type: string
          description: "Identifiant de l'adhérent (au moins un des trois est requis)."
        codeAdherent:
          type: string
          description: "Identifiant de l'adhérent."
        numPieceIdentite:
          type: string
          description: "Identifiant de l'adhérent."
        refDemande:
          type: string
          description: "Référence unique de la demande de crédit à consulter."
    Cagecfi_api_perfect_v1_itf_crd_situationResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        numDemande:
          type: string
        refDemande:
          type: string
        numContrat:
          type: string
        montant:
          type: number
        codeDevise:
          type: string
        context:
          type: string
        datas:
          type: array
          items:
            type: object
            additionalProperties: true
    Cagecfi_api_perfect_v1_itf_adh_adhesion_entrepriseRequest:
      type: object
      required: [externalId, idPointService, nom, sigle, numOrdre, idProduitEpg, identificationNationale, dateCreation, idGestionnaire, siegeSocial, idZone, contact, adresseContact, telephone, fax, email, boitePostale, ville, idSecteurActivite, idTypeClient, nbreSignature, adresse]
      properties:
        externalId:
          type: string
          description: "Identifiant unique de la requête provenant du système externe."
        limitCredit:
          type: number
          description: "Limite de crédit initiale. Valeur par défaut : 0."
        callbackUrl:
          type: string
          description: "URL de callback pour les notifications. Valeur par défaut : 'EMPTY'."
        idPointService:
          type: string
          description: "Identifiant du point de service."
        nom:
          type: string
          description: "Nom de l'entreprise."
        sigle:
          type: string
          description: "Sigle ou abréviation de l'entreprise."
        numOrdre:
          type: string
          description: "Numéro d'ordre d'enregistrement."
        idProduitEpg:
          type: string
          description: "Identifiant du produit d'épargne souscrit."
        identificationNationale:
          type: string
          description: "Numéro d'identification nationale de l'entreprise."
        dateCreation:
          type: string
          description: "Date de création de l'entreprise (YYYY-MM-DD)."
        idGestionnaire:
          type: string
          description: "Identifiant du gestionnaire du compte."
        siegeSocial:
          type: string
          description: "Adresse du siège social."
        estDuplicata:
          type: boolean
          description: "Indique s'il s'agit d'un duplicata."
        idZone:
          type: string
          description: "Identifiant de la zone géographique."
        contact:
          type: string
          description: "Nom du contact principal."
        adresseContact:
          type: string
          description: "Adresse du contact."
        telephone:
          type: string
          description: "Numéro de téléphone principal."
        fax:
          type: string
          description: "Numéro de fax (mettre 'N/A' si non applicable)."
        email:
          type: string
          description: "Adresse e-mail."
        boitePostale:
          type: string
          description: "Boîte postale."
        ville:
          type: string
          description: "Ville."
        idSecteurActivite:
          type: string
          description: "Identifiant du secteur d'activité."
        idTypeClient:
          type: string
          description: "Identifiant du type de client."
        nbreSignature:
          type: number
          description: "Nombre de signataires autorisés."
        adresse:
          type: string
          description: "Adresse complète."
        distance:
          type: number
          description: "Distance en km par rapport à l'agence."
        numCarteOperateurEconomique:
          type: string
          description: "N° de carte / Régistre de commerce"
    Cagecfi_api_perfect_v1_itf_adh_adhesion_entrepriseResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        externalId:
          type: string
        codeAdherent:
          type: string
        numManuel:
          type: string
        limitCredit:
          type: number
        estValide:
          type: boolean
        idPointService:
          type: string
        nomPointService:
          type: string
        dateOperation:
          type: string
        nomAdherent:
          type: string
        identificationNationale:
          type: string
        telephone:
          type: string
        email:
          type: string
        boitePostale:
          type: string
        ville:
          type: string
        adresse:
          type: string
        dateInscription:
          type: string
        context:
          type: string
    Cagecfi_api_perfect_v1_itf_adh_situationRequest:
      type: object
      properties:
        numManuel:
          type: string
          description: "Numéro de dossier manuel de l'adhérent."
        codeAdherent:
          type: string
          description: "Code unique de l'adhérent dans le système."
        numPieceIdentite:
          type: string
          description: "Numéro de la pièce d'identité de l'adhérent."
    Cagecfi_api_perfect_v1_itf_adh_situationResponse:
      type: object
      properties:
        responseCode:
          type: integer
        message:
          type: string
        codeAdherent:
          type: string
        numManuel:
          type: string
        limitCredit:
          type: number
        estValide:
          type: boolean
        idPointService:
          type: string
        nomPointService:
          type: string
        nomAdherent:
          type: string
        numPieceIdentite:
          type: string
        identificationNationale:
          type: string
        telephone:
          type: string
        email:
          type: string
        boitePostale:
          type: string
        ville:
          type: string
        adresse:
          type: string
        dateInscription:
          type: string
        context:
          type: string
    JuakaliRequest:
      type: object
      required: [codeapi, apikey, methode]
      properties:
        codeapi:
          type: string
          example: API_MOBILE
        apikey:
          type: string
          description: Base64(codeAgent:passeAgent)
        methode:
          type: string
          enum:
            - wlisteagence
            - wlisteobjetfin
            - wlisteprofession
            - wListelangue
            - wListedevise
            - wlistepays
            - wListetypepiece
            - wlisteproduitdetail
            - wlistegestionnaire
            - signaletique
            - creditliste
            - wtableauamortissement
            - wtableauremboursement
            - relevecompte
            - wdemandedecredit
            - wadhesionclient
            - creditdebloccage
        referenceope:
          type: string
        codeclient:
          type: string
        numdossier:
          type: string
        idagence:
          type: string
        numerocompte:
          type: string
        typeproduit:
          type: string
        datedebut:
          type: string
        datefin:
          type: string
        nbreligne:
          type: string
    JuakaliResponse:
      type: object
      properties:
        codereponse:
          type: string
          description: "100000=OK, 100001=erreur, 100003=métier/absente, 100206=HTTP non autorisé"
        descriptionreponse:
          type: string
        idapicall:
          type: string
      additionalProperties: true
    SoapPmobileOperation:
      type: object
      description: Nom d'opération SOAP WEBDEV (le transport réel est XML, pas cet objet JSON).
      properties:
        operation:
          type: string
          enum:
            - wListeDevise
            - dateheureserveur
            - wAdhesionClient
            - wAdhesionClientV1
            - wAdhesionClientV2
            - wAdhesionGrpe
            - wAdhesionGrpe1
            - wAdhesionMembre
            - wAgenceCategorie
            - wAgenceUtilisateur
            - wAgentEtSousListe
            - wAgentIdentite
            - wAPIGIMAC
            - wApiGimacSituation
            - wAPIGTP
            - wAPIGTPV2
            - wBankToWalet
            - wBankToWaletV2
            - wBankToWaletV3
            - wBankToWaletV4
            - wBrouillard
            - wBrouillard2
            - wBrouillardV1
            - wBrouillardV3
            - wChangementLangue
            - wChangementMotdePasse
            - wChangementPin
            - wCodeIDIdentite
            - wCodeIDIdentite1
            - wCodeIDIdentiteV1
            - wCommissionMbanking
            - wCommissionMonetique
            - wCommissionRepartition
            - wCommissionRepartitionV1
            - wCompteCreation
            - wComptes
            - wComptesAdherent_Agent
            - wComptesAgent
            - wComptesAssociation
            - wComptesclient
            - wCompteSituation
            - wComptesRecherche
            - wComptesRechercheV1
            - wComptesRechercheV2
            - wContratUtilisateur
            - wConversionDevise
            - wDemandeChequier
            - wDemandeDecouvert
            - wDemandeDeCredit
            - wDemandeDeCreditV2
            - wDemandeDeCreditV3
            - wDemandeDeCreditV4
            - wDemandeService
            - wDemandeServiceAnnule
            - wDemandeServiceListe
            - wDemandeServiceListeV1
            - wDemandeServiceListeV2
            - wDemandeServiceReponses
            - wDemandeServiceRubrique
            - wDemandeServiceTypeListe
            - wDemandeServiceTypeListeV1
            - wDemandeServiceV1
            - wDemandeServiceV2
            - wDepotCompte
            - wDepotComptePartenaire
            - wDepotCompteV1
            - wDepotCompteV2
            - wDepotTaxe
            - wEcrireInformationTag
            - wEmpreinteEnregistre
            - wEmpreinteEnregistre2
            - wEmpreinteEnregistreV2
            - wEmpreintePOSVerifId
            - wEmpreintePOSVerifIdV2
            - wEmpreintePOSVerifTemplate
            - wEmpreinteSupprime
            - wEmpreinteSupprimeV2
            - wEnvoiPINtemporaire
            - wEnvoyerMailAAgence
            - wEnvoyerTelephone
            - wFingerEnregistre
            - wFormationListe
            - wFormationListeModule
            - wFormationModuleListe
            - wFormationSeanceAdd
            - wFormationSeanceListe
            - wFormationSeancePresence
            - wGenCodeOTP
            - wGenCodeOTPV1
            - wGenCodeOTPV2
            - wGenCodeOTPV3
            - wGenRaport
            - wGenRaportPerso
            - wGrpeCreation
            - wIDClientCode
            - wIDClientCode1
            - wIDIdentiteCode
            - wIDIdentiteCode1
            - wIDIdentiteCodeV2
            - wIndication
            - wIndicationV2
            - wInfoCodeClientOperation
            - wInfoIdentiteAdresse
            - wInfoIdentitePiece
            - wInfoProduit
            - wInfoIdentite
            - wLesdevises
            - wListeAgent
            - wListeCarteMonetique
            - wListeClient
            - wListeComptePartenaire
            - wListeDecouvert
            - wListeDemandesCredits
            - wListeDossierCreditClient
            - wListeDossierCreditClientV1
            - wListeFonction
            - wListeGroupementMembre
            - wlisteGroupementMembreAbsentFormation
            - wListeLangue
            - wListeMembreImpayes
            - wListeMembreInfos
            - wListeMesCartesMonetique
            - wListeModuleFormation
            - wListeObjetFin
            - wListeObjetFinV1
            - wListeOperateur
            - wListeOperateurDetail
            - wListePartenaire
            - wListePartenaireV1
            - wListePartenariat
            - wListePays
            - wlistePaysParam
            - wListePeriodicite
            - wListePeriodiciteV1
            - wListePeriodiciteV2
            - wListeProduit
            - wListeProduitDetail
            - wListeProfession
            - wListeQuestion
            - wListeQuestionCode
            - wListeQuestionIdIdentite
            - wListeQuestionReponse
            - wListeRepertoire
            - wListeTypeChequier
            - wListeTypeFeuillet
            - wListeTypeFeuilletV1
            - wListeTypeFeuilletV2
            - wListeTypeOperation
            - wListeTypeOperationV2
            - wListeTypePiece
            - wListeZone
            - wListOptionMenu
            - wLitLibelle
            - wMajIdEmpreinte
            - wMajInfo
            - wMajInfoMembre
            - wMajInfoMembreIndiv
            - wMajPremiereCnx
            - wMajReponseQST
            - wMontantCommission
            - wMontantCommissionMomo
            - wMontantCommissionPartenaire
            - wMontantCommissionPartenaireV2
            - wMontantCommissionV2
            - wMontantCommissionV3
            - wMontantRemisePartenaire
            - wMonVoucherGenCode
            - wNomPrenoms
            - wNomPrenomsClient
            - wNumtel
            - wParamCategorieListe
            - wParamLecture
            - wParamLectureListe
            - wPartenaireOperation
            - wPartenaireOperationV1
            - wProduitDeCreditInfo
            - wProspectCreation
            - wProspectCreationPar
            - wProspectCreationParV1
            - wProspectCreationParV2
            - wProspectCreationParV3
            - wProspectCreationParV4
            - wProspectCreationV1
            - wPushAjouterTokenNotif
            - wPushEnvoieNotification
            - wRechargeCredit
            - wRechercheClient
            - wRechSchemasCompte
            - wReeditionBordereau
            - wReInitMotdePasse
            - wReleveCompte
            - wReleveCompteNew
            - wReleveCompteV1
            - wReleveCompteV2
            - wReleveCompteV3
            - wReleveCompteV4
            - wRepertoire
            - wReponseQST
            - wRetraitCompte
            - wRetraitCompteV1
            - wRetraitCompteV2
            - wRetraitCompteV3
            - wRetraitInitie
            - wRetraitInitieV1
            - wRetraitTransfert
            - wRetraitTransfertV1
            - wRetraitTransfertV2
            - wSessionEtat
            - wSessionFermeture
            - wSessionFermetureV2
            - wSessionInfo
            - wSessionOuverture
            - wSessionOuvertureV2
            - wSessionOuvertureV3
            - wSimulerTableauAmort
            - wSituationRemiseCheque
            - wSituationRemiseChequeV1
            - wsLesImpressions
            - wSoldeCompte
            - wSoldeCompteAgent
            - wSouscriptionClient
            - wSouscriptionClientV1
            - wSouscriptionClientV2
            - wTableauAmortissement
            - wTableauRemboursement
            - wTaxeListContribuable
            - wTaxeListContribuable2
            - wTaxeMontant
            - wTaxeOperation
            - wtestconnectivite
            - wTontineAdhesion
            - wTontineAdhesionV2
            - wTontineAdhesionV3
            - wTontineCycleCloture
            - wTontineDepotCompte
            - wTontineListeCycle
            - wTontineMajCycle
            - wTontineSouscription
            - wTontineSouscriptionV2
            - wTontineZoneCollecte
            - wTransfertannule
            - wTransfertCompte
            - wTransfertCompteAgent
            - wTransfertCompteV1
            - wTransfertCompteV2
            - wTransfertDArgent
            - wTransfertDArgentInfo
            - wTransfertDargentListe
            - wTransfertDargentListeV1
            - wTransfertDArgentMAJ
            - wTransfertInfo
            - wTransfertNational
            - wTransfertNationalListe
            - wTransfertNationalListeV2
            - wTransfertNationalV2
            - wTrouveEmail
            - wTrouverDevise
            - wTrouverIdEmpreinte
            - wTrouverIdentite
            - wTrouverTypeOperation
            - wTrouveTelephone
            - wTypeOperationListe
            - wTypeOperationParam
            - wVerifCodeOTP
            - wVerifEtatService
            - wVerifFormationGrpe
            - wVerifierReponse
            - wVerifierReponseCode
            - wVerifierSession
            - wVerifNumCell
            - wVerifPinAgent
            - wVerifPinAgentV2
            - wVerifPinClient
            - wVisiteTerrain
            - wVisiteType
            - wWaletToBank
            - wWaletToBankV2
            - wWaletToBankV3
            - wWaletToBankV4
            - wWaletToBankV5
            - wZoneListe
            - wSouscriptionClientV3
            - wListeOperateurNum
            - wListeAgences
            - wProspectCreationParV5
            - wWaletToBankV6
            - wCommissionMbankingV2
            - wTontineLimiteSoldeAgent
            - wTontineListeCyclesOuverts
            - wListeProduitV1
            - wListeMonetiquePartenaire
            - wListeNotification
            - wRetraitCompteV3_sauv_04_10_2024
            - wListePublicite
            - wProspectCreationParV6
            - wProspectCreationParV7
            - WBankToWaletOrange
            - wTontineMajCyclePmobile
            - wReconstitutCodeAdherantTontine
            - wIDIdentiteNumManuelPerfect
            - wTontineZoneCollecte1
            - wRetraitCompteV4
            - wVerifMembreActif
            - wVerifclientDesactiver
            - wListeMembreInfos1
            - wGrpeCreation2
            - wAdhesionGrpe2
            - wBrouillardV5
            - wBrouillardV4
            - wAdhesionClientV3
            - wDepotCompteV3
            - wAdhesionGrpe3
            - wPaiementFacture
            - wVerifNatureCompte
            - wDemandeDeCreditV5
            - wOffExtraireClient
            - wOffExtraireAutresInfos
            - wOff_CodePin
            - wOff_CompteAgentOpe
            - wOff_CompteClient
            - wOff_ListeAgence
            - wOff_ListeClient
            - wOff_ListeCycles
            - wOff_ListeDevise
            - wOff_ListeOperateur
            - wOff_ListePays
            - wOff_ListeProduit
            - wOff_ListeProfession
            - wOff_ListeTypePiece
            - wOff_ListeZone
            - wOff_SyncAdhesion
            - wOff_SyncCycle
            - wOff_SyncTransaction
            - wOff_LesClientsAExtraire
    PerfectWsOperation:
      type: object
      description: Nom de méthode IPERFECTWS.
      properties:
        operation:
          type: string
          enum:
            - sessionOuverture
            - sessionEtat
            - infoSession
            - changerMotPasse
            - compteEpargneClient
            - infoClient
            - pieceIdentiteClient
            - adresseClient
            - situationCompte
            - soldeCompte
            - soldeCompteAffiche
            - releveCompte
            - depotCompte
            - retraitCompte
            - annulationOperation
            - transfertCompte
            - effectuerOperation
            - statutOperation
            - sendMessage
            - listeDossierdeCredit
            - tableauAmortissement
            - tableauRemboursement
            - listeProduitDeCredit
            - simulerTableauAmortissement
            - majInfoClient
            - ajouteDecouvert
            - situationRemiseCheque
            - listeTypeChequier
            - listeNbreFeuillet
            - demandeChequier
            - adhesionClient
            - ajoutephotoClient
            - listephotoClient
            - adhesionMembre
            - adhesionGroupe
            - annulationAdhesionMembre
            - listerMembre
            - AnnulationAdhesionClient
            - listerFonctionMembre
            - listerMotifDepart
            - listeTypeAdherent
            - tontineAdhesion
            - tontineOuvreCycle
            - tontineCycleInfo
            - tontineListeZone
            - tontineListeCpte
            - tontineDepot
            - dateAgent
            - demandeCredit
            - deblocageCredit
            - infoCredit
            - annulationDeblocageCredit
            - remboursementCreditManuel
            - listeDemandeCredit
            - demandeCreditAvecRepartition
            - remboursementCredit
            - deblocageCompte
            - etatCompte
            - compteCreation
            - decouvertAccorde
            - situationRemboursement
            - accorderCredit
            - grandLivre
