etalab / transport-site

Rendre disponible, valoriser et améliorer les données transports
https://transport.data.gouv.fr
195 stars 30 forks source link

Changement cassants probables à venir avec Validata #4060

Open thbar opened 3 months ago

thbar commented 3 months ago

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 :

Je vous soumets les changements prévus pour avis :

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": []
  }
}
AntoineAugusti commented 3 months ago

Lien Mattermost

AntoineAugusti commented 3 months ago

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

AntoineAugusti commented 3 months ago

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 commented 2 months ago

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.