Aperçu du moteur sur une base synthétique du banc d’essai de Gimlo AI (distribution, 34 tables, erreurs injectées) ; aucune donnée réelle ; les coûts sont des hypothèses du profil.
Gimlo AI · rapport d'audit de qualité de données

Audit de qualité des données avant migration ERP

Base auditée : dqbench_negoce_small_l20_sansddl · audit dqbench_negoce_small_l20_sansddl-1 · 2026-11-04

34 tables, 202 068 lignes lues ; aucune donnée n'a quitté la machine de l'audit.

En bref

94,5 %des lignes sont saines

191 026 lignes saines sur 202 068 ; 11 042 lignes concernées par au moins un constat, chacune comptée à sa criticité la plus haute :

Bloquant5 37748,7 %
Majeur4 28938,8 %
Mineur1 37612,5 %
Complétude
98,6 %
12 règle(s) · 1 950 lignes
Validité
68,1 %
3 règle(s) · 839 lignes
Unicité
99,5 %
10 règle(s) · 1 017 lignes
Cohérence interne
96,8 %
6 règle(s) · 3 795 lignes
Intégrité
98,6 %
18 règle(s) · 2 782 lignes
Plausibilité
99,0 %
5 règle(s) · 1 397 lignes
11 042lignes concernées
269 117 €coût de reprise estimé
12 001constats (cellules)
54règles qui en trouvent
222 / 317colonnes regardées par au moins une règle

Hypothèses de coût du profil, à ajuster avec le client : taux horaire de reprise et coût d'un document rejeté sont des ordres de grandeur, pas des mesures.

Les 10 constats les plus sûrs

Une ligne par règle, de la plus sûre à la moins sûre (54 règles en tout, toutes dans la section 2). La preuve est la requête qui désigne les lignes à corriger.

#ConstatTableLignesCoûtPreuve
1unite_id est le unite_id de la ligne de article visée par article_id (chemin découvert)
score 1,00 · DEC:CHE:ligne_commande_client.unite_id=article.unite_id@article_id
ligne_commande_client.unite_id711 278 €
SQL
SELECT t."id"::text FROM "ligne_commande_client" t JOIN "article" m ON m."id"::text = t."article_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL AND NOT (t."unite_id"::text = m."unite_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "ligne_commande_client" t JOIN "article" m ON m."id"::text = t."article_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1
2article_id d'une ligne de ligne_commande_client contredit par la plupart des lignes qui la visent (ligne_facture, ligne_livraison ; chemin découvert, imputé à la mère)
score 1,00 · DEC:CHM:ligne_commande_client.article_id
ligne_commande_client.article_id3897 002 €
SQL
SELECT m."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= 2 AND 2 * count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= count(*) ORDER BY 1
3Chaque valeur de facture.tiers_id existe dans tiers.id (lien retrouvé par le graphe de la base)
score 0,99 · lien:facture.tiers_id->tiers.id
facture.tiers_id28110 959 €
SQL
SELECT a."id"::text FROM "facture" a WHERE a."tiers_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "tiers" b WHERE b."id" = a."tiers_id") ORDER BY 1
4Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)
score 0,95 · ERP05:ligne_commande_client.montant_ht
ligne_commande_client.montant_ht1 68422 453 €
SQL
SELECT t."id"::text FROM "ligne_commande_client" t WHERE t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL AND t."remise_pct"::numeric IS NOT NULL AND NOT (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric * (1 - t."remise_pct"::numeric / 100.0), 2)) <= 0.01) ORDER BY 1
5Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)
score 0,95 · ERP05:ligne_facture.montant_ttc
ligne_facture.montant_ttc6508 667 €
SQL
SELECT t."id"::text FROM "ligne_facture" t WHERE t."montant_ttc"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL AND t."montant_tva"::numeric IS NOT NULL AND NOT (abs(t."montant_ttc"::numeric - (t."montant_ht"::numeric + t."montant_tva"::numeric)) <= 0.01) AND (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric * (1 - t."remise_pct"::numeric / 100.0), 2)) <= 0.01 OR NOT (t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL AND t."remise_pct"::numeric IS NOT NULL)) AND (abs(t."montant_tva"::numeric - round(t."taux_tva"::numeric * t."montant_ht"::numeric / 100.0, 2)) <= 0.01 OR NOT (t."montant_tva"::numeric IS NOT NULL AND t."taux_tva"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL)) ORDER BY 1
6Le code postal d'une adresse française est celui de sa commune (référentiel des communes)
score 0,95 · ERP03:tiers_adresse.code_postal+commune
tiers_adresse.code_postal4062 368 €
SQL
SELECT t."id"::text FROM "tiers_adresse" t WHERE (t."code_postal" IS NOT NULL AND btrim(t."code_postal"::text) <> '') AND (t."commune" IS NOT NULL AND btrim(t."commune"::text) <> '') AND btrim(t."pays"::text) = ANY('{… 1 valeur …}') AND (regexp_replace(t."code_postal"::text, '\s+', '', 'g'), btrim(regexp_replace(lower(replace(replace(replace(replace(translate(t."commune"::text, '…', '…'), '…', '…'), '…', '…'), '…', '…'), '…', '…')), '[^a-z0-9]+', ' ', 'g'))) NOT IN (SELECT x.a, x.b FROM unnest('{… 2536 valeurs …}'::text[], '{… 2536 valeurs …}'::text[]) AS x(a, b)) ORDER BY 1
7Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante
score 0,95 · ERP08:tiers_adresse.code_postal
tiers_adresse.code_postal1722 007 €
SQL
SELECT t."id"::text FROM "tiers_adresse" t WHERE t."code_postal"::text = ANY('{… 2 valeurs …}') ORDER BY 1
8Un identifiant d'entreprise (SIREN, SIRET) a une clé de Luhn juste, et le SIRET commence par le SIREN de sa ligne
score 0,95 · ERP01:tiers.siret
tiers.siret2381 388 €
SQL
SELECT t."id"::text FROM "tiers" t WHERE (t."siret" IS NOT NULL AND btrim(t."siret"::text) <> '') AND (NOT (upper(regexp_replace(t."siret"::text, '\s+', '', 'g')) ~ '^([0-9]{14})$' AND (CASE WHEN upper(regexp_replace(t."siret"::text, '\s+', '', 'g')) ~ '^[0-9]+$' THEN (SELECT sum(CASE WHEN s.i % 2 = 1 THEN CASE WHEN s.d * 2 > 9 THEN s.d * 2 - 9 ELSE s.d * 2 END ELSE s.d END) % 10 = 0 FROM (SELECT g.i, substr(upper(regexp_replace(t."siret"::text, '\s+', '', 'g')), length(upper(regexp_replace(t."siret"::text, '\s+', '', 'g'))) - g.i, 1)::int AS d FROM generate_series(0, length(upper(regexp_replace(t."siret"::text, '\s+', '', 'g'))) - 1) AS g(i)) s) ELSE false END)) OR ((t."siren" IS NOT NULL AND btrim(t."siren"::text) <> '') AND left(upper(regexp_replace(t."siret"::text, '\s+', '', 'g')), length(upper(regexp_replace(t."siren"::text, '\s+', '', 'g')))) <> upper(regexp_replace(t."siren"::text, '\s+', '', 'g')))) ORDER BY 1
9Une date d'événement n'est pas antérieure à la date de création ou de référence de sa ligne
score 0,95 · ERP06:facture_fournisseur.date_echeance>=date_facture
facture_fournisseur.date_echeance2107 210 €
SQL
SELECT t."id"::text FROM "facture_fournisseur" t WHERE t."date_echeance"::date < t."date_facture"::date ORDER BY 1
10Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)
score 0,95 · ERP05:ligne_commande_fournisseur.montant_ttc
ligne_commande_fournisseur.montant_ttc1982 640 €
SQL
SELECT t."id"::text FROM "ligne_commande_fournisseur" t WHERE t."montant_ttc"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL AND t."montant_tva"::numeric IS NOT NULL AND NOT (abs(t."montant_ttc"::numeric - (t."montant_ht"::numeric + t."montant_tva"::numeric)) <= 0.01) AND (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric, 2)) <= 0.01 OR NOT (t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL)) AND (abs(t."montant_tva"::numeric - round(t."taux_tva"::numeric * t."montant_ht"::numeric / 100.0, 2)) <= 0.01 OR NOT (t."montant_tva"::numeric IS NOT NULL AND t."taux_tva"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL)) ORDER BY 1

Les 5 premières questions

Ce que les données ne tranchent pas seules : votre réponse « oui » en fait une règle de l'audit suivant (6 questions en tout, section 4).

  1. La colonne tiers_adresse.code_postal doit-elle toujours être remplie (pour une valeur de tiers_adresse.pays) ? 354 ligne(s) concernée(s).
  2. La colonne reglement.tiers_banque_id doit-elle toujours être remplie (pour une valeur de reglement.mode) ? 344 ligne(s) concernée(s).
  3. La colonne tiers_contact.telephone doit-elle toujours être remplie (pour une valeur de tiers_contact.est_principal) ? 81 ligne(s) concernée(s).
  4. La colonne article.poids_kg doit-elle toujours être remplie (pour une valeur de article.statut) ? 54 ligne(s) concernée(s).
  5. La colonne reglement.tiers_banque_id doit-elle toujours être remplie (pour une valeur de reglement.mode) ? 16 ligne(s) concernée(s).

1. La carte

Lignes concernées et montant estimé, par table et par dimension de qualité. La couleur suit la part des lignes de la table.

aucune≤ 1 %≤ 5 %> 5 %non jugée
TableCompl.Valid.Unic.Coh. int.Coh. ext.Plaus.
facture
factures clients
6 059 lignes · 131 389 €
72026 400 €non jugée30813 090 €63221 699 €1 80070 200 €0
ligne_commande_client
lignes de commande client
21 143 lignes · 37 498 €
non jugéenon jugée01 68422 453 €5489 864 €4715 181 €
commande_client
commandes clients
5 000 lignes · 30 980 €
32912 063 €non jugée1054 462 €42114 454 €0non jugée
facture_fournisseur
factures fournisseur
940 lignes · 15 886 €
1023 740 €non jugée622 635 €2107 210 €592 301 €0
ligne_facture
lignes de facture client
20 027 lignes · 15 110 €
non jugéenon jugée06508 667 €1522 736 €3373 707 €
tiers
tiers (clients et fournisseurs)
723 lignes · 6 755 €
1301 517 €2381 388 €2203 850 €000
tiers_adresse
adresses des tiers
1 511 lignes · 5 565 €
1722 007 €4062 368 €681 190 €00non jugée
ligne_facture_fournisseur
lignes de facture fournisseur
3 914 lignes · 4 862 €
0non jugée0004424 862 €
avoir
avoirs clients
174 lignes · 4 657 €
0non jugée381 615 €non jugée783 042 €non jugée
tiers_contact
contacts des tiers
1 145 lignes · 4 503 €
2603 033 €non jugée841 470 €non jugée0non jugée
article
articles
426 lignes · 4 074 €
0non jugée1322 310 €01261 764 €0
ligne_commande_fournisseur
lignes de commande fournisseur
4 024 lignes · 2 640 €
0non jugée01982 640 €00
livraison
bons de livraison client
6 059 lignes · 2 263 €
1942 263 €non jugée000non jugée
tiers_banque
coordonnées bancaires des tiers
390 lignes · 1 166 €
01951 138 €0non jugée228 €non jugée
reglement
règlements clients et fournisseurs
6 671 lignes · 1 029 €
0non jugée0001471 029 €
reception
réceptions de commandes fournisseur
940 lignes · 502 €
43502 €non jugée000non jugée
ligne_livraison
lignes de livraison client
20 191 lignes · 238 €
non jugéenon jugée0non jugée17238 €0
17 table(s) sans constat
  • affectation_reglement (6 711 lignes ; dimensions jugées : complétude, unicité, cohérence entre tables, plausibilité)
  • commande_fournisseur (800 lignes ; dimensions jugées : complétude, unicité, cohérence interne, cohérence entre tables)
  • compte_general (37 lignes ; dimensions jugées : unicité)
  • cours_devise (36 lignes ; dimensions jugées : unicité)
  • depot (3 lignes ; dimensions jugées : validité)
  • ecriture (13 844 lignes ; dimensions jugées : complétude, unicité, cohérence interne, cohérence entre tables, plausibilité)
  • famille_article (14 lignes ; dimensions jugées : aucune)
  • journal (4 lignes ; dimensions jugées : aucune)
  • ligne_avoir (208 lignes ; dimensions jugées : complétude, unicité, cohérence interne, cohérence entre tables, plausibilité)
  • ligne_ecriture (47 081 lignes ; dimensions jugées : complétude, unicité, cohérence entre tables)
  • ligne_reception (3 699 lignes ; dimensions jugées : unicité, cohérence entre tables, plausibilité)
  • mouvement_stock (25 292 lignes ; dimensions jugées : complétude, unicité, cohérence interne, cohérence entre tables, plausibilité)
  • ref_commune_cp (2 536 lignes ; dimensions jugées : complétude)
  • stock (899 lignes ; dimensions jugées : complétude, unicité, cohérence entre tables, plausibilité)
  • tarif (1 152 lignes ; dimensions jugées : complétude, unicité, cohérence interne, cohérence entre tables)
  • tarif_client (403 lignes ; dimensions jugées : complétude, unicité, cohérence entre tables, plausibilité)
  • unite (12 lignes ; dimensions jugées : aucune)

2. Les constats

Une carte par règle, de la plus sûre à la moins sûre (score de fusion : probabilité estimée qu'un constat soit une vraie erreur). Exemples : clés de ligne seulement, jamais de valeurs.

BloquantdécouvertesûrCohérence entre tablesscore 1,00

unite_id est le unite_id de la ligne de article visée par article_id (chemin découvert)

Où
ligne_commande_client.unite_id
Lignes
71 (0,3 % des lignes jugées)
Coût
1 278 € (18,00 € par ligne)
Exemples
10266, 1089, 11400, 1183, 12155
Preuve SQL
SELECT t."id"::text FROM "ligne_commande_client" t JOIN "article" m ON m."id"::text = t."article_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL AND NOT (t."unite_id"::text = m."unite_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "ligne_commande_client" t JOIN "article" m ON m."id"::text = t."article_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:ligne_commande_client.unite_id=article.unite_id@article_id

BloquantdécouvertesûrCohérence entre tablesscore 1,00

article_id d'une ligne de ligne_commande_client contredit par la plupart des lignes qui la visent (ligne_facture, ligne_livraison ; chemin découvert, imputé à la mère)

Où
ligne_commande_client.article_id
Lignes
389 (1,8 % des lignes jugées)
Coût
7 002 € (18,00 € par ligne)
Exemples
10256, 10405, 10437, 10520, 10963
Preuve SQL
SELECT m."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= 2 AND 2 * count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= count(*) ORDER BY 1

DEC:CHM:ligne_commande_client.article_id

BloquantdécouvertesûrCohérence entre tablesscore 0,99

Chaque valeur de facture.tiers_id existe dans tiers.id (lien retrouvé par le graphe de la base)

Où
facture.tiers_id
Lignes
281 (4,6 % des lignes jugées)
Coût
10 959 € (39,00 € par ligne)
Exemples
1227, 1392, 1426, 1455, 1491
Preuve SQL
SELECT a."id"::text FROM "facture" a WHERE a."tiers_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "tiers" b WHERE b."id" = a."tiers_id") ORDER BY 1

lien:facture.tiers_id->tiers.id

MajeurbibliothèquesûrCohérence internescore 0,95

Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)

Où
ligne_commande_client.montant_ht
Lignes
1 684 (8,0 % des lignes jugées)
Coût
22 453 € (13,33 € par ligne)
Exemples
10002, 1002, 10055, 10062, 10101
Preuve SQL
SELECT t."id"::text FROM "ligne_commande_client" t WHERE t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL AND t."remise_pct"::numeric IS NOT NULL AND NOT (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric * (1 - t."remise_pct"::numeric / 100.0), 2)) <= 0.01) ORDER BY 1

ERP05:ligne_commande_client.montant_ht

MajeurbibliothèquesûrCohérence internescore 0,95

Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)

Où
ligne_facture.montant_ttc
Lignes
650 (3,2 % des lignes jugées)
Coût
8 667 € (13,33 € par ligne)
Exemples
10015, 10030, 10050, 10060, 10066
Preuve SQL
SELECT t."id"::text FROM "ligne_facture" t WHERE t."montant_ttc"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL AND t."montant_tva"::numeric IS NOT NULL AND NOT (abs(t."montant_ttc"::numeric - (t."montant_ht"::numeric + t."montant_tva"::numeric)) <= 0.01) AND (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric * (1 - t."remise_pct"::numeric / 100.0), 2)) <= 0.01 OR NOT (t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL AND t."remise_pct"::numeric IS NOT NULL)) AND (abs(t."montant_tva"::numeric - round(t."taux_tva"::numeric * t."montant_ht"::numeric / 100.0, 2)) <= 0.01 OR NOT (t."montant_tva"::numeric IS NOT NULL AND t."taux_tva"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL)) ORDER BY 1

ERP05:ligne_facture.montant_ttc

MajeurbibliothèquesûrValiditéscore 0,95

Le code postal d'une adresse française est celui de sa commune (référentiel des communes)

Où
tiers_adresse.code_postal
Lignes
406 (52,0 % des lignes jugées)
Coût
2 368 € (5,83 € par ligne)
Exemples
10, 1000, 1002, 1005, 1007
Preuve SQL
SELECT t."id"::text FROM "tiers_adresse" t WHERE (t."code_postal" IS NOT NULL AND btrim(t."code_postal"::text) <> '') AND (t."commune" IS NOT NULL AND btrim(t."commune"::text) <> '') AND btrim(t."pays"::text) = ANY('{… 1 valeur …}') AND (regexp_replace(t."code_postal"::text, '\s+', '', 'g'), btrim(regexp_replace(lower(replace(replace(replace(replace(translate(t."commune"::text, '…', '…'), '…', '…'), '…', '…'), '…', '…'), '…', '…')), '[^a-z0-9]+', ' ', 'g'))) NOT IN (SELECT x.a, x.b FROM unnest('{… 2536 valeurs …}'::text[], '{… 2536 valeurs …}'::text[]) AS x(a, b)) ORDER BY 1

ERP03:tiers_adresse.code_postal+commune

BloquantbibliothèquesûrComplétudescore 0,95

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
tiers_adresse.code_postal
Lignes
172 (15,5 % des lignes jugées)
Coût
2 007 € (11,67 € par ligne)
Exemples
1006, 1018, 1024, 1030, 1031
Preuve SQL
SELECT t."id"::text FROM "tiers_adresse" t WHERE t."code_postal"::text = ANY('{… 2 valeurs …}') ORDER BY 1

ERP08:tiers_adresse.code_postal

MajeurbibliothèquesûrValiditéscore 0,95

Un identifiant d'entreprise (SIREN, SIRET) a une clé de Luhn juste, et le SIRET commence par le SIREN de sa ligne

Où
tiers.siret
Lignes
238 (35,2 % des lignes jugées)
Coût
1 388 € (5,83 € par ligne)
Exemples
1, 10, 101, 102, 104
Preuve SQL
SELECT t."id"::text FROM "tiers" t WHERE (t."siret" IS NOT NULL AND btrim(t."siret"::text) <> '') AND (NOT (upper(regexp_replace(t."siret"::text, '\s+', '', 'g')) ~ '^([0-9]{14})$' AND (CASE WHEN upper(regexp_replace(t."siret"::text, '\s+', '', 'g')) ~ '^[0-9]+$' THEN (SELECT sum(CASE WHEN s.i % 2 = 1 THEN CASE WHEN s.d * 2 > 9 THEN s.d * 2 - 9 ELSE s.d * 2 END ELSE s.d END) % 10 = 0 FROM (SELECT g.i, substr(upper(regexp_replace(t."siret"::text, '\s+', '', 'g')), length(upper(regexp_replace(t."siret"::text, '\s+', '', 'g'))) - g.i, 1)::int AS d FROM generate_series(0, length(upper(regexp_replace(t."siret"::text, '\s+', '', 'g'))) - 1) AS g(i)) s) ELSE false END)) OR ((t."siren" IS NOT NULL AND btrim(t."siren"::text) <> '') AND left(upper(regexp_replace(t."siret"::text, '\s+', '', 'g')), length(upper(regexp_replace(t."siren"::text, '\s+', '', 'g')))) <> upper(regexp_replace(t."siren"::text, '\s+', '', 'g')))) ORDER BY 1

ERP01:tiers.siret

MajeurbibliothèquesûrCohérence internescore 0,95

Une date d'événement n'est pas antérieure à la date de création ou de référence de sa ligne

Où
facture_fournisseur.date_echeance
Lignes
210 (29,2 % des lignes jugées)
Coût
7 210 € (34,33 € par ligne)
Exemples
108, 113, 116, 120, 124
Preuve SQL
SELECT t."id"::text FROM "facture_fournisseur" t WHERE t."date_echeance"::date < t."date_facture"::date ORDER BY 1

ERP06:facture_fournisseur.date_echeance>=date_facture

MajeurbibliothèquesûrCohérence internescore 0,95

Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)

Où
ligne_commande_fournisseur.montant_ttc
Lignes
198 (4,9 % des lignes jugées)
Coût
2 640 € (13,33 € par ligne)
Exemples
1002, 1024, 1053, 1069, 1078
Preuve SQL
SELECT t."id"::text FROM "ligne_commande_fournisseur" t WHERE t."montant_ttc"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL AND t."montant_tva"::numeric IS NOT NULL AND NOT (abs(t."montant_ttc"::numeric - (t."montant_ht"::numeric + t."montant_tva"::numeric)) <= 0.01) AND (abs(t."montant_ht"::numeric - round(t."quantite"::numeric * t."prix_unitaire"::numeric, 2)) <= 0.01 OR NOT (t."montant_ht"::numeric IS NOT NULL AND t."quantite"::numeric IS NOT NULL AND t."prix_unitaire"::numeric IS NOT NULL)) AND (abs(t."montant_tva"::numeric - round(t."taux_tva"::numeric * t."montant_ht"::numeric / 100.0, 2)) <= 0.01 OR NOT (t."montant_tva"::numeric IS NOT NULL AND t."taux_tva"::numeric IS NOT NULL AND t."montant_ht"::numeric IS NOT NULL)) ORDER BY 1

ERP05:ligne_commande_fournisseur.montant_ttc

BloquantbibliothèquesûrComplétudescore 0,95

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
tiers_contact.email
Lignes
166 (26,5 % des lignes jugées)
Coût
1 937 € (11,67 € par ligne)
Exemples
1001, 1006, 1027, 1028, 1034
Preuve SQL
SELECT t."id"::text FROM "tiers_contact" t WHERE t."email"::text = ANY('{… 3 valeurs …}') ORDER BY 1

ERP08:tiers_contact.email

BloquantbibliothèquesûrComplétudescore 0,95

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
tiers.code_naf
Lignes
130 (44,1 % des lignes jugées)
Coût
1 517 € (11,67 € par ligne)
Exemples
10, 110, 115, 122, 123
Preuve SQL
SELECT t."id"::text FROM "tiers" t WHERE t."code_naf"::text = ANY('{… 2 valeurs …}') ORDER BY 1

ERP08:tiers.code_naf

BloquantbibliothèquesûrUnicitéscore 0,95

Un numéro métier est unique dans sa table

Où
tiers.code_tiers
Lignes
126 (17,4 % des lignes jugées)
Coût
2 205 € (17,50 € par ligne)
Exemples
501, 502, 503, 504, 505
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP10:tiers.code_tiers

BloquantbibliothèquesûrComplétudescore 0,95

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
tiers_contact.telephone
Lignes
109 (11,2 % des lignes jugées)
Coût
1 272 € (11,67 € par ligne)
Exemples
1000, 1002, 1006, 1019, 103
Preuve SQL
SELECT t."id"::text FROM "tiers_contact" t WHERE t."telephone"::text = ANY('{… 2 valeurs …}') ORDER BY 1

ERP08:tiers_contact.telephone

BloquantbibliothèquesûrComplétudescore 0,95

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
facture_fournisseur.numero_fournisseur
Lignes
102 (14,7 % des lignes jugées)
Coût
3 740 € (36,67 € par ligne)
Exemples
100, 103, 106, 114, 116
Preuve SQL
SELECT t."id"::text FROM "facture_fournisseur" t WHERE t."numero_fournisseur"::text = ANY('{… 3 valeurs …}') ORDER BY 1

ERP08:facture_fournisseur.numero_fournisseur

BloquantdécouvertesûrUnicitéscore 0,95

Fiche saisie deux fois sous deux formes (doublon flou)

Où
tiers
Lignes
94 (13,0 % des lignes jugées)
Coût
1 645 € (17,50 € par ligne)
Exemples
627, 628, 630, 631, 632
Méthode

Calcul hors SQL : libellés normalisés, blocage, similarité par trigrammes et identifiants forts (paires sûres).

DBL:tiers

BloquantdécouvertesûrUnicitéscore 0,94

Ligne identique à une autre sur toutes les colonnes hors clé technique

Où
tiers_contact
Lignes
84 (7,3 % des lignes jugées)
Coût
1 470 € (17,50 € par ligne)
Exemples
1062, 1063, 1064, 1065, 1066
Preuve SQL
SELECT pk, n FROM (SELECT t."id"::text AS pk, row_number() OVER (PARTITION BY h ORDER BY t."id") AS r, count(*) OVER (PARTITION BY h) AS n FROM (SELECT t.*, md5(row(t."tiers_id", t."civilite", t."nom", t."prenom", t."fonction", t."email", t."telephone", t."est_principal")::text) AS h FROM "tiers_contact" t) t) s WHERE r > 1 ORDER BY 1

EXACT:tiers_contact

BloquantdécouvertesûrUnicitéscore 0,94

Ligne identique à une autre sur toutes les colonnes hors clé technique

Où
tiers_adresse
Lignes
68 (4,5 % des lignes jugées)
Coût
1 190 € (17,50 € par ligne)
Exemples
1217, 1218, 1220, 1221, 1223
Preuve SQL
SELECT pk, n FROM (SELECT t."id"::text AS pk, row_number() OVER (PARTITION BY h ORDER BY t."id") AS r, count(*) OVER (PARTITION BY h) AS n FROM (SELECT t.*, md5(row(t."tiers_id", t."type_adresse", t."ligne1", t."ligne2", t."code_postal", t."commune", t."code_insee", t."pays", t."est_principale")::text) AS h FROM "tiers_adresse" t) t) s WHERE r > 1 ORDER BY 1

EXACT:tiers_adresse

BloquantdécouvertesûrCohérence entre tablesscore 0,90

Chaque valeur de ligne_facture.ligne_commande_client_id existe dans ligne_commande_client.id (lien retrouvé par le graphe de la base)

Où
ligne_facture.ligne_commande_client_id
Lignes
140 (0,7 % des lignes jugées)
Coût
2 520 € (18,00 € par ligne)
Exemples
10383, 11468, 11482, 11980, 12279
Preuve SQL
SELECT a."id"::text FROM "ligne_facture" a WHERE a."ligne_commande_client_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "ligne_commande_client" b WHERE b."id" = a."ligne_commande_client_id") ORDER BY 1

lien:ligne_facture.ligne_commande_client_id->ligne_commande_client.id

BloquantbibliothèquesûrCohérence entre tablesscore 0,89

Un document correctif (avoir) est rattaché à un document, et ne le dépasse pas

Où
avoir.total_ttc
Lignes
7 (4,0 % des lignes jugées)
Coût
273 € (39,00 € par ligne)
Exemples
102, 128, 133, 171, 51
Preuve SQL
SELECT f."id"::text FROM "avoir" f WHERE f."facture_id" IS NULL OR f."facture_id" IN (SELECT d."id" FROM "facture" d JOIN (SELECT g."facture_id" AS k, sum(g."total_ttc"::numeric) AS s FROM "avoir" g GROUP BY 1) s ON s.k = d."id" WHERE s.s > d."total_ttc"::numeric + 0.01) ORDER BY 1

ERP07:avoir.total_ttc<=facture.total_ttc

BloquantdécouvertesûrUnicitéscore 0,88

Ligne identique à une autre sur toutes les colonnes hors clé technique

Où
article
Lignes
6 (1,4 % des lignes jugées)
Coût
105 € (17,50 € par ligne)
Exemples
335, 351, 363, 387, 406
Preuve SQL
SELECT pk, n FROM (SELECT t."id"::text AS pk, row_number() OVER (PARTITION BY h ORDER BY t."id") AS r, count(*) OVER (PARTITION BY h) AS n FROM (SELECT t.*, md5(row(t."code_article", t."libelle", t."famille_article_id", t."unite_id", t."prix_achat", t."prix_vente", t."poids_kg", t."code_barre", t."statut", t."date_creation", t."date_modification")::text) AS h FROM "article" t) t) s WHERE r > 1 ORDER BY 1

EXACT:article

BloquantbibliothèquesûrUnicitéscore 0,86

Un numéro métier est unique dans sa table

Où
facture.numero_facture
Lignes
308 (5,1 % des lignes jugées)
Coût
13 090 € (42,50 € par ligne)
Exemples
1002, 1014, 1058, 1082, 1096
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP10:facture.numero_facture

BloquantbibliothèquesûrCohérence entre tablesscore 0,86

La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)

Où
facture.numero_facture
Lignes
175 (2,9 % des lignes jugées)
Coût
6 825 € (39,00 € par ligne)
Exemples
1131, 1194, 1200, 1206, 1254
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP12:facture.numero_facture

BloquantbibliothèquesûrUnicitéscore 0,86

Un numéro métier est unique dans sa table

Où
commande_client.numero_commande
Lignes
105 (2,1 % des lignes jugées)
Coût
4 462 € (42,50 € par ligne)
Exemples
1016, 1040, 1056, 1145, 1155
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP10:commande_client.numero_commande

BloquantbibliothèquesûrCohérence entre tablesscore 0,85

Un total de document est la somme des montants de ses lignes, à la tolérance près

Où
facture.total_ttc
Lignes
748 (15,3 % des lignes jugées)
Coût
29 172 € (39,00 € par ligne)
Exemples
1007, 1018, 1019, 1032, 1044
Preuve SQL
SELECT d."id"::text, (s.r IS NOT NULL AND abs(d."total_ttc"::numeric - s.r) <= 0.01) FROM "facture" d JOIN (SELECT l."facture_id" AS k, sum(l."montant_ttc"::numeric) AS s, sum(coalesce((l."montant_ht"::numeric + l."montant_tva"::numeric), l."montant_ttc"::numeric)) AS r FROM "ligne_facture" l WHERE l."facture_id" IS NOT NULL GROUP BY 1) s ON s.k = d."id" WHERE d."total_ttc"::numeric IS NOT NULL AND abs(d."total_ttc"::numeric - s.s) > 0.01 ORDER BY 1

ERP04:facture.total_ttc=ligne_facture.montant_ttc

MineurdécouvertesûrPlausibilitéscore 0,85

prix_unitaire vraisemblable dans son groupe (article_id > article_id>article.famille_article_id)

Où
ligne_commande_client.prix_unitaire
Lignes
458 (2,2 % des lignes jugées)
Coût
5 038 € (11,00 € par ligne)
Exemples
10096, 10177, 10181, 10186, 10205
Méthode

Calcul hors SQL : score robuste |ln x − médiane| / (1,4826 × MAD) dans le groupe choisi par le graphe, et bimodalité à rapport 100 ou 1 000.

STAT:ligne_commande_client.prix_unitaire

MineurdécouvertesûrPlausibilitéscore 0,85

prix_unitaire n'est pas 100 ou 1 000 fois sa référence (somme de ligne_facture.prix_unitaire)

Où
ligne_commande_client.prix_unitaire
Lignes
13 (1,8 % des lignes jugées)
Coût
143 € (11,00 € par ligne)
Exemples
13252, 17191, 17247, 17289, 17300
Preuve SQL
SELECT t."id"::text FROM "ligne_commande_client" t JOIN (SELECT c."ligne_commande_client_id"::text AS cle_ref, sum(c."prix_unitaire"::numeric) AS "prix_unitaire" FROM "ligne_facture" c WHERE c."ligne_commande_client_id" IS NOT NULL GROUP BY 1) r ON r.cle_ref = t."id"::text WHERE t."prix_unitaire"::numeric > 0 AND r."prix_unitaire" > 0 AND (abs(t."prix_unitaire"::numeric / r."prix_unitaire" - 100.0) <= 1.0 OR abs(t."prix_unitaire"::numeric / r."prix_unitaire" - 1000.0) <= 10.0) ORDER BY 1

REF:ligne_commande_client.prix_unitaire

MineurdécouvertesûrPlausibilitéscore 0,85

prix_unitaire n'est pas 100 ou 1 000 fois sa référence (ligne_commande_fournisseur.prix_unitaire)

Où
ligne_facture_fournisseur.prix_unitaire
Lignes
442 (11,3 % des lignes jugées)
Coût
4 862 € (11,00 € par ligne)
Exemples
1009, 1022, 103, 1030, 1033
Preuve SQL
SELECT t."id"::text FROM "ligne_facture_fournisseur" t JOIN "ligne_commande_fournisseur" r ON r."id"::text = t."ligne_commande_fournisseur_id"::text WHERE t."prix_unitaire"::numeric > 0 AND r."prix_unitaire"::numeric > 0 AND (abs(t."prix_unitaire"::numeric / r."prix_unitaire"::numeric - 100.0) <= 1.0 OR abs(t."prix_unitaire"::numeric / r."prix_unitaire"::numeric - 1000.0) <= 10.0) ORDER BY 1

REF:ligne_facture_fournisseur.prix_unitaire

MineurdécouvertesûrPlausibilitéscore 0,85

prix_unitaire vraisemblable dans son groupe (article_id > article_id>article.famille_article_id)

Où
ligne_facture.prix_unitaire
Lignes
337 (1,7 % des lignes jugées)
Coût
3 707 € (11,00 € par ligne)
Exemples
10072, 10116, 10161, 10191, 10195
Méthode

Calcul hors SQL : score robuste |ln x − médiane| / (1,4826 × MAD) dans le groupe choisi par le graphe, et bimodalité à rapport 100 ou 1 000.

STAT:ligne_facture.prix_unitaire

MineurdécouvertesûrPlausibilitéscore 0,85

montant n'est pas 100 ou 1 000 fois sa référence (somme de affectation_reglement.montant_affecte)

Où
reglement.montant
Lignes
147 (2,2 % des lignes jugées)
Coût
1 029 € (7,00 € par ligne)
Exemples
1011, 1156, 1917, 1945, 1965
Preuve SQL
SELECT t."id"::text FROM "reglement" t JOIN (SELECT c."reglement_id"::text AS cle_ref, sum(c."montant_affecte"::numeric) AS "montant_affecte" FROM "affectation_reglement" c WHERE c."reglement_id" IS NOT NULL GROUP BY 1) r ON r.cle_ref = t."id"::text WHERE t."montant"::numeric > 0 AND r."montant_affecte" > 0 AND (abs(t."montant"::numeric / r."montant_affecte" - 100.0) <= 1.0 OR abs(t."montant"::numeric / r."montant_affecte" - 1000.0) <= 10.0) ORDER BY 1

REF:reglement.montant

BloquantdécouvertesûrCohérence entre tablesscore 0,85

Chaque valeur de article.unite_id existe dans unite.id (lien retrouvé par le graphe de la base)

Où
article.unite_id
Lignes
126 (29,6 % des lignes jugées)
Coût
1 764 € (14,00 € par ligne)
Exemples
1, 10, 102, 105, 107
Preuve SQL
SELECT a."id"::text FROM "article" a WHERE a."unite_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "unite" b WHERE b."id" = a."unite_id") ORDER BY 1

lien:article.unite_id->unite.id

BloquantbibliothèquesûrUnicitéscore 0,83

Un numéro métier est unique dans sa table

Où
facture_fournisseur.numero_interne
Lignes
62 (6,6 % des lignes jugées)
Coût
2 635 € (42,50 € par ligne)
Exemples
127, 154, 179, 203, 232
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP10:facture_fournisseur.numero_interne

Bloquantbibliothèqueà confirmerCohérence entre tablesscore 0,83

La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)

Où
facture_fournisseur.numero_interne
Lignes
59 (6,3 % des lignes jugées)
Coût
2 301 € (39,00 € par ligne)
Exemples
180, 199, 229, 34, 346
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP12:facture_fournisseur.numero_interne

BloquantbibliothèquesûrUnicitéscore 0,81

Un numéro métier est unique dans sa table

Où
article.code_article
Lignes
126 (29,6 % des lignes jugées)
Coût
2 205 € (17,50 € par ligne)
Exemples
105, 109, 112, 133, 135
Preuve SQL
WITH o AS (SELECT t."id"::text AS pk, btrim(t."code_article"::text) AS k, lag(btrim(t."code_article"::text)) OVER w AS avant, lead(btrim(t."code_article"::text)) OVER w AS apres, count(*) OVER (PARTITION BY btrim(t."code_article"::text)) AS n, row_number() OVER (PARTITION BY btrim(t."code_article"::text) ORDER BY t."id") AS r FROM "article" t WHERE (t."code_article" IS NOT NULL AND btrim(t."code_article"::text) <> '') WINDOW w AS (ORDER BY t."id")), h AS (SELECT o.*, NOT (coalesce(o.avant, o.k) <= o.k AND o.k <= coalesce(o.apres, o.k)) AS hors FROM o WHERE o.n > 1), g AS (SELECT h.*, count(*) FILTER (WHERE h.hors) OVER (PARTITION BY h.k) AS nh FROM h) SELECT pk FROM g WHERE (g.nh > 0 AND g.nh < g.n AND g.hors) OR ((g.nh = 0 OR g.nh = g.n) AND g.r > 1) ORDER BY 1

ERP10:article.code_article

BloquantdécouvertesûrComplétudescore 0,80

transporteur est rempli (dépendance découverte)

Où
livraison.transporteur
Lignes
110 (1,8 % des lignes jugées)
Coût
1 283 € (11,67 € par ligne)
Exemples
1033, 1097, 1121, 170, 1838
Preuve SQL
SELECT t."id"::text FROM "livraison" t WHERE (t."transporteur" IS NULL OR btrim(t."transporteur"::text) = '') ORDER BY 1

DEC:NV:livraison.transporteur

MajeurbibliothèquesûrCohérence internescore 0,78

Une date d'événement n'est pas antérieure à la date de création ou de référence de sa ligne

Où
commande_client.date_livraison_prevue
Lignes
421 (9,0 % des lignes jugées)
Coût
14 454 € (34,33 € par ligne)
Exemples
100, 104, 1130, 1136, 1144
Preuve SQL
SELECT t."id"::text FROM "commande_client" t WHERE t."date_livraison_prevue"::date < t."date_commande"::date ORDER BY 1

ERP06:commande_client.date_livraison_prevue>=date_commande

MajeurbibliothèquesûrCohérence internescore 0,77

Une date d'événement n'est pas antérieure à la date de création ou de référence de sa ligne

Où
facture.date_echeance
Lignes
632 (12,6 % des lignes jugées)
Coût
21 699 € (34,33 € par ligne)
Exemples
1002, 1009, 1028, 1037, 1038
Preuve SQL
SELECT t."id"::text FROM "facture" t WHERE t."date_echeance"::date < t."date_facture"::date ORDER BY 1

ERP06:facture.date_echeance>=date_facture

BloquantbibliothèquesûrComplétudescore 0,77

Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquante

Où
facture.date_echeance
Lignes
155 (2,8 % des lignes jugées)
Coût
5 683 € (36,67 € par ligne)
Exemples
1016, 115, 1407, 1445, 1478
Preuve SQL
SELECT t."id"::text FROM "facture" t WHERE t."date_echeance"::date::text = ANY('{… 2 valeurs …}') ORDER BY 1

ERP08:facture.date_echeance

MajeurbibliothèquesûrValiditéscore 0,73

Un IBAN a une clé (ISO 7064 mod 97) juste

Où
tiers_banque.iban
Lignes
195 (50,0 % des lignes jugées)
Coût
1 138 € (5,83 € par ligne)
Exemples
1, 101, 102, 103, 105
Preuve SQL
SELECT t."id"::text FROM "tiers_banque" t WHERE (t."iban" IS NOT NULL AND btrim(t."iban"::text) <> '') AND NOT (upper(regexp_replace(t."iban"::text, '\s+', '', 'g')) ~ '^([A-Z]{2}[0-9]{2}[A-Z0-9]{11,30})$' AND (CASE WHEN upper(regexp_replace(t."iban"::text, '\s+', '', 'g')) ~ '^[A-Z0-9]{5,}$' THEN (SELECT string_agg(CASE WHEN s.c ~ '[A-Z]' THEN (ascii(s.c) - 55)::text ELSE s.c END, '' ORDER BY s.i)::numeric % 97 = 1 FROM (SELECT g.i, substr((substr(upper(regexp_replace(t."iban"::text, '\s+', '', 'g')), 5) || substr(upper(regexp_replace(t."iban"::text, '\s+', '', 'g')), 1, 4)), g.i, 1) AS c FROM generate_series(1, length((substr(upper(regexp_replace(t."iban"::text, '\s+', '', 'g')), 5) || substr(upper(regexp_replace(t."iban"::text, '\s+', '', 'g')), 1, 4)))) AS g(i)) s) ELSE false END)) ORDER BY 1

ERP02:tiers_banque.iban

BloquantbibliothèquesûrCohérence entre tablesscore 0,65

La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)

Où
avoir.numero_avoir
Lignes
73 (42,0 % des lignes jugées)
Coût
2 847 € (39,00 € par ligne)
Exemples
100, 101, 102, 103, 104
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP12:avoir.numero_avoir

BloquantbibliothèquesûrUnicitéscore 0,65

Un numéro métier est unique dans sa table

Où
avoir.numero_avoir
Lignes
38 (21,8 % des lignes jugées)
Coût
1 615 € (42,50 € par ligne)
Exemples
12, 13, 15, 160, 167
Méthode

Calcul hors SQL : rangs de chaque série dans l'ordre chronologique, plus longue suite croissante ; un numéro hors de toute plus longue suite est renuméroté, ou en double s'il est déjà porté dans la série.

ERP10:avoir.numero_avoir

BloquantdécouvertesûrComplétudescore 0,61

une ligne de facture a au moins une ligne de ligne_facture qui la vise par facture_id (inclusion inverse découverte)

Où
facture
Lignes
126 (2,1 % des lignes jugées)
Coût
4 620 € (36,67 € par ligne)
Exemples
1158, 1234, 1400, 1411, 2070
Preuve SQL
SELECT d."id"::text FROM "facture" d WHERE TRUE AND NOT EXISTS (SELECT 1 FROM "ligne_facture" f WHERE f."facture_id"::text = d."id"::text) ORDER BY 1

DEC:EXI:facture<-ligne_facture.facture_id

BloquantdécouvertesûrComplétudescore 0,61

une ligne de livraison a au moins une ligne de ligne_livraison qui la vise par livraison_id (inclusion inverse découverte)

Où
livraison
Lignes
84 (1,4 % des lignes jugées)
Coût
980 € (11,67 € par ligne)
Exemples
1342, 1550, 2036, 2179, 266
Preuve SQL
SELECT d."id"::text FROM "livraison" d WHERE TRUE AND NOT EXISTS (SELECT 1 FROM "ligne_livraison" f WHERE f."livraison_id"::text = d."id"::text) ORDER BY 1

DEC:EXI:livraison<-ligne_livraison.livraison_id

BloquantdécouvertesûrComplétudescore 0,59

une ligne de reception a au moins une ligne de ligne_reception qui la vise par reception_id (inclusion inverse découverte)

Où
reception
Lignes
43 (4,6 % des lignes jugées)
Coût
502 € (11,67 € par ligne)
Exemples
100, 131, 132, 133, 134
Preuve SQL
SELECT d."id"::text FROM "reception" d WHERE TRUE AND NOT EXISTS (SELECT 1 FROM "ligne_reception" f WHERE f."reception_id"::text = d."id"::text) ORDER BY 1

DEC:EXI:reception<-ligne_reception.reception_id

BloquantdécouvertesûrCohérence entre tablesscore 0,57

article_id est le article_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)

Où
ligne_livraison.article_id
Lignes
17 (0,1 % des lignes jugées)
Coût
238 € (14,00 € par ligne)
Exemples
16956, 16992, 16993, 17041, 17042
Preuve SQL
SELECT t."id"::text FROM "ligne_livraison" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL AND NOT (t."article_id"::text = m."article_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "ligne_livraison" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:ligne_livraison.article_id=ligne_commande_client.article_id@ligne_commande_client_id

BloquantdécouvertesûrCohérence entre tablesscore 0,54

unite_id est le unite_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)

Où
ligne_facture.unite_id
Lignes
10 (0,1 % des lignes jugées)
Coût
180 € (18,00 € par ligne)
Exemples
13981, 14615, 17794, 1822, 1837
Preuve SQL
SELECT t."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL AND NOT (t."unite_id"::text = m."unite_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."unite_id"::text IS NOT NULL AND m."unite_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."unite_id"::text = m."unite_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:ligne_facture.unite_id=ligne_commande_client.unite_id@ligne_commande_client_id

BloquantdécouvertesûrCohérence entre tablesscore 0,47

Chaque valeur de ligne_commande_client.unite_id existe dans unite.id (lien retrouvé par le graphe de la base)

Où
ligne_commande_client.unite_id
Lignes
56 (0,6 % des lignes jugées)
Coût
1 008 € (18,00 € par ligne)
Exemples
11123, 11892, 12108, 12590, 12772
Preuve SQL
SELECT a."id"::text FROM "ligne_commande_client" a WHERE a."unite_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "unite" b WHERE b."id" = a."unite_id") ORDER BY 1

lien:ligne_commande_client.unite_id->unite.id

BloquantdécouvertesûrCohérence entre tablesscore 0,35

Chaque valeur de ligne_commande_client.article_id existe dans article.id (lien retrouvé par le graphe de la base)

Où
ligne_commande_client.article_id
Lignes
32 (2,0 % des lignes jugées)
Coût
576 € (18,00 € par ligne)
Exemples
12149, 12338, 14291, 17170, 17218
Preuve SQL
SELECT a."id"::text FROM "ligne_commande_client" a WHERE a."article_id" IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "article" b WHERE b."id" = a."article_id") ORDER BY 1

lien:ligne_commande_client.article_id->article.id

BloquantdécouvertesûrCohérence entre tablesscore 0,35

article_id est le article_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)

Où
ligne_facture.article_id
Lignes
2 (0,0 % des lignes jugées)
Coût
36 € (18,00 € par ligne)
Exemples
11986, 12175
Preuve SQL
SELECT t."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL AND NOT (t."article_id"::text = m."article_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "ligne_facture" t JOIN "ligne_commande_client" m ON m."id"::text = t."ligne_commande_client_id"::text WHERE t."article_id"::text IS NOT NULL AND m."article_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."article_id"::text = m."article_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:ligne_facture.article_id=ligne_commande_client.article_id@ligne_commande_client_id

BloquantdécouvertesûrCohérence entre tablesscore 0,17

tiers_id est le tiers_id de la ligne de commande_client visée par commande_client_id (chemin découvert)

Où
facture.tiers_id
Lignes
791 (17,3 % des lignes jugées)
Coût
30 849 € (39,00 € par ligne)
Exemples
1, 10, 1018, 1023, 1032
Preuve SQL
SELECT t."id"::text FROM "facture" t JOIN "commande_client" m ON m."id"::text = t."commande_client_id"::text WHERE t."tiers_id"::text IS NOT NULL AND m."tiers_id"::text IS NOT NULL AND NOT (t."tiers_id"::text = m."tiers_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "facture" t JOIN "commande_client" m ON m."id"::text = t."commande_client_id"::text WHERE t."tiers_id"::text IS NOT NULL AND m."tiers_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:facture.tiers_id=commande_client.tiers_id@commande_client_id

BloquantdécouvertesûrCohérence entre tablesscore 0,17

tiers_id est le tiers_id de la ligne de livraison visée par livraison_id (chemin découvert)

Où
facture.tiers_id
Lignes
9 (17,6 % des lignes jugées)
Coût
351 € (39,00 € par ligne)
Exemples
1840, 2084, 2085, 252, 2537
Preuve SQL
SELECT t."id"::text FROM "facture" t JOIN "livraison" m ON m."id"::text = t."livraison_id"::text WHERE t."tiers_id"::text IS NOT NULL AND m."tiers_id"::text IS NOT NULL AND NOT (t."tiers_id"::text = m."tiers_id"::text) AND m."id"::text NOT IN (SELECT m."id"::text FROM "facture" t JOIN "livraison" m ON m."id"::text = t."livraison_id"::text WHERE t."tiers_id"::text IS NOT NULL AND m."tiers_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= 5 AND 2 * count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= count(*) ORDER BY 1) ORDER BY 1

DEC:CHE:facture.tiers_id=livraison.tiers_id@livraison_id

BloquantdécouvertesûrCohérence entre tablesscore 0,12

tiers_id d'une ligne de tiers_banque contredit par la plupart des lignes qui la visent (reglement ; chemin découvert, imputé à la mère)

Où
tiers_banque.tiers_id
Lignes
2 (0,5 % des lignes jugées)
Coût
28 € (14,00 € par ligne)
Exemples
239, 295
Preuve SQL
SELECT m."id"::text FROM "reglement" t JOIN "tiers_banque" m ON m."id"::text = t."tiers_banque_id"::text WHERE t."tiers_id"::text IS NOT NULL AND m."tiers_id"::text IS NOT NULL GROUP BY 1 HAVING count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= 2 AND 2 * count(*) FILTER (WHERE NOT (t."tiers_id"::text = m."tiers_id"::text)) >= count(*) ORDER BY 1

DEC:CHM:tiers_banque.tiers_id

BloquantdécouvertesûrComplétudescore 0,10

date_echeance est rempli (dépendance découverte)

Où
facture.date_echeance
Lignes
439 (7,2 % des lignes jugées)
Coût
16 097 € (36,67 € par ligne)
Exemples
1004, 1011, 1012, 1053, 1076
Preuve SQL
SELECT t."id"::text FROM "facture" t WHERE (t."date_echeance" IS NULL OR btrim(t."date_echeance"::text) = '') ORDER BY 1

DEC:NV:facture.date_echeance

Bloquantdécouverteà confirmerComplétudescore 0,06

date_livraison_prevue est rempli (dépendance découverte)

Où
commande_client.date_livraison_prevue
Lignes
329 (6,6 % des lignes jugées)
Coût
12 063 € (36,67 € par ligne)
Exemples
1000, 1001, 1002, 1003, 1004
Preuve SQL
SELECT t."id"::text FROM "commande_client" t WHERE (t."date_livraison_prevue" IS NULL OR btrim(t."date_livraison_prevue"::text) = '') ORDER BY 1

DEC:NV:commande_client.date_livraison_prevue

Programme de remédiation

54 action(s), une par règle qui trouve des lignes, en 3 vague(s) ; charge : 1 895 h, montant : 277 326 €. Charge = lignes × minutes de correction du profil pour la dimension ; montant = charge × taux horaire, plus le supplément du rôle de la table. Une ligne visée par deux règles compte dans les deux actions : le total peut dépasser le coût de reprise des lignes distinctes donné plus haut.

1 Avant la migration Bloquant
À corriger avant tout chargement dans l'ERP cible
40 action(s) · 1 179 h · 180 530 €
ActionTableLignesPropriétaireChargeMontantStatut
Un numéro métier est unique dans sa tablearticle126à désigner31,5 h2 205 €À faire
Chaque valeur de article.unite_id existe dans unite.id (lien retrouvé par le graphe de la base)article126à désigner25,2 h1 764 €À faire
Ligne identique à une autre sur toutes les colonnes hors clé techniquearticle6à désigner1,5 h105 €À faire
La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)avoir73à désigner14,6 h2 847 €À faire
Un numéro métier est unique dans sa tableavoir38à désigner9,5 h1 615 €À faire
Un document correctif (avoir) est rattaché à un document, et ne le dépasse pasavoir7à désigner1,4 h273 €À faire
date_livraison_prevue est rempli (dépendance découverte)commande_client329à désigner54,8 h12 063 €À faire
Un numéro métier est unique dans sa tablecommande_client105à désigner26,2 h4 462 €À faire
tiers_id est le tiers_id de la ligne de commande_client visée par commande_client_id (chemin découvert)facture791à désigner158,2 h30 849 €À faire
Un total de document est la somme des montants de ses lignes, à la tolérance prèsfacture748à désigner149,6 h29 172 €À faire
date_echeance est rempli (dépendance découverte)facture439à désigner73,2 h16 097 €À faire
Un numéro métier est unique dans sa tablefacture308à désigner77,0 h13 090 €À faire
Chaque valeur de facture.tiers_id existe dans tiers.id (lien retrouvé par le graphe de la base)facture281à désigner56,2 h10 959 €À faire
La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)facture175à désigner35,0 h6 825 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantefacture155à désigner25,8 h5 683 €À faire
une ligne de facture a au moins une ligne de ligne_facture qui la vise par facture_id (inclusion inverse découverte)facture126à désigner21,0 h4 620 €À faire
tiers_id est le tiers_id de la ligne de livraison visée par livraison_id (chemin découvert)facture9à désigner1,8 h351 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantefacture_fournisseur102à désigner17,0 h3 740 €À faire
Un numéro métier est unique dans sa tablefacture_fournisseur62à désigner15,5 h2 635 €À faire
La numérotation d'une série de documents est continue et chronologique ; un document hors de la suite a été renuméroté et son numéro d'origine manque (obligation de numérotation continue des factures, CGI annexe II art. 242 nonies A)facture_fournisseur59à désigner11,8 h2 301 €À faire
article_id d'une ligne de ligne_commande_client contredit par la plupart des lignes qui la visent (ligne_facture, ligne_livraison ; chemin découvert, imputé à la mère)ligne_commande_client389à désigner77,8 h7 002 €À faire
unite_id est le unite_id de la ligne de article visée par article_id (chemin découvert)ligne_commande_client71à désigner14,2 h1 278 €À faire
Chaque valeur de ligne_commande_client.unite_id existe dans unite.id (lien retrouvé par le graphe de la base)ligne_commande_client56à désigner11,2 h1 008 €À faire
Chaque valeur de ligne_commande_client.article_id existe dans article.id (lien retrouvé par le graphe de la base)ligne_commande_client32à désigner6,4 h576 €À faire
Chaque valeur de ligne_facture.ligne_commande_client_id existe dans ligne_commande_client.id (lien retrouvé par le graphe de la base)ligne_facture140à désigner28,0 h2 520 €À faire
unite_id est le unite_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)ligne_facture10à désigner2,0 h180 €À faire
article_id est le article_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)ligne_facture2à désigner0,4 h36 €À faire
article_id est le article_id de la ligne de ligne_commande_client visée par ligne_commande_client_id (chemin découvert)ligne_livraison17à désigner3,4 h238 €À faire
transporteur est rempli (dépendance découverte)livraison110à désigner18,3 h1 283 €À faire
une ligne de livraison a au moins une ligne de ligne_livraison qui la vise par livraison_id (inclusion inverse découverte)livraison84à désigner14,0 h980 €À faire
une ligne de reception a au moins une ligne de ligne_reception qui la vise par reception_id (inclusion inverse découverte)reception43à désigner7,2 h502 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantetiers130à désigner21,7 h1 517 €À faire
Un numéro métier est unique dans sa tabletiers126à désigner31,5 h2 205 €À faire
Fiche saisie deux fois sous deux formes (doublon flou)tiers94à désigner23,5 h1 645 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantetiers_adresse172à désigner28,7 h2 007 €À faire
Ligne identique à une autre sur toutes les colonnes hors clé techniquetiers_adresse68à désigner17,0 h1 190 €À faire
tiers_id d'une ligne de tiers_banque contredit par la plupart des lignes qui la visent (reglement ; chemin découvert, imputé à la mère)tiers_banque2à désigner0,4 h28 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantetiers_contact166à désigner27,7 h1 937 €À faire
Une valeur sentinelle (N/A, 00000, 1900-01-01) tient la place d'une valeur manquantetiers_contact109à désigner18,2 h1 272 €À faire
Ligne identique à une autre sur toutes les colonnes hors clé techniquetiers_contact84à désigner21,0 h1 470 €À faire
2 Pendant la reprise Majeur
À traiter dans les scripts de reprise
9 action(s) · 576 h · 82 017 €
ActionTableLignesPropriétaireChargeMontantStatut
Une date d'événement n'est pas antérieure à la date de création ou de référence de sa lignecommande_client421à désigner56,1 h14 454 €À faire
Une date d'événement n'est pas antérieure à la date de création ou de référence de sa lignefacture632à désigner84,3 h21 699 €À faire
Une date d'événement n'est pas antérieure à la date de création ou de référence de sa lignefacture_fournisseur210à désigner28,0 h7 210 €À faire
Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)ligne_commande_client1 684à désigner224,5 h22 453 €À faire
Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)ligne_commande_fournisseur198à désigner26,4 h2 640 €À faire
Le montant d'une ligne vaut quantité × prix (× (1 − remise)), sa taxe vaut montant × taux, et ses montants s'additionnent (TTC = HT + TVA)ligne_facture650à désigner86,7 h8 667 €À faire
Un identifiant d'entreprise (SIREN, SIRET) a une clé de Luhn juste, et le SIRET commence par le SIREN de sa lignetiers238à désigner19,8 h1 388 €À faire
Le code postal d'une adresse française est celui de sa commune (référentiel des communes)tiers_adresse406à désigner33,8 h2 368 €À faire
Un IBAN a une clé (ISO 7064 mod 97) justetiers_banque195à désigner16,2 h1 138 €À faire
3 Après la mise en production Mineur
Hygiène à planifier une fois l'ERP en production
5 action(s) · 140 h · 14 779 €
ActionTableLignesPropriétaireChargeMontantStatut
prix_unitaire vraisemblable dans son groupe (article_id > article_id>article.famille_article_id)ligne_commande_client458à désigner45,8 h5 038 €À faire
prix_unitaire n'est pas 100 ou 1 000 fois sa référence (somme de ligne_facture.prix_unitaire)ligne_commande_client13à désigner1,3 h143 €À faire
prix_unitaire vraisemblable dans son groupe (article_id > article_id>article.famille_article_id)ligne_facture337à désigner33,7 h3 707 €À faire
prix_unitaire n'est pas 100 ou 1 000 fois sa référence (ligne_commande_fournisseur.prix_unitaire)ligne_facture_fournisseur442à désigner44,2 h4 862 €À faire
montant n'est pas 100 ou 1 000 fois sa référence (somme de affectation_reglement.montant_affecte)reglement147à désigner14,7 h1 029 €À faire

3. Ce qu'on n'a pas vu

L'audit a regardé 222 colonnes sur 317 avec au moins une règle. Il ne chiffre pas encore les erreurs qui restent dans ce qu'il a regardé : ce chiffre demande un échantillon de constats vérifiés avec vous, ou plusieurs contrôles qui se recoupent. Les colonnes sans aucune règle et les règles écartées sont détaillées ci-dessous.

Règles écartées

Le juge

Chaque élément est jugé deux fois, dans deux ordres ; deux avis différents laissent l'élément en zone grise. Le juge ne voit aucune ligne : des noms, des types, des comptes, au plus cinq valeurs d'une colonne codée.

Colonnes non jugées

42 colonne(s) numérique(s) dont la dispersion n'est expliquée par aucun groupe
  • affectation_reglement.montant_affecte : aucun groupe ne réduit assez la dispersion
  • article.prix_achat : aucun groupe ne réduit assez la dispersion
  • article.prix_vente : aucun groupe ne réduit assez la dispersion
  • article.poids_kg : aucun groupe ne réduit assez la dispersion
  • facture.montant_regle : aucun groupe ne réduit assez la dispersion
  • facture_fournisseur.total_ht : aucun groupe ne réduit assez la dispersion
  • facture_fournisseur.total_tva : aucun groupe ne réduit assez la dispersion
  • facture_fournisseur.total_ttc : aucun groupe ne réduit assez la dispersion
  • facture_fournisseur.montant_regle : aucun groupe ne réduit assez la dispersion
  • ligne_avoir.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_avoir.prix_unitaire : aucun groupe ne réduit assez la dispersion
  • ligne_avoir.taux_tva : aucun groupe ne réduit assez la dispersion
  • ligne_avoir.montant_ht : aucun groupe ne réduit assez la dispersion
  • ligne_commande_client.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_commande_client.taux_tva : aucun groupe ne réduit assez la dispersion
  • ligne_commande_client.quantite_livree : aucun groupe ne réduit assez la dispersion
  • ligne_commande_fournisseur.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_commande_fournisseur.prix_unitaire : aucun groupe ne réduit assez la dispersion
  • ligne_commande_fournisseur.taux_tva : aucun groupe ne réduit assez la dispersion
  • ligne_commande_fournisseur.quantite_recue : aucun groupe ne réduit assez la dispersion
  • ligne_ecriture.debit : aucun groupe ne réduit assez la dispersion
  • ligne_ecriture.credit : aucun groupe ne réduit assez la dispersion
  • ligne_facture.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_facture.remise_pct : aucun groupe ne réduit assez la dispersion
  • ligne_facture.taux_tva : aucun groupe ne réduit assez la dispersion
  • ligne_facture_fournisseur.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_facture_fournisseur.prix_unitaire : aucun groupe ne réduit assez la dispersion
  • ligne_facture_fournisseur.taux_tva : aucun groupe ne réduit assez la dispersion
  • ligne_livraison.quantite : aucun groupe ne réduit assez la dispersion
  • ligne_reception.quantite : aucun groupe ne réduit assez la dispersion
  • mouvement_stock.quantite : aucun groupe ne réduit assez la dispersion
  • ref_commune_cp.departement : aucun groupe dans le graphe
  • reglement.montant : aucun groupe ne réduit assez la dispersion
  • stock.quantite : aucun groupe ne réduit assez la dispersion
  • stock.quantite_reservee : aucun groupe ne réduit assez la dispersion
  • tarif.prix_unitaire : aucun groupe ne réduit assez la dispersion
  • tarif_client.remise_pct : aucun groupe ne réduit assez la dispersion
  • tiers.siren : aucun groupe ne réduit assez la dispersion
  • tiers.siret : aucun groupe ne réduit assez la dispersion
  • tiers.encours_autorise : aucun groupe ne réduit assez la dispersion
  • tiers_adresse.code_postal : aucun groupe ne réduit assez la dispersion
  • tiers_adresse.code_insee : aucun groupe ne réduit assez la dispersion
95 colonne(s) sans aucune règle exécutée, dans 30 table(s)
  • ligne_ecriture : 6
  • tiers : 6
  • facture_fournisseur : 5
  • famille_article : 5
  • tiers_contact : 5
  • article : 4
  • commande_client : 4
  • commande_fournisseur : 4
  • cours_devise : 4
  • depot : 4
  • reglement : 4
  • tiers_adresse : 4
  • compte_general : 3
  • facture : 3
  • journal : 3
  • ligne_avoir : 3
  • livraison : 3
  • mouvement_stock : 3
  • reception : 3
  • unite : 3
  • avoir : 2
  • ecriture : 2
  • ligne_commande_client : 2
  • ligne_facture : 2
  • ligne_facture_fournisseur : 2
  • stock : 2
  • ligne_commande_fournisseur : 1
  • tarif : 1
  • tarif_client : 1
  • tiers_banque : 1

Paramètres

Filtre : une règle est sûre si la borne haute de Wilson de son taux de violation est au plus ε = 0,05 (risque α = 0,05) ; support minimal 30 lignes ; utilité minimale 1,0. Fusion : Dawid-Skene, sensibilité a priori 0,9, force de l'a priori 1,0, couverture minimale des estimateurs 0,5.

4. Questions pour vous

Règles qu'un expert de la reprise exigerait peut-être, mais que les données ne confirment pas seules : elles ne sont pas comptées comme constats. Une réponse « oui » en fait une règle de l'audit suivant ; les lignes concernées sont prêtes.

  1. La colonne tiers_adresse.code_postal doit-elle toujours être remplie (pour une valeur de tiers_adresse.pays) ? Aujourd'hui, 354 ligne(s) sur 1 466 ne la respectent pas (24,1 %).
  2. La colonne reglement.tiers_banque_id doit-elle toujours être remplie (pour une valeur de reglement.mode) ? Aujourd'hui, 344 ligne(s) sur 4 107 ne la respectent pas (8,4 %).
  3. La colonne tiers_contact.telephone doit-elle toujours être remplie (pour une valeur de tiers_contact.est_principal) ? Aujourd'hui, 81 ligne(s) sur 537 ne la respectent pas (15,1 %).
  4. La colonne article.poids_kg doit-elle toujours être remplie (pour une valeur de article.statut) ? Aujourd'hui, 54 ligne(s) sur 370 ne la respectent pas (14,6 %).
  5. La colonne reglement.tiers_banque_id doit-elle toujours être remplie (pour une valeur de reglement.mode) ? Aujourd'hui, 16 ligne(s) sur 203 ne la respectent pas (7,9 %).
  6. La colonne facture_fournisseur.date_echeance doit-elle toujours être remplie (pour une valeur de facture_fournisseur.statut) ? Aujourd'hui, 4 ligne(s) sur 30 ne la respectent pas (13,3 %).