=== PARAMETRES DU COMPTE 1 (decouvert autorise ?) === SQL ERR: Unknown column 'solde' in 'field list' [SELECT rowid, ref, min_allowed, min_desired, solde, account_number, fk_accountancy_journal, date_solde FROM llx_bank_account WHERE rowid=1] === FILE agentcompta_match : plage de rowid et purge === 99 lignes presentes, rowid de 1025 a 1152 => 29 rowid manquants (lignes supprimees) m#1025 cree 2026-08-11 08:30:53 op 2026-08-05 -369,00 [validated] bankline='458' m#1034 cree 2026-08-11 14:45:14 op 2026-08-11 1 478,40 [validated] bankline='535' m#1035 cree 2026-08-11 14:45:16 op 2026-08-11 -4 800,00 [validated] bankline='449' m#1057 cree 2026-08-14 01:00:21 op 2026-08-13 -52,49 [proposed] bankline=NULL m#1058 cree 2026-08-15 02:00:27 op 2026-08-14 -31,40 [validated] bankline='485' m#1059 cree 2026-08-18 01:15:14 op 2026-08-17 -13 659,07 [validated] bankline='451' m#1060 cree 2026-08-18 01:15:17 op 2026-08-17 -5,99 [validated] bankline='450' m#1061 cree 2026-08-18 07:30:18 op 2026-08-18 -23,29 [proposed] bankline=NULL m#1062 cree 2026-08-18 07:30:21 op 2026-08-18 590,40 [validated] bankline='469' m#1063 cree 2026-08-18 13:45:12 op 2026-08-18 -777,00 [auto_validated] bankline=NULL m#1064 cree 2026-08-19 14:45:13 op 2026-08-19 -1 768,14 [validated] bankline='475' m#1065 cree 2026-08-22 21:57:02 op 2026-08-21 -87,50 [validated] bankline='456' m#1066 cree 2026-08-24 11:45:41 op 2026-08-24 -35,90 [validated] bankline='493' m#1067 cree 2026-08-24 11:45:43 op 2026-08-24 -19,17 [validated] bankline='494' m#1068 cree 2026-08-25 06:15:52 op 2026-08-25 -34,19 [validated] bankline='510' m#1069 cree 2026-08-25 12:31:12 op 2026-08-25 -137,20 [proposed] bankline=NULL m#1070 cree 2026-08-26 13:15:14 op 2026-08-26 -3 617,00 [validated] bankline='521' m#1071 cree 2026-08-27 07:45:26 op 2026-08-27 -93,60 [proposed] bankline=NULL m#1072 cree 2026-08-27 14:00:32 op 2026-08-27 626,58 [validated] bankline='454' m#1073 cree 2026-08-27 14:00:32 op 2026-08-27 3 500,57 [validated] bankline='455' m#1074 cree 2026-08-27 20:15:14 op 2026-08-27 348,00 [validated] bankline='465' m#1075 cree 2026-08-31 10:45:15 op 2026-08-31 -44,18 [validated] bankline='495' m#1076 cree 2026-08-31 10:45:17 op 2026-08-31 -33,32 [validated] bankline='496' m#1077 cree 2026-08-31 10:45:20 op 2026-08-31 -19,98 [validated] bankline='499' m#1078 cree 2026-08-31 10:45:23 op 2026-08-31 -8,99 [validated] bankline='497' m#1079 cree 2026-08-31 23:00:17 op 2026-08-31 -13 582,68 [validated] bankline='471' m#1080 cree 2026-08-31 23:00:21 op 2026-08-31 10 000,00 [rejected] bankline=NULL m#1081 cree 2026-09-01 11:15:17 op 2026-09-01 14 136,63 [validated] bankline='457' m#1082 cree 2026-09-01 11:15:20 op 2026-09-01 -24,29 [validated] bankline='462' m#1083 cree 2026-09-02 12:00:20 op 2026-09-02 103,83 [validated] bankline='466' m#1084 cree 2026-09-02 18:00:23 op 2026-09-02 -10 000,00 [rejected] bankline=NULL m#1085 cree 2026-09-03 06:30:15 op 2026-09-02 -18,30 [validated] bankline='479' m#1086 cree 2026-09-03 12:45:12 op 2026-09-03 2 462,40 [validated] bankline='464' m#1087 cree 2026-09-03 19:00:16 op 2026-09-03 -675,00 [validated] bankline='489' m#1088 cree 2026-09-03 19:00:16 op 2026-09-03 -192,60 [validated] bankline='498' m#1089 cree 2026-09-03 19:00:16 op 2026-09-03 -115,44 [validated] bankline='470' m#1090 cree 2026-09-04 01:00:17 op 2026-09-03 420,00 [proposed] bankline=NULL m#1091 cree 2026-09-04 07:15:13 op 2026-09-04 -88,48 [validated] bankline='461' m#1092 cree 2026-09-05 01:45:11 op 2026-09-05 -353,40 [validated] bankline='477' m#1093 cree 2026-09-05 01:45:11 op 2026-09-05 -50,52 [validated] bankline='478' m#1094 cree 2026-09-05 01:45:14 op 2026-09-04 -19,10 [proposed] bankline=NULL m#1095 cree 2026-09-07 09:45:15 op 2026-09-07 -369,00 [validated] bankline='459' m#1096 cree 2026-09-07 09:45:18 op 2026-09-07 -154,70 [validated] bankline='511' m#1097 cree 2026-09-07 09:45:22 op 2026-09-07 -130,01 [validated] bankline='480' m#1098 cree 2026-09-07 09:45:25 op 2026-09-07 -78,89 [validated] bankline='481' m#1099 cree 2026-09-07 09:45:27 op 2026-09-07 -57,53 [validated] bankline='482' m#1100 cree 2026-09-07 09:45:30 op 2026-09-07 -11,38 [validated] bankline='483' m#1101 cree 2026-09-08 16:30:16 op 2026-09-08 -349,84 [validated] bankline='490' m#1102 cree 2026-09-09 11:00:17 op 2026-09-09 4 582,74 [validated] bankline='488' m#1103 cree 2026-09-09 17:15:12 op 2026-09-09 -340,93 [validated] bankline='491' m#1104 cree 2026-09-09 17:15:12 op 2026-09-09 -4 800,00 [validated] bankline='500' m#1105 cree 2026-09-10 18:00:28 op 2026-09-10 1 478,40 [proposed] bankline=NULL m#1106 cree 2026-09-15 03:15:33 op 2026-09-14 -31,40 [validated] bankline='486' m#1107 cree 2026-09-16 10:15:15 op 2026-09-16 -1 096,00 [validated] bankline='522' m#1108 cree 2026-09-17 17:00:19 op 2026-09-17 120,00 [validated] bankline='467' m#1109 cree 2026-09-18 17:45:15 op 2026-09-18 590,40 [proposed] bankline=NULL m#1110 cree 2026-09-21 07:15:20 op 2026-09-21 108,21 [proposed] bankline=NULL m#1111 cree 2026-09-21 13:30:13 op 2026-09-21 -1 768,14 [validated] bankline='476' m#1112 cree 2026-09-24 15:45:12 op 2026-09-24 587,36 [validated] bankline='528' m#1113 cree 2026-09-28 00:15:16 op 2026-09-27 947,82 [validated] bankline='463' m#1114 cree 2026-09-28 11:18:38 op 2026-09-28 13 611,12 [validated] bankline='460' m#1115 cree 2026-09-28 18:45:13 op 2026-09-28 -373,20 [validated] bankline='502' m#1116 cree 2026-09-28 18:45:13 op 2026-09-28 -1 303,68 [validated] bankline='468' m#1117 cree 2026-09-28 18:45:15 op 2026-09-28 -240,00 [validated] bankline='504' m#1118 cree 2026-09-28 18:45:18 op 2026-09-28 -120,00 [validated] bankline='505' m#1119 cree 2026-09-29 13:30:16 op 2026-09-29 -5 550,00 [validated] bankline='484' m#1120 cree 2026-09-30 14:00:30 op 2026-09-30 108,21 [validated] bankline='503' m#1121 cree 2026-10-01 02:30:14 op 2026-09-30 -4 789,73 [validated] bankline='533' m#1122 cree 2026-10-01 15:00:15 op 2026-10-01 2 964,00 [validated] bankline='529' m#1123 cree 2026-10-03 04:00:21 op 2026-10-02 -191,90 [validated] bankline='515' m#1124 cree 2026-10-03 10:15:12 op 2026-10-02 -18,30 [validated] bankline='517' m#1125 cree 2026-10-04 11:15:13 op 2026-10-04 -2 510,00 [validated] bankline='531' m#1126 cree 2026-10-05 11:30:36 op 2026-10-05 -420,84 [proposed] bankline=NULL m#1127 cree 2026-10-05 11:30:36 op 2026-10-05 1 820,98 [validated] bankline='487' m#1128 cree 2026-10-05 11:30:36 op 2026-10-05 238,39 [validated] bankline='501' m#1129 cree 2026-10-06 06:00:24 op 2026-10-05 -354,75 [validated] bankline='519' m#1130 cree 2026-10-06 06:00:24 op 2026-10-05 -49,17 [validated] bankline='518' m#1131 cree 2026-10-06 12:00:32 op 2026-10-06 -40,90 [proposed] bankline=NULL m#1132 cree 2026-10-07 12:30:22 op 2026-10-07 -130,01 [validated] bankline='523' m#1133 cree 2026-10-07 12:30:24 op 2026-10-07 -78,89 [validated] bankline='524' m#1134 cree 2026-10-07 12:30:28 op 2026-10-07 -57,53 [validated] bankline='525' m#1135 cree 2026-10-07 12:30:31 op 2026-10-07 -11,38 [validated] bankline='526' m#1136 cree 2026-10-08 07:00:52 op 2026-10-08 -117,90 [proposed] bankline=NULL m#1137 cree 2026-10-08 13:15:15 op 2026-10-08 -166,32 [validated] bankline='512' m#1138 cree 2026-10-08 19:30:19 op 2026-10-08 9 202,20 [validated] bankline='527' m#1139 cree 2026-10-09 20:15:14 op 2026-10-09 -4 800,00 [validated] bankline='492' m#1140 cree 2026-10-09 20:15:17 op 2026-10-09 -1 159,20 [validated] bankline='513' m#1141 cree 2026-10-12 07:30:23 op 2026-10-12 -680,94 [validated] bankline='514' m#1142 cree 2026-10-14 09:00:23 op 2026-10-14 -68,85 [proposed] bankline=NULL m#1143 cree 2026-10-15 03:45:22 op 2026-10-14 -31,40 [validated] bankline='520' m#1144 cree 2026-10-15 16:15:15 op 2026-10-15 742,80 [validated] bankline='530' m#1145 cree 2026-10-16 16:45:16 op 2026-10-16 557,42 [validated] bankline='516' m#1146 cree 2026-10-17 17:30:17 op 2026-10-17 -190,00 [validated] bankline='532' m#1147 cree 2026-10-19 06:15:29 op 2026-10-19 -291,80 [proposed] bankline=NULL m#1148 cree 2026-10-19 12:30:13 op 2026-10-19 167,20 [auto_validated] bankline=NULL m#1149 cree 2026-10-19 12:30:13 op 2026-10-19 -1 768,14 [auto_validated] bankline=NULL m#1150 cree 2026-10-20 07:00:22 op 2026-10-20 -41,58 [proposed] bankline=NULL m#1151 cree 2026-10-20 19:30:19 op 2026-10-20 -2 914,80 [proposed] bankline=NULL m#1152 cree 2026-10-21 13:45:41 op 2026-10-21 -264,48 [proposed] bankline=NULL === LIGNES bank creees par la synchro (libelle AgentCompta) === 215 lignes -172 280,69 === ECART PAR MOIS : solde llx_bank fin de mois === fin 202512 : 37 001,25 fin 202601 : 5 714,15 fin 202602 : 27 542,03 fin 202603 : 14 255,18 fin 202604 : 16 923,70 fin 202605 : 935,00 fin 202606 : 9 209,49 fin 202607 : 10 204,13 fin 202608 : -2 639,75 fin 202609 : 10 937,90 fin 202610 : 16 033,90 === DEDUP : code d'importBankRows === function importBankRows($rows, $account_id, $user, $intake = null) { global $conf; $inserted = 0; $matched_high = 0; $skipped = 0; $interrompu = null; $fk_intake = (is_object($intake) && !empty($intake->id)) ? (int) $intake->id : 0; // Budget de temps : le mutualisé coupe vers 200 s. On s'arrête proprement // et le reste sera repris au passage suivant (les lignes non insérées // seront simplement ré-examinées, la déduplication protège du doublon). $fin = self::echeance(120); foreach ($rows as $row) { // Crédit épuisé ou clé refusée : inutile de continuer le lot. // (affectation conditionnelle : ne pas écraser un motif déjà retenu) $coupure = agentcompta_circuit_breaker(); if ($coupure !== null) { $interrompu = $coupure; break; } if (microtime(true) > $fin) { $interrompu = "Budget de temps atteint — reprise au prochain passage du cron."; break; } // Déduplication : ne ré-importe pas une ligne déjà présente (mêmes // compte + date + libellé + montant + ref). Couvre les fichiers qui // se chevauchent, les lignes répétées, ET les transactions GoCardless // déjà synchronisées (ref = identifiant interne GoCardless unique). if ($this->bankLineExists($account_id, $row, $conf->entity)) { $skipped++; continue; } // V2 — DÉDUPLICATION CONTRE LA BANQUE NATIVE. llx_bank est le // registre de vérité : une opération qui y figure déjà, CONFIRMÉE // par un relevé (rappro = 1), n'a rien à faire dans la file — // la proposer inviterait à créer un paiement en double. Cas vécu : // après la remise à zéro de la file, la synchro re-servait les // opérations récentes déjà saisies et rapprochées à la main. // (Le rappro = 1 est essentiel : les opérations fraîches du flux // normal ne sont pas encore rapprochées, elles passent.) if ($this->dejaEnBanqueNative($account_id, $row)) { $skipped++; continue; } // RÉCURRENCE CONFIRMÉE d'abord : la règle posée une fois par // l'utilisateur (page Récurrents) prime sur tout — déterministe, // sans coût IA, score 1 → auto-validé. $groupe = $this->chercherRecurrent((float) $row['amount'], $row['label'], $row['date']); // LA RÉFÉRENCE ÉCRITE PAR LE CLIENT PASSE AVANT TOUT CALCUL : ce // qu'il nomme dans le libellé prime sur ce que les montants // suggèrent (correctif Renault du 18/08/2026). if ($groupe === null) $groupe = $this->chercherParReference((float) $row['amount'], $row['label'], $row['date']); // Puis règlement GROUPÉ — déterministe aussi : un virement unique // réglant plusieurs factures du même client (facturation groupée // sans facture de synthèse dans Dolibarr). if ($groupe === null && $row['amount'] > 0) $groupe = $this->chercherGroupeFactures((float) $row['amount'], $row['label'], $row['date']); // Débit tombant au centime sur une facture FOURNISSEUR ouverte, nom // du fournisseur dans le libellé : plus sûr que l'IA, et sans coût. if ($groupe === null && $row['amount'] < 0) $groupe = $this->chercherFactureFourn((float) $row['amount'], $row['label']); if ($groupe === null && $row['amount'] < 0) $groupe = $this->chercherEffetFourn((float) $row['amount'], $row['label'], $row['date']); if ($groupe === null) $groupe = $this->detecterSpeciaux((float) $row['amount'], $row['label']); if ($groupe !== null) { $score = (float) $groupe['score']; $target_type = $groupe['target_type']; $target_id = (int) $groupe['socid']; $reason = $groupe['reason']; } else { $candidates = $this->findCandidates($row['amount'], $row['date'], $row['label']); $ai = $this->aiMatch($row, $candidates, $intake); // Appel IA en échec : la ligne bancaire est quand