Ceci est une ancienne révision du document !
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
- checkEcrituresTrx.sql
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
- scriptRegulePreTraitement.sql
-- --------------------------------------------------------------- -- 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
- scriptRegulePreTraitement_2.sql
-- --------------------------------------------------------------- -- 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
- scriptRegulePostTraitement.sql
-- --------------------------------------------------------------- -- 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 5 : Remettre les cartes débitrices à leur état initial
- scriptRegulePostTraitement_2.sql
-- --------------------------------------------------------------- -- 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 6 : Mise à jour des soldes des cartes sur la base de la somme des écritures
- scriptRegulePostTraitement_3.sql
-- --------------------------------------------------------------- -- 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 7 : 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
- checkEcrituresTrx.sql
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 ;