Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changement cassants probables à venir avec Validata #4060

Open
thbar opened this issue Jul 15, 2024 · 4 comments
Open

Changement cassants probables à venir avec Validata #4060

thbar opened this issue Jul 15, 2024 · 4 comments
Assignees
Labels
dette technique Entretien & maintenance générale, nécessaire pour que le code reste de bonne qualité qualité des ressources

Comments

@thbar
Copy link
Contributor

thbar commented Jul 15, 2024

Cf échange avec @pierrecamilleri sur Mattermost, à discuter.

Echange avec Pierre

On va sans doute simplifier le rapport de validation renvoyé par Validata, avec des changements cassants.

Globalement, le constat est que le rapport, calqué sur le rapport de frictionless :

  • contient beaucoup trop d'infos
  • Créé une dépendance importante avec frictionless : s'ils changent leur format c'est difficile d'assurer la rétrocompatibilité

Je vous soumets les changements prévus pour avis :

  • métadonnées à la racine de l'objet au lieu de _meta.args, sauf les options de validation dans un objet options: { ... }
  • Retrait de la propriété tasks : il n'y a toujours qu'une unique tâche de validation dans validata.
  • Consolider les erreurs dans une seule propriété errors, au lieu d'avoir des erreurs générales et des erreurs relatives à une tâche en particulier.
  • Retirer un certain nombre d'informations générales : tout ce qui fait référence aux données elles-mêmes - le rappel des données complètes (!), labels (les en-têtes des colonnes du fichier validé), dialect, format (qui sera toujours "inline" via Validata), hashing, le rappel du schéma complet.
  • Simplifier également les erreurs :
    • ne pas rappeler les données de la ligne complète en cas d'erreur (cells),
    • consolider type et code qui portent la même information,
    • consolider message, note et description en un seul champ message.
    • simplifier les éléments de contexte dans un objet context: { fieldName: ..., rowNumber: ..., colNumber: ... }
    • retirer name (il y a déjà title et type, ça fait beaucoup)

Qu'en pensez-vous ?

Un exemple de rapport sous ce nouveau format :

{
  "schema": "https://raw.githubusercontent.com/pierrecamilleri/table-schema-profile-test/master/test_schemas/schema-siret.json",
  "url": "https://raw.githubusercontent.com/pierrecamilleri/table-schema-profile-test/master/data-siret.csv",
  "validata-table-version": "0.11.1",
  "options": {
    "case-sensitive-header": true
  },
  "report": {
    "date": "2024-06-05T08:53:31.570500+00:00",
    "valid": false,
    "stats": {
      "errors": 2,
      "seconds": 0.007,
      "warnings": 0,
      "fields": 2,
      "rows": 3,
    },
    "warnings": [],
    "errors": [
      {
        "cell": "abc",
        "message": "La valeur abc n'est pas un numéro SIREN français valide.",
        "context": {
          "fieldName": "SIREN",
          "rowNumber": 3,
          "colNumber": 3
        },
        "tags": [
          "#body"
        ],
        "title": "Numéro SIREN invalide",
        "type": "french-siren-value"
      },
      {
        "cell": "01234567800010",
        "message": "La valeur 01234567800010 n'est pas un numéro SIRET français valide.",
        "context": {
          "fieldName": "SIRET",
          "rowNumber": 4,
          "colNumber": 1
        },
        "tags": [
          "#body"
        ],
        "title": "Numéro SIRET invalide",
        "type": "french-siret-value"
      }
    ]
  }
}

À comparer avec le rapport initiale plus de 3 fois plus long.

{
  "_meta": {
    "args": {
      "header_case": "true",
      "schema": "https://raw.githubusercontent.com/pierrecamilleri/table-schema-profile-test/master/test_schemas/schema-siret.json",
      "url": "https://raw.githubusercontent.com/pierrecamilleri/table-schema-profile-test/master/data-siret.csv"
    },
    "validata-table-version": "0.11.1"
  },
  "report": {
    "date": "2024-06-05T08:53:31.570500+00:00",
    "errors": [],
    "stats": {
      "errors": 2,
      "seconds": 0.007,
      "tasks": 1,
      "warnings": 0
    },
    "tasks": [
      {
        "errors": [
          {
            "cell": "abc",
            "cells": [
              "92367996300010",
              "abc"
            ],
            "code": "french-siren-value",
            "description": "Le numéro de SIREN indiqué n'est pas valide selon la définition de l'[INSEE](https://www.insee.fr/fr/metadonnees/definition/c2047).",
            "fieldName": "SIREN",
            "fieldNumber": 2,
            "fieldPosition": 2,
            "message": "La valeur abc n'est pas un numéro SIREN français valide.",
            "name": "",
            "note": "",
            "rowNumber": 3,
            "rowPosition": 3,
            "tags": [
              "#body"
            ],
            "title": "Numéro SIREN invalide",
            "type": "french-siren-value"
          },
          {
            "cell": "01234567800010",
            "cells": [
              "01234567800010",
              "923679963"
            ],
            "code": "french-siret-value",
            "description": "Le numéro de SIRET indiqué n'est pas valide selon la définition de l'[INSEE](https://www.insee.fr/fr/metadonnees/definition/c1841).",
            "fieldName": "SIRET",
            "fieldNumber": 1,
            "fieldPosition": 1,
            "message": "La valeur 01234567800010 n'est pas un numéro SIRET français valide.",
            "name": "",
            "note": "",
            "rowNumber": 4,
            "rowPosition": 4,
            "tags": [
              "#body"
            ],
            "title": "Numéro SIRET invalide",
            "type": "french-siret-value"
          }
        ],
        "labels": [
          "SIRET",
          "SIREN"
        ],
        "name": "memory",
        "partial": false,
        "place": "<memory>",
        "resource": {
          "data": [
            [
              "SIRET",
              "SIREN"
            ],
            [
              "83014132100034",
              "830141321"
            ],
            [
              "92367996300010",
              "abc"
            ],
            [
              "01234567800010",
              "923679963"
            ]
          ],
          "dialect": {
            "headerCase": true
          },
          "format": "inline",
          "hashing": "deprecated",
          "layout": {
            "headerCase": true,
            "limitRows": 100000
          },
          "name": "memory",
          "profile": "deprecated",
          "schema": {
            "$schema": "https://raw.githubusercontent.com/pierrecamilleri/table-schema-profile-test/master/tableschema-fr-profile.json",
            "fields": [
              {
                "frFormat": "siret",
                "name": "SIRET",
                "type": "string"
              },
              {
                "frFormat": "siren",
                "name": "SIREN",
                "type": "string"
              }
            ],
            "name": "siret-siren-frprofile",
            "title": "Test avec frFormat Siren et Siret",
            "version": "v0.1.0"
          },
          "scheme": "deprecated",
          "stats": {
            "bytes": "deprecated",
            "fields": 2,
            "hash": "deprecated",
            "rows": 3
          },
          "type": "table"
        },
        "scope": [
          "hash-count-error",
          "byte-count-error",
          "field-count-error",
          "row-count-error",
          "blank-header",
          "extra-label",
          "missing-label",
          "blank-label",
          "duplicate-label",
          "incorrect-label",
          "blank-row",
          "primary-key-error",
          "foreign-key-error",
          "extra-cell",
          "missing-cell",
          "type-error",
          "constraint-error",
          "unique-error"
        ],
        "stats": {
          "errors": 2,
          "fields": 2,
          "rows": 3,
          "seconds": 0.007,
          "warnings": 0
        },
        "structure_warnings": [],
        "time": 0.007,
        "type": "table",
        "valid": false,
        "warnings": []
      }
    ],
    "time": 0.007,
    "valid": false,
    "version": "5.16.1",
    "warnings": []
  }
}
@thbar thbar added the dette technique Entretien & maintenance générale, nécessaire pour que le code reste de bonne qualité label Jul 15, 2024
@AntoineAugusti
Copy link
Member

Lien Mattermost

@AntoineAugusti
Copy link
Member

Je vais regarder ce que ça implique pour nous et vérifier qu'on conserverait toutes les fonctionnalités que l'on a.

@AntoineAugusti
Copy link
Member

AntoineAugusti commented Jul 18, 2024

Nous avons plusieurs fichiers JSON de réponses Validata pour différentes situations.

Il serait utile d'avoir ces fichiers mis à jour avec les changements prévus pour adapter notre client Validata API et effectuer les ajustements nécessaires.

@pierrecamilleri, c'est possible d'avoir ça ?

@AntoineAugusti
Copy link
Member

Pierre a partagé des fixtures de la nouvelle version dans #4141 et j'ai adapté notre code pour prendre en compte les changements du format de retour de l'API.

On est prêts de notre côté et on attend de connaitre le calendrier de déploiement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dette technique Entretien & maintenance générale, nécessaire pour que le code reste de bonne qualité qualité des ressources
Projects
None yet
Development

No branches or pull requests

2 participants