# Match — comparaison de déclarations explicites Profil de distribution révisé : entrée utilisateur uniquement, aucun catalogue ou projection embarqué. Calcul local sans réseau, paiement ou exécution des offres. Données déclarées, aucune certification de vérité, sécurité ou disponibilité. Les unités/conditions incompatibles ne sont pas classées ensemble. ## Démarrer Node.js 20 ou supérieur déjà installé. Extraire dans un dossier neuf ; aucune dépendance à installer. ```powershell node cli.mjs --input examples/comparison.json node cli.mjs --input votre-entree.json ``` Le résultat JSON est affiché sur stdout. Aucune option de fichier de sortie. L'exemple existant est entièrement synthétique, daté du 24 octobre 2026, sans fournisseur réel ou mesure : ne pas le présenter comme catalogue actuel. Pour votre entrée, renseigner explicitement date, contraintes, descriptions et provenance ; aucune actualisation automatique. ## Comparer vos déclarations Copier examples/comparison.json vers une nouvelle entrée et remplacer les valeurs explicitement. Ne pas fournir de secret, document client ou donnée personnelle. La date evaluatedAt, les familles, unités et formats sont explicites et sensibles à la casse. Les champs inconnus autorisés prennent null ; ils ne doivent pas être remplacés par des valeurs favorables. | Élément | Champs requis | |---|---| | Entrée | schema = datoka.match.input.v0.1 ; evaluatedAt au format YYYY-MM-DD ; request ; offers | | request | family, inputFormat, outputFormat : textes ; allowedEffects : liste des effets autorisés (vide = aucun) ; sizeBytes : entier positif ou nul ; maxAgeDays : entier de 0 à 3650 | | Une offre | id unique, name ; family texte ou null ; inputFormats/outputFormats/effects listes ou null ; maxBytes entier ou null ; availability ; price ; provenance | | availability | declared_available, pilot, withdrawn ou unknown | | provenance | source texte ; revision texte ou null ; declaredAt date ou null ; kind : synthetic, publisher_declaration ou editorial_snapshot | | price | kind : known, unknown ou quote ; amountAtomic ; decimals ; currency ; unit ; basis ; conditions | Prix known : amountAtomic est une chaîne entière positive ou nulle de 30 chiffres maximum, decimals un entier de 0 à 18. Pour unknown/quote, ces deux champs sont null. currency/unit/basis/conditions sont des textes ou null ; les quatre doivent être renseignés et identiques pour comparer les prix. Déclarer toutes les conditions pertinentes (quantités, paliers, taxes, remises). Aucun taux de change, conversion token/fichier ou volume d'abonnement implicite. Un zéro explicite est distinct d'un prix manquant. Textes : 1 à 512 caractères sans caractères de contrôle ; listes : 32 valeurs distinctes maximum ; entiers : limites de précision sûre JavaScript ; 1000 offres et fichier de 2 Mio maximum. Champs supplémentaires refusés pour éviter les erreurs de saisie silencieuses. ## Lire et conserver le résultat - compatible_declared : contraintes satisfaites selon les déclarations. Ce n'est pas une validation indépendante. - excluded : au moins une incompatibilité connue ; reasons indique laquelle. - indeterminate : champ requis inconnu ou déclaration trop ancienne/future ; aucune conclusion positive. - rank null : pas de classement. priceGroups décrit seulement les groupes réellement comparables ; une offre seule ne devient pas « meilleure du marché ». Le JSON conserve request, declaration, provenance, reasons et les prix pour expliquer les résultats. sourceHashes identifie les octets fournis, sans certifier leur vérité. Les déclarations déterminent les conclusions : une fausse déclaration n'est pas rendue vraie par le calcul. ## Refus, conservation et limites Code 0 : résultat transmis à stdout ; code 2 : refus générique sur stderr sans contenu de l'entrée. Les anciens modes de catalogue et les options de sortie ne sont pas disponibles : ne pas utiliser cette variante comme lecteur de projections historiques. Une erreur ne restitue aucun ancien résultat. Corriger l'entrée puis relancer explicitement. Cette variante ne crée aucun fichier de rapport et ne qualifie pas la publication durable d'un export. Une redirection externe ou capture interrompue peut être partielle ; ne pas assimiler cette capture à une remise complète. L'API compare dans src/match.mjs retourne le résultat en mémoire pour une intégration locale. Aucun moteur natif d'export n'est fourni. K3 reste non évalué sans observations ; ce paquet n'embarque aucune mesure, réputation, preuve client ou fournisseur. K2 ne requiert pas N2. Le résultat conserve request, declaration, provenance, reasons et le hash des octets utilisateur ; empreinte ne signifie pas authenticité. Ne pas partager un résultat contenant vos propres informations confidentielles. MANIFEST.json donne tailles et SHA256 des fichiers (hors lui-même) ; l'empreinte du ZIP identifie la sélection. L’usage local personnel ou professionnel est gratuit selon CONDITIONS.md, adopté par accord consigné le 25 octobre 2026. Cet accord n’accorde pas aux utilisateurs de permission de modification ou redistribution du logiciel ; vos propres données et descriptions restent distinctes du code. Lire aussi NOTICE-LIMITES.md. Aucune licence open source ni autorisation de publication immédiate n’est déduite.