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 :
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.
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 ;
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 ;
-- --------------------------------------------------------------- -- 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';
/check
Le programme va s'exécuter. Il faudra patienter.
Si cela ne passe pas, directement saisir check/regulEcriture?typeService=C
/check
Le programme va s'exécuter. Il faudra patienter.
Si cela ne passe pas, directement saisir check/regulEcriture?typeService=T
-- --------------------------------------------------------------- -- 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;
-- --------------------------------------------------------------- -- 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';
-- --------------------------------------------------------------- -- 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;
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 ;