Présentation
L'index Transaction contient l'ensemble des transactions VAD et Proxy traitées par l'Etablissement de Paiement depuis sa création.
On y retrouve toutes les catégories de transactions CB (fournies par MBA) et Visa/MasterCard (fournies par BNPP) :
- les paiements : type FAC code Z0, X0 et Y0
- les remboursements : type AVO code Z0, X0 et Y0
- les impayés : type FAC code Z1, X5 et X4
L'index Transaction est alimenté en temps réel à chaque dépôt de fichier CREMBA dans le Puits par les transactions qu'il contient.
Une consolidation est également planifiée en début d'après midi pour rapprocher les données CREMBA avec les Données tierces exportées quotidiennement par Payline et PayAvenue.
Cet index est aujourd'hui utilisé pour produire des reportings règlementaires (OSCAMP - Cartographie des moyens de paiement et Reporting SURFI), mais aussi pour de la Reporting interne - Data viz.
Architecture technique
Streaming layer
A chaque nouvelle ligne de CRE MBA (transactions CB VI ou MC) qui rentrent dans le Puits, un consumer Streaming est déclenché pour préparer la donnée et la pousser dans l'index Elastic Search. Les données Payline et Payavenue ne sont pas rapprochées à ce moment là car elles n'ont pas encore livrées par les fournisseurs).
Batch layer
Tous les jours (aujourd'hui à 15h pour passer après les vacations VMC), le job Batch récupère, à partir de toutes les vacations "reglement-transactions", les lignes de CRE MBA associées. Pour chacune d'elle, il va chercher sa correspondance dans les fichiers Payline et PayAvenue fournis. Les données sont ensuite préparées et poussées dans ElasticSearch. Il va donc mettre à jour les données déjà poussées par le Streaming mais avec un niveau de détails plus fins.
Sources de données
L'index Transaction est généré sur la base des fichiers CRE MBA CB VI et MC aujourd'hui déposés dans le Data Lake.
Les données pays (Refpays) et commerçants (Refcom) sont également chargées depuis les tables HBase.
Enfin, les données tierces provenant de Payline et PayAvenue sont également récupérées et certaines viendront écraser les données du CRE.
Règle écrasement de donnée
Si la donnée en entrée est nulle ou vide OU que la date de vente fournie par le CRE est comprise entre le et
Alors on remplace la donnée avec celle fournie par Payline ou PayAvenue.
Cet intervalle de date correspond à un bug identifié sur un décalage de colonnes sur les fichiers CRE. Aucun rattrapage n'a été fait à l'époque pour ré-ingérer les données. Si on veut faire ce rattrapage aujourd'hui, il faut faire une analyse d'impact.
Rattrapage - manual job
Le dataflow de l'index Transaction est idempotent, il est donc possible d'effectuer un rattrapage de données à n'importe quelle date si jamais il y a eu une interruption de service ou s'il y a de nouveaux champs à rajouter dans l'index par exemple. La business date peut être aussi bien un jour précis qu'un intervalle de date, elle correspond au jour de vacation.
{
"operations" : [{
"job":"warehouse-cre-batch-job-manual",
"business-date":"20211201"
}]
}
{
"operations" : [{
"job":"warehouse-cre-batch-job-manual",
"business-date":"20211101,20211130"
}]
}
Format
| Field Elastick Search | Type | Description | Mapping (aliementation source) |
|---|---|---|---|
| _id | String | Concaténation du code opération, "|", et référence d'archivage | CRE . operationCode + "|" + CRE . referenceArchivage |
| id | String | Concaténation du code opération, "|", et référence d'archivage | CRE . operationCode + "|" + CRE . referenceArchivage |
| reference | String | Référence archivage fournie dans le fichier CRE | CRE . referenceArchivage |
| src-file | String | Nom du fichier CRE dans lequel était présente la transaction | CRE . filename |
| credit-card-number | String | Numéro de carte de crédit tokenisé (CB) ou masqué préfixé par 000 (VI et MC) | CRE . creditCardNumber |
| operation-code | String | Code de l'opération ("Y0", "X0"...) | CRE . operationCode |
| internal-operation-code | String | Code d'opération interne ("AVO" ou "FAC") | CRE . codeOperationInterneImpaye |
| interbank-settlement-date | Date | Date de règlement interbanque | CRE . dateReglementInterbancaire |
| sent-in-compensation-date | Date | Date d'envoi en compensation | CRE . dateEnvoiEnCompensation |
| sale-date | Date | Date de vente | CRE . dateVente |
| payment ? | Object | ||
| client | Object | Les données du client sont chargées à partir du numéro de contrat fourni dans le CRE | - |
| client . id | String | Id du commerçant en base | Refcom . rowKey |
| client . siret | String | Numéro de Siret fourni dans le CRE | CRE . siret |
| client . name | String | Nom du client | Refcom . pvad1 |
| client . companyName | String | Nom du client (le même que dans l'index Cashout) | Refcom . pladr1 |
| client . accountId | String | Numéro du compte | Refcom . idcpcm |
| client . contract-number | String | Numéro de contrat | Refcom . nucm |
| client . distance-selling | String | Vente à distance activé ("o" ou "n") | Refcom . vad |
| client . contactless-payment | String | Paiement sans contact activé | Refcom . inpmsc |
| client . ecommerce-payment | String | Paiement à distance activé | Refcom . inpmit |
| client . ecommerce3-ds | String | Paiement avec 3DS activé | (non implémenté) |
| country | Object | ||
| country . id | String | CRE . codePays par défaut + Règle d'écrasement de donnée | |
| country . code | String | CRE . codePays par défaut + Règle d'écrasement de donnée | |
| country . area | String | CRE . zoneGeoCarte par défaut + Règle d'écrasement de donnée | |
| country . default-id | String | CRE . codePays | |
| country . default-code | String | CRE . codePays | |
| country . default-area | String | CRE . zoneGeoCarte | |
| extra-params-payavenue | Object | On tente de récupérer les données par la référence d'archivage (ou id payline) (en hexadécimal pour Payline / en décimal pour Payavenue Sinon on tente de récupérer les données par numéro de carte tokenisé (+ montant + date de vente + contrat) Si aucune correspondance n'est trouvé sur les référentiels Payline et PayAvenue, on tente de récupérer les données en mode dégradé (+ montant + date de vente) | |
| extra-params-payavenue . natureCard | String | PayAvenue . natureCard | |
| extra-params-payavenue . typeCard | String | PayAvenue . productType | |
| extra-params-payavenue . typeApplication | String | PayAvenue . appType | |
| extra-params-payavenue . areaCountry | String | PayAvenue . countryCode | |
| extra-params-payavenue . authorizationCode | String | PayAvenue . autorReason | |
| extra-params-payavenue . exemptionCode | String | si PayAvenue . autorReason est vide et CRE . montant < 50 € alors "LOW_AMOUNT" | |
| extra-params-payline | Object | On tente de récupérer les données par la référence d'archivage (ou id payline) (en hexadécimal pour Payline / en décimal pour Payavenue Sinon on tente de récupérer les données par numéro de carte tokenisé (+ montant + date de vente + contrat) Sinon on essaye par numéro de carte masqué (+ montant + date de vente) | |
| extra-params-payline . natureCard | String | Payline . natureCard | |
| extra-params-payline . typeCard | String | Payline . cardProductCode | |
| extra-params-payline . typeApplication | String | Payline . transactionType | |
| extra-params-payline . areaCountry | String | Payline . issuerCodePays | |
| extra-params-payline . authorizationCode | String | Payline . autorReason | |
| extra-params-payline . exemptioncode | String | Payline . exemption | |
| extra-params-payline . externalTransactionId | String | Payline . externalTransactionId | |
| extra-params-payline . orderRef | String | Payline . orderRef | |
| commission | Object | ||
| commission . interchangeAmount | BigDecimal | CRE . montantCommissionInterchangeViMc signé pour VMC CRE . montantCommissionInterchange signé pour CB | |
| commission . schemeAmount | BigDecimal | CRE . montantCommissionReseauViMc signé | |
| commission . bankAmount | BigDecimal | CRE . montantCommissionBanqueViMc signé | |
| commission . clientAmount | BigDecimal | CRE . montantCommissionCommercant | |
| grossAmount | BigDecimal | CRE . montantBrutEnEuro signé | |
| grossAmountRounded | BigDecimal | CRE . montantBrutEnEuro signé arrondi HALF_UP | |
| netAmount | BigDecimal | CRE . montantNet | |
| degradedMatching | Boolean | True si la récupération PayAvenue est en mode dégradée sinon False | |
| natureCardCode | String | CRE . natureCarte par défaut + Règle d'écrasement de donnée | |
| natureCardCodeDefault | String | CRE . natureCarte | |
| schemeCode | String | crembaConfig.getScheme() | |
| archiveId | String | CRE . referenceArchivage | |
| remittanceId | String | CRE . identifiantRemise | |
| provider | String | PAYLINE ou PAYAVENUE | |
| typeCard | String | CRE . typeCarte | |
| secureMode | Boolean | True si Payline.exemption OU Payline.autorReason est Y ou CH Sinon False | |
| exemptionMode | String | Payline . exemption | |
| ingestedAt | Datetime | Datetime du nom de fichier | |
| updatedAt | Datetime | now() | |
| timestamp | Datetime | CB : Datetime du nom de fichier VMC : Datetime du nom de fichier - 1 jour |

Ajouter un commentaire