Régulariser les transactions cynod qui n'ont pas généré des écritures comptables

Suite à un incident cynod, il peut arriver que des transactions validées (statut VA) durant le processus ne génèrent pas des écritures comptables. L'impact est majeur dans le sens où le prestataire fourni un service pour lequel le bénéficiaire n'est pas réellement débité du montant de la transaction alors que le solde est impacté.

Les cas identifiés à ce jour concernent les transactions :

carte en online -- fixed

carte en offline puis synchronisée

wallet --fixed

ticket en offline

Ce guide a pour objet de définir les différentes étapes d'identification et de correction des transactions n'ayant pas généré des écritures. Seules les transactions ayant été validées sont concernées. Les transactions d'annulation (AN) ou celles nécessitant une validation (SA) devront faire l'objet d'un traitement spécifique soit par le client soit par l'agent support.

Avertissement : vous allez réaliser des actions sensibles. Il est important de s'assurer que toutes les actions décrites soient scrupuleusement respectées.

Étape 1 : Extraire la situation avant traitement

Lancer le report checkEcrituresTrx depuis jasperserver cynod pour la base du client concerné

Définir la période voulue

Il est aussi possible d'exécuter la requête SQL suivante

SELECT a.wallet_id, a.id, a.carte_emettrice_id, a.carte_receptrice_id, a.code_evenement,a.code_utilisateur_saisie,a.date_enregistrement_transaction,a.date_transaction, a.ind_annulation,a.is_online,a.montant_transaction,a.motif,a.motif_annulation,a.numero_operation, a.operation_offline_id,a.produit,a.ref_terminal,a.report_cumul_consommation_offline, a.report_cumul_consommation_synchronise,a.report_plafond_offline,a.report_solde_online_on_card, a.solde_apres_emmission,a.solde_apres_reception,a.solde_avant_emission,a.solde_avant_reception, a.statut,a.uid_card,a.ticket_carburant_id,a.version_mobile,a.volume, a.statut_remontee_annulation,a.statut_synchro_to_etab, a.ind_espece,a.ind_trx_forcage_inter_oper,a.deleted+'0', b.num_carte AS numCarteEmetrice ,b.intitule AS intituleCarteEmetrice,b.statut AS 'statut_carte_emetrice', c.num_carte AS numCarteReceptrice ,c.intitule AS intituleCarteReceptrice,c.statut AS 'statut_carte_receptrice' FROM (operation a LEFT OUTER JOIN carte b ON a.carte_emettrice_id=b.id) LEFT OUTER JOIN carte c ON a.carte_receptrice_id=c.id WHERE a.id NOT IN (SELECT b.operation_id FROM ecriture b) AND a.date_transaction >= '2021-01-01' ORDER BY a.date_transaction ;

Étape 2 : Préparer les données à régulariser

Exécuter les requêtes SQL suivantes sur la base de données du client

-- --------------------------------------------------------------- -- Insertion des opérations de régul transactions cartes -- --------------------------------------------------------------- INSERT INTO operation_regul( version,statut,montant_transaction,operation_id,TYPE,date_transaction,numero_operation) SELECT 0,'SA',a.montant_transaction,a.id,'C',a.date_transaction,a.numero_operation FROM operation a LEFT OUTER JOIN carte b ON a.carte_emettrice_id=b.id WHERE a.id NOT IN (SELECT b.operation_id FROM ecriture b) AND a.date_transaction >= '2021-01-01' AND a.ticket_carburant_id IS NULL AND a.id NOT IN (SELECT operation_id FROM operation_regul) AND a.statut = 'VA' ORDER BY a.date_transaction ; -- --------------------------------------------------------------- -- Insertion des opérations de régul transactions tickets -- --------------------------------------------------------------- INSERT INTO operation_regul( version,statut,montant_transaction,operation_id,TYPE,date_transaction,numero_operation) SELECT 0,'SA',a.montant_transaction,a.id,'T',a.date_transaction,a.numero_operation FROM operation a LEFT OUTER JOIN carte b ON a.carte_emettrice_id=b.id WHERE a.id NOT IN (SELECT b.operation_id FROM ecriture b) AND a.date_transaction >= '2021-01-01' AND a.ticket_carburant_id IS NOT NULL AND a.id NOT IN (SELECT operation_id FROM operation_regul) AND a.statut = 'VA' ORDER BY a.date_transaction ;

Étape 3 : Rendre les cartes à régulariser débitrices

-- --------------------------------------------------------------- -- Sauvegarde du statut débitrice de la carte pour forcer les débits -- --------------------------------------------------------------- UPDATE operation_regul a, operation b, carte c , carte d SET a.is_carte_emetteur_debitrice=c.is_debitrice, a.is_carte_recepteur_debitrice=d.is_debitrice WHERE a.operation_id=b.id AND b.carte_emettrice_id=c.id AND b.carte_receptrice_id=d.id AND a.type='C'; UPDATE carte a, operation b, operation_regul c SET a.is_debitrice = TRUE WHERE c.operation_id=b.id AND b.carte_emettrice_id=a.id AND c.type='C'; -- --------------------------------------------------------------- -- Forcer les cartes à être débitrices -- --------------------------------------------------------------- UPDATE carte a, operation b, operation_regul c SET a.is_debitrice = TRUE WHERE c.operation_id=b.id AND b.carte_receptrice_id=a.id AND c.type='C'; UPDATE carte a, operation b, operation_regul c SET a.is_debitrice = TRUE WHERE c.operation_id=b.id AND b.carte_emettrice_id=a.id AND c.type='C';

Étape 4 : Exécuter le programme de régularisation

Pre requis

Avoir un compte d'accès à la plateforme web

Disposer du rôle ROLE_CHECK_CARTE

Etape 2, 3 obligatoires

Pour les cartes

Se connecter à la plateforme

Se rendre sur la page Check information en saisissant au niveau de l'URL de la barre du navigateur /check

Cliquer sur Regule écriture (Carte et ticket)

Cliquer sur Carte

Le programme va s'exécuter. Il faudra patienter. Si cela ne passe pas, directement saisir check/regulEcriture?typeService=C

Pour les tickets

Se connecter à la plateforme

Se rendre sur la page Check information en saisissant au niveau de l'URL de la barre du navigateur /check

Cliquer sur Regule écriture (Carte et ticket)

Cliquer sur Ticket

Le programme va s'exécuter. Il faudra patienter. Si cela ne passe pas, directement saisir check/regulEcriture?typeService=T

Étape 5 : Extraire les statistiques de traitement

-- --------------------------------------------------------------- -- statistiques traitement programme régul -- --------------------------------------------------------------- SELECT TYPE, statut, COUNT(*) FROM operation_regul GROUP BY TYPE, statut; -- --------------------------------------------------------------- -- Motif non ecriture pendant regul carte -- --------------------------------------------------------------- SELECT remarque, COUNT(*) FROM operation_regul WHERE statut='RJ' AND TYPE='C' GROUP BY remarque; -- --------------------------------------------------------------- -- Motif non ecriture pendant regul ticket -- --------------------------------------------------------------- SELECT remarque, COUNT(*) FROM operation_regul WHERE statut='RJ' AND TYPE='T' GROUP BY remarque;

Étape 6 : Remettre les cartes débitrices à leur état initial

-- --------------------------------------------------------------- -- Rollback forçage des cartes à être débitrices -- --------------------------------------------------------------- UPDATE carte a, operation b, operation_regul c SET a.is_debitrice = c.is_carte_emetteur_debitrice WHERE c.operation_id=b.id AND b.carte_emettrice_id=a.id AND c.type='C'; UPDATE carte a, operation b, operation_regul c SET a.is_debitrice = c.is_carte_recepteur_debitrice WHERE c.operation_id=b.id AND b.carte_receptrice_id=a.id AND c.type='C';

Étape 7 : Mise à jour des soldes des cartes sur la base de la somme des écritures

-- --------------------------------------------------------------- -- Calcul du solde basé sur la somme des écritures -- --------------------------------------------------------------- DROP TABLE IF EXISTS tmp_maj_solde_carte; CREATE TABLE tmp_maj_solde_carte AS SELECT carte_id,SUM(valeur_ecriture) AS solde_ecriture FROM ecriture GROUP BY carte_id; ALTER TABLE tmp_maj_solde_carte ADD INDEX idx_tmp_maj_solde_carte (carte_id ASC); -- --------------------------------------------------------------- -- Sauvegarde des soldes erronées avant mise à jour -- --------------------------------------------------------------- DROP TABLE IF EXISTS tmp_sav_ecart_solde ; CREATE TABLE tmp_sav_ecart_solde AS SELECT a.num_carte,a.intitule,a.cumul_consommation_offline,a.cumul_consommation_synchronise,a.solde_online, a.deleted,a.statut, a.ind_annulation,a.type_carte, b.solde_ecriture FROM carte a, tmp_maj_solde_carte b WHERE a.id=b.carte_id AND a.solde_online <> b.solde_ecriture; -- --------------------------------------------------------------- -- Mise à jour des soldes -- --------------------------------------------------------------- UPDATE carte a, tmp_maj_solde_carte b SET a.solde_online = b.solde_ecriture WHERE a.id=b.carte_id AND a.solde_online <> b.solde_ecriture;

Étape 8 : Extraire la situation après traitement

Lancer le report checkEcrituresTrx depuis jasperserver cynod pour la base du client concerné

Définir la période voulue

Il est aussi possible d'exécuter la requête SQL suivante

SELECT a.wallet_id, a.id, a.carte_emettrice_id, a.carte_receptrice_id, a.code_evenement,a.code_utilisateur_saisie,a.date_enregistrement_transaction,a.date_transaction, a.ind_annulation,a.is_online,a.montant_transaction,a.motif,a.motif_annulation,a.numero_operation, a.operation_offline_id,a.produit,a.ref_terminal,a.report_cumul_consommation_offline, a.report_cumul_consommation_synchronise,a.report_plafond_offline,a.report_solde_online_on_card, a.solde_apres_emmission,a.solde_apres_reception,a.solde_avant_emission,a.solde_avant_reception, a.statut,a.uid_card,a.ticket_carburant_id,a.version_mobile,a.volume, a.statut_remontee_annulation,a.statut_synchro_to_etab, a.ind_espece,a.ind_trx_forcage_inter_oper,a.deleted+'0', b.num_carte AS numCarteEmetrice ,b.intitule AS intituleCarteEmetrice,b.statut AS 'statut_carte_emetrice', c.num_carte AS numCarteReceptrice ,c.intitule AS intituleCarteReceptrice,c.statut AS 'statut_carte_receptrice' FROM (operation a LEFT OUTER JOIN carte b ON a.carte_emettrice_id=b.id) LEFT OUTER JOIN carte c ON a.carte_receptrice_id=c.id WHERE a.id NOT IN (SELECT b.operation_id FROM ecriture b) AND a.date_transaction >= '2021-01-01' ORDER BY a.date_transaction ;