Logo Blue Finalse
Console 
  Français   English


C#


  • DÉMARRER
  • Authentification
  • Hello World
  • Tarification
  • Rate Limit
  • CAS D'UTILISATION
  • Intégration UI FPay
  • Intégration UI personalisé
  • Interopérabilité  New
  • Liens et QRCodes de Paiement
  • Argent des tiers  New
  • Audit & Tableau de bord  New
  • REFÉRENCES
  • Attempt
  • AuthAccess
  • Deposit
  • FundRequest
  • QuasiTransfer
  • Transaction
  • Transfer
  • Wallet
Logo Blue FinalseLogo Blue Finalse
Javascript
Console 
  Français   English
  • DÉMARRER
  • Authentification
  • Hello World
  • Tarification
  • Rate Limit
  • CAS D'UTILISATION
  • Intégration UI FPay
  • Intégration UI personalisé
  • Interopérabilité  New
  • Liens et QRCodes de Paiement
  • Argent des tiers  New
  • Audit & Tableau de bord  New
  • REFÉRENCES
  • Attempt
  • AuthAccess
  • Deposit
  • FundRequest
  • QuasiTransfer
  • Transaction
  • Transfer
  • Wallet

Audit Reporting & Tableau de bord

Contexte  

Que ce soit pour un Audit, pour faire du reporting ou pour concevoir un tableau de bord, vous avez avec FPay la possibilité de poser des questions au système concernant l'ensemble des actions étant intervenues sur votre compte. Avec toujours la même simplicité, voici un exemple de questions que vous serez capable de poser à FPay :

  • Quelles sont les transactions de plus de 500 000 ₣ intervenues au débit de mon compte principal le mois dernier triées du plus gros montant au plus petit montant ?
  • Quels sont tous mes portefeuilles que je gère dont le solde est inférieur à 1 000 000 ₣ ?
  • Quels sont tous les transferts vers OrangeMoney que j'ai éffectué hier ?
  • Quelle est la plus grosse transaction vers ou depuis MtnMoney effectuée ce mois ci ?
  • Quelles sont les sorties d'argent échouées concernant MoovMoney ou OrangeMoney ?
  • Quelles sont toutes les entrées d'argent reçues depuis MoovMoney avant aujourd'hui classées de la plus récente à la plus ancienne ?
Lorsque vous saurez répondre aux questions ci dessus, nous sommes convaincu que vous serez capable de concevoir ou de vous faire assister par un expert en data analyse / data visualisation afin de réaliser des tableaux de bords pour présenter vos données de la manière suivante:
FPay Dashboard example

Pré Requis  

Javascript
Ce SDK nécessite
Node >=9.5

Authentification
Nous supposons que vous avez bien évidemment ouvert votre compte FPay et que vous êtes en possession de votre  token et de votre secretKey  obtenus lors de la creation de l'objet AuthAccess comme expliqué  sur la page d'Authentification.

Initialisation  

Important
Le champ secretKey de l'objet AuthAccess doit voir sa valeur absolument tenue sécrète et utilisée sur vos serveurs uniquement. Il ne sera jamais transmis lors des échanges avec les server-urs de FPay.
Garder cette valeur secrète à votre niveau implique notamment de ne jamais utiliser la valeur de ce champ comme valeur de variable ou de constante dans le code source d'une application mobile, d'une application web ou dans le code source de toute application dont le binaire pourra être public et visible à tous. Il existe de nombreux outils permettent d'accéder aux chaines de caractères présentes dans le code source à partir d'un binaire. 
  • NPM
  • Yarn
npm install @finalse/sdk-node
yarn add @finalse/sdk-node
const fPay = sdk.FPayClient(sdk.Auth({token: '<token>', secretKey: '<secretKey>' }));

Implémentation  

Initialisation  

const fPay = sdk.FPayClient(sdk.Auth({token: '<token>', secretKey: '<secretKey>' }));

Fonctionnement général  

Pour lister des éléments correspondant à des critères particuliers, nous devons commençer par prendre en considération le type de l'objet qui sera retourné par notre listing.
Par exemple, si nous voulons lister des Wallet

  • parce que les objets de ce type à retourner possèdent un champ foreignId qui est de type  String et dont la valeur peut être absente, nous avons le droit de faire les requêtes suivantes:
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId isDefined"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId !isDefined"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId = '1234'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId = '1234'",
            sortBy: "foreignId"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId != '1234'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "foreignId startsWith '1234'"
        });
  • parce que les objets de ce type Wallet à retourner possèdent un champ mainPocket et que ce champ possède un champ balance qui possède lui même un champ available qui est de type  Number, nous avons le droit de faire les requêtes suivantes:
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available = 10000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            sortBy: "mainPocket.balance.available:ASC"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            sortBy: "mainPocket.balance.available:DESC"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available  > 100000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available >= 5000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available != 100000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available <= 100000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "mainPocket.balance.available  < 100000"
        });
  • parce que les objets de ce type Wallet à retourner possèdent un champ createdTime qui est de type  DateTime (Date et Heure conformes au standard ISO 8601), nous avons le droit de faire les requêtes suivantes:
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime = '2024-10-01T01:30Z'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime.iso8601 = '2024-10-01T01:30Z'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime = '2024-10-01'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime.iso8601 = '2024-10-01'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime isBefore '2024-10-01T01:30Z'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime isBefore '2024-10-01'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime.timestamp.seconds <= 19817999"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime.timestamp.milliseconds <= 19817999000"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime isAfter '2024-10-01T01:30Z'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime isAfter '2024-10-01'"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime in CurrentYear"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime in CurrentMonth"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime in Today"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            filter: "createdTime in Yesterday",
            sortBy: "createdTime:ASC"
        });
    const walletsCollectionPromise = 
        fPay.wallet.list({
            sortBy: "createdTime:DESC"
        });

Questions  

Maintenant que nous avons posé les bases logiques pour éffectuer des requêtes, nous allons répondre aux questions soulevées ci dessus

Question 1

Quelles sont les transactions de plus de 500 000 ₣ intervenues au débit de mon compte principal le mois dernier triées du plus gros montant au plus petit montant ?

const transactionsCollectionPromise = 
    fPay.transaction.list({
        filter: "status = 'Successful'"
                + " AND amount.value >= 500_000"
                + " AND dc = 'Debit'"
                + " AND wallet.isMain = true"
                + " AND createdTime in LastMonth",
        sortBy: "amount.value:DESC"
    });

Question 2

Quels sont tous mes portefeuilles que je gère dont le solde est inférieur à 1 000 000 ₣ ?

const walletsCollectionPromise = 
    fPay.wallet.list({
        filter: "mainPocket.balance < 1_000_000"
    });

Question 3

Quels sont tous les transferts vers OrangeMoney que j'ai éffectué hier ?

const transfersCollectionPromise = 
    fPay.transfer.list({
        filter: "status = 'Successful'"
                + " AND destination.account.provider.key = 'OrangeMoney'"
                + " AND createdTime in Yesterday "
    });

Question 4

Quelle est la plus grosse transaction vers ou depuis MtnMoney effectuée ce mois ci ?

const transactionsCollectionPromise = 
    fPay.transaction.list({
        filter: "status = 'Successful'"
                + " AND (source.provider.key = 'MtnMoney' OR destination.provider.key = 'MtnMoney')"
                + " AND createdTime in CurrentMonth",
        sortBy: "amount.value:DESC",
        limit: 1
    });

Question 5

Quelles sont les sorties d'argent échouées concernant MoovMoney ou OrangeMoney ?

const transactionsCollectionPromise = 
    fPay.transaction.list({
        filter: "status = 'Failure'"
                + " AND dc = 'Debit'"
                + " AND destination.provider.key in {'MoovMoney', 'OrangeMoney'}"
    });
Vous pouvez également éffectuer la requête suivante
const transactionsCollectionPromise = 
    fPay.transaction.list({
        filter: "status = 'Failure'"
                + " AND dc = 'Debit'"
                + " AND (destination.provider.key = 'MoovMoney' OR destination.provider.key = OrangeMoney)"
    });

Question 6

Quelles sont toutes les entrées d'argent reçues depuis MoovMoney avant aujourd'hui classées de la plus récente à la plus ancienne ?

const transactionsCollectionPromise = 
    fPay.transaction.list({
        filter: "status = 'Successful'"
                + " AND dc = 'Credit'"
                + " AND source.provider.key = 'MoovMoney'"
                + " AND createdTime isBefore Today",
        sortBy: "createdTime:DESC"
    });

AUDIT REPORTING & TABLEAU DE BORD
  • Contexte
  • Pré Requis
  • Initialization
  • Implémentation
    • Initialisation
    • Fonctionnement général
    • Questions