# Juakali — webservice REST JSON V4

Source : *Documentation du webservice – SMICO*, projet JUAKALI, version **V4 du 07/06/2023**. Un POST JSON, routage par `methode`. Le PDF demande de respecter la casse.

Les exemples nominatifs, numéros de compte, dossiers, téléphones et la clé documentaire ne sont pas recopiés. Les champs, formats et codes le sont. Les phrases du PDF contredites par leur propre exemple ne sont pas reprises comme règles.

## Transport et authentification

| Élément | Valeur |
|---|---|
| Protocole | REST JSON sur HTTPS, port 443 |
| URL de test du PDF | `https://demovision.cagecfi.pro/API_SMICO_WEB/FR/APIEXTERNE/pmobileapi.awp` — hôte CAGECFI, pas un hôte SMICO |
| Prod SMICO | `https://mobile2.smico.pro/API_JUAKALI_SMICO_WEB/FR/APIEXTERNE/pmobileapi.awp` et le même chemin sur `http://10.243.11.6` |
| `codeapi` | `API_MOBILE` |
| `apikey` | Base64 de `codeAgent:passeAgent`. Le PDF donne `0000:0000`, soit `MDAwMDowMDAw`. Cette clé documentaire est refusée sur les hôtes SMICO. |

## Codes

| Code | Sens dans le PDF |
|---|---|
| `100000` | Succès |
| `100001` | Erreur interne |
| `0001` | Erreur interne (second code, même libellé) |
| `100003` | Erreur sur l’opération. Le libellé est dynamique. |
| `100206` | Absent du PDF. Constat SMICO : GET refusé. |

Orthographes des libellés selon les exemples : `descriptreponse`, `descriptionreponse` ou `detailreponse`.

## Dictionnaire

Dates `AAAAMMJJ`, sauf `dateope` du relevé (`DD-MM-YYYY`).

| Champ | Format | Règle |
|---|---|---|
| `apikey` | string | Base64 `codeAgent:passeAgent` |
| `methode` | string | Nom de la méthode, casse significative |
| `referenceope` | string | Référence d’appel |
| `nom` / `prenom` / `postnom` | string | `postnom` = nom qui suit le nom de famille |
| `datenais` | 8 chiffres | Date de naissance |
| `lieunais` | string | |
| `sexe` | 1 caractère | `M` masculin, `F` féminin |
| `numpiece` | string | Numéro de pièce |
| `datedelivrance` / `dateexpiration` | 8 chiffres | |
| `lieudelivrancepce` | string | Lieu de délivrance |
| `autorite` | string | Autorité de délivrance |
| `adressegeo` / `numrue` / `nomrue` / `bp` / `ville` | string | |
| `email` | string | |
| `urlphoto` / `urlsignature` / `urlpiece` | string | URL. La réponse `signaletique` orthographie `ulrphoto`, `ulrsignature`, `ulrpiece`. |
| `numtel` / `numtel2` | 9 caractères dans le dictionnaire | Téléphone sans indicatif. Préfixes acceptés par le PDF : 99, 98, 97, 49, 47, 90, 84, 85, 89, 80, 86, 91, 81, 82, 83. La liste du PDF répète 99, 98, 97 et 90. |
| `indicatif` | string | Exemple de forme `243` |
| `civilite` | numérique | `1` Madame, `2` Mademoiselle, `3` Monsieur. L’exemple d’adhésion envoie une chaîne vide. |
| `sitmatrim` | numérique | `1` marié, `2` célibataire, `3` divorcé, `4` veuf. L’exemple d’adhésion envoie une chaîne vide. |
| `nommere` | string | |
| `idpaysorigine` / `idpaysnationalite` / `idpaysdelivrancepce` / `idpaysadresse` | numérique | Identifiants issus de la liste des pays |
| `idtypepiece` | numérique | Liste des types de pièce |
| `idprofession` | numérique | Liste des professions |
| `idlangue` | numérique | Liste des langues. Le dictionnaire renvoie vers la liste des professions : c’est une erreur de renvoi. |
| `iddevise` | numérique | Liste des devises |
| `idproduit` | numérique | Liste des produits |
| `referencedemande` | string | Référence de la demande de crédit |
| `datedemande` | 8 chiffres | |
| `montantdemande` / `taux` / `mensualite` / `duree` | numérique dans le dictionnaire | Dans l’exemple, `taux` et `duree` sont des chaînes. |
| `codeclient` | string | Code PERFECT |
| `differe` / `grace` | numérique | Mois de différé et de grâce |
| `idobjetfinancement` | numérique | Liste des objets de financement |
| `idagence` | numérique | Liste des agences. Taille dictionnaire : 1, contredite par les `idagence` de la liste (1 à 9 dans l’exemple). |
| `idperiodicite` | numérique | Présent seulement dans l’exemple de `wdemandedecredit`. Pas de liste dans ce PDF. |
| `numdossier` | string | Numéro de dossier |
| `numerocompte` | string | |
| `nbreligne` | numérique | Nombre de lignes du relevé. Le texte du relevé dit 5 par défaut. |
| `datedebut` / `datefin` | 8 chiffres | Période du relevé |
| `typeproduit` | 1 caractère | `C` crédit, `E` épargne. La section produits écrit « E pour les crédits Epargne » : le dictionnaire fait foi, `E` est l’épargne. |

## Méthodes

Écritures : `wadhesionclient`, `wdemandedecredit`, `creditdebloccage`. Ne pas les appeler pour un test.

### `wadhesionclient`

Création d’un adhérent. Entrée : enveloppe `codeapi`, `apikey`, `methode`, `referenceope`, `idagence`, puis les champs d’identité du dictionnaire jusqu’à `idproduit` (`nom`, `postnom`, `prenom`, `datenais`, `lieunais`, `sexe`, `numpiece`, `datedelivrance`, `dateexpiration`, `lieudelivrancepce`, `autorite`, `adressegeo`, `numrue`, `nomrue`, `bp`, `ville`, `email`, `urlphoto`, `urlsignature`, `numtel`, `numtel2`, `indicatif`, `civilite`, `sitmatrim`, `urlpiece`, `nommere`, `idpaysorigine`, `idpaysnationalite`, `idtypepiece`, `idpaysdelivrancepce`, `idpaysadresse`, `idprofession`, `idlangue`, `iddevise`, `idproduit`).

Réponse : `codereponse`, `descriptreponse`, `referencereponse`, `lidentite`, `codadh`, `idcompte`, `numcpte`, `libcpte`.

### `wdemandedecredit`

Le PDF dit « consulter son solde ». L’exemple est une demande de crédit : cette phrase n’est pas la règle.

Entrée : `referencedemande`, `datedemande`, `montantdemande`, `taux`, `mensualite`, `duree`, `codeclient`, `idproduit`, `idperiodicite`, `differe`, `grace`, `idobjetfinancement`.

Réponse : `codereponse`, `descriptreponse`, `referencereponse`, `numcpte`, `montantremise`.

### `creditliste`

Lecture des crédits d’un client. Entrée : `referenceope`, `codeclient`.

Réponse : `methodeoperation`, `referenceope`, `codereponse`, `detailreponse`, `referencereponse`, `codeclient`, `detail[]`.

Chaque dossier : `numdossier`, `periodicite`, `dureepret`, `tauxinteret`, `dateaccord`, `datepremiereeche`, `datederniereeche`, `montantpret`, `mensualite`, `impaye`, `encours`, `etatpret`.

`etatpret` dans le PDF : `NR` non remboursé, `TR` remboursé. L’exemple contient `DC`, qui n’est pas dans cette légende. En prod le 2026-10-02, une ligne réelle contenait aussi `dateprochaineecheance`, absent de l’exemple.

### `wtableauamortissement`

Lecture de l’échéancier. Entrée : `numdossier`.

Réponse : `codereponse`, `descriptionreponse`, `detail[]` avec `numerodossier`, `numordre`, `dateecheance` (`AAAAMMJJ`), `interet`, `capital`, `epargne`, `commission`, `commissionint`, `commissioncom`, `capitalrestantdu`, `totalrembourse` (booléen), `rembourseanticipe` (booléen).

### `wtableauremboursement`

Lecture des remboursements déjà faits. Même phrase d’introduction que l’échéancier. Entrée Juakali : `numdossier` seulement. Ce n’est pas le corps Flash (`msisdn` + PIN, tableau nu).

Réponse : `codereponse`, `descriptionreponse`, `detail[]` avec `numerodossier`, `numerotransaction`, `dateecheance`, `dateremb`, `capitalremb`, `interetremb`, `epargneremb`, `commissionremb`, `penaliteremb`.

### `signaletique`

Lecture. Entrée : `referenceope`, `codeclient`.

Réponse : `methodeoperation`, `referenceope`, `numerocompte` (souvent vide), `refwallet`, `codereponse`, `detailreponse`, `ulrphoto`, `ulrpiece`, `ulrsignature`, `numtel`, `nom`, `prenom`, `sexe`, `email`, `adressegeo`, `datenaissance`, `codeclient`, `idclient`, `nomagence`, `encodephoto`, `encodesignature`, `encodepieceid`, `detailcompte[]`.

Compte : `idcompte`, `numerocompte`, `codedevise`, `nomproduit`, `nomcompte`, `typeproduit`, `nomdevise`, `idproduit`, `iban`.

Un `codeclient` inconnu en prod a répondu `100003` avec une tentative de création (« agence non trouvée »). N’appeler qu’avec un code déjà existant.

### `relevecompte`

Lecture. Entrée : `referenceope`, `numerocompte`, `nbreligne`, `datedebut`, `datefin`.

Réponse : `methodeoperation`, `referenceope`, `codereponse`, `detailreponse`, `numerocompte`, `codeagence`, `codedevise`, `codeproduit`, `typecompte`, `iban`, `referencereponse`, `soldedisponible`, `soldecomptable`, `detail[]`.

Ligne : `ref`, `dateope` (`DD-MM-YYYY`), `montant` (signé), `libelleope`, `ordretrie` (`YYYYMMDD` collé à la référence).

### `wlistegestionnaire`

Le PDF dit « consulter son solde ». L’exemple est une liste d’agents : cette phrase n’est pas la règle.

Entrée : `referenceope`, `idagence`.

Réponse : `codereponse`, `descriptreponse`, `listegestionnaire[]` avec `idagent`, `codegestionnaire`, `nomgestionnaire`.

### `wlisteproduitdetail`

Entrée : `typeproduit` (`C` ou `E`).

Réponse : `codereponse`, `descriptreponse`, `detail[]` avec `idproduit`, `nomproduit`, `typeproduit`, `nummanuel`, `typesolde`, `depotautorise`, `retraitautorise`, `transfertautorise`, `decouvertautorise`, `decouvertdureemax`, `decouvertmontantmax`, `decouverttaux`, `receptiontransfertautorise`, `adhesionautorise`, `prospectautorise`, `typeouverture`, `ouvertureautorise`, `creditmontantmin`, `creditmontantmax`, `credittauxmin`, `credittauxmax`, `creditdureemaxmois`, `creditdemandeautorise`, `creditsimulationautorise`, `deviseautorise`.

### `wlisteobjetfin`

Sans paramètre hors enveloppe. Réponse : `codereponse`, `descriptreponse`, `detail[]` avec `idobjet`, `nomobjet`, `nummanuel`.

### `wlisteprofession`

Réponse : `methodeoperation`, `codereponse`, `detailreponse`, `detail[]` avec `idProfession`, `nomProfession` (casse mélangée).

### Pays, types de pièce, langues, devises

Le PDF nomme `wListepays`, `wListetypepiece`, `wListelangue`, `wListedevise`. Plusieurs de ces sections recopient la description « liste des objets de financements ». Le nom de méthode fait foi.

En prod le 2026-10-02, `wlistepays` et `wListepays` répondent `100000` (18 pays). `wListe pays` (avec espace) répond `100003`. `wListetypepiece`, `wlistetypepiece`, `wListelangue` et `wListedevise` répondent `100000`.

Pays : `idpays`, `codiso`, `indicatifpays`, `longueurnum`, `nomnationalite`, `nompays`.

Pièce : `idpiece`, `nompiece`.

Langue : `idlangue`, `nomlangue`.

Devise : `iddevise`, `nomdevise`, `symbole`, `codeiso`, `arrondidevise`, `nomcourt`, `montantadh`, `montantadhgpe`.

### `wlisteagence`

Réponse : `codereponse`, `descriptreponse`, `detail[]` avec `idagence`, `nomagence`, `nummanuel`, `idpays`, `adresse`, `nummaison`, `nomrue`, `bp`, `ville`, `email`, `longitude`, `latitude`, `nompays`, `indicatifpays`, `numtel`, `messagebasreleve`.

L’exemple du PDF répète l’adresse et l’e-mail de Goma sur d’autres agences. Ce n’est pas un annuaire fiable. Les champs le sont.

### `creditdebloccage`

Le PDF dit « informations relatives sur les crédits ». Le corps est un déblocage. L’exemple de réponse est déjà en erreur.

Entrée : `referenceope`, `numdossier`, `idagence`. L’exemple met une espace devant `numdossier` et `idagence`.

Réponse d’exemple : `methodeoperation` = `wcreditdebloccage` (pas `creditdebloccage`), `codereponse` `100001`, `detailreponse`, `numeroDossier`.

Sur les hôtes SMICO, `creditdebloccage` et `wcreditdebloccage` répondent `100003` méthode non disponible. Ne pas rappeler cette méthode.
