/** * Les DEUX noms d'un scheme Peppol, et comment ramener l'un à l'autre — GPR-1109. * * La code list publie chaque scheme sous deux orthographes : le code EAS * numérique (`iso6523`, ex. `0204`) et la forme symbolique (`schemeid`, ex. * `DE:LWID`). Ce sont deux NOMS du MÊME scheme, pas deux schemes. * * ## ⛔ Pourquoi cette table existe * * Mesuré en production le 2026-08-20 : un compte dont l'identifiant est * enregistré sous la forme symbolique ne pouvait envoyer AUCUN document par * `POST /v1/invoices/import`. * * - document déclarant `0204` → conforme, puis `422 supplier_identity_not_owned` * - document déclarant `DE:LWID` → `422 validation_failed` (BR-CL-25 : le * schemeID doit appartenir à la CEF EAS code list, donc être numérique) * * Aucune troisième écriture n'existait, et **9 comptes sur 18** étaient dans ce * cas. Le défaut n'était dans aucune des deux règles — c'était le chaînon * manquant entre elles. * * ## ⛔ POURQUOI UNE CONSTANTE GRAVÉE ET PAS UN READ DU JSON * * Exactement la raison de `ROUTABLE_SCHEMES`, à côté : l'artefact versionné est * l'AUTORITÉ, mais il se lit avec `readFileSync(__dirname + …)`, ce qui est bon * dans un test et faux dans une route Next.js — le bundler ne trace pas une * lecture de fichier au runtime, donc le JSON n'existe pas dans la fonction * déployée. Même forme, même garde-fou : `__tests__/canonical-schemes-drift.test.ts` * RE-DÉRIVE cette table depuis le JSON et échoue dans les DEUX sens. * **Ne jamais éditer cette liste à la main — la régénérer.** * * ## ⭐ Pourquoi TOUTES les entrées, y compris les dépréciées * * Canonicaliser est une **traduction**, pas une **autorisation**. Un scheme * déprécié peut parfaitement être enregistré sur un compte ancien ; refuser de le * traduire le rendrait invisible à la garde de propriété alors que la ligne * existe en base — on transformerait un scheme retiré du catalogue en compte * bloqué. L'autorisation, elle, est le rôle de `isRoutableScheme`, qui filtre * bien sur active+registrable. * * ## Ce que cette table ne fait PAS * * Elle ne dit pas qu'un scheme est routable, ni qu'un identifiant est bien formé, * ni qu'il appartient à l'appelant. Traduction d'un NOM, rien d'autre. */ /** * Ramène un scheme à son code EAS numérique — la forme que le RÉSEAU exige. * * ⚠️ Un scheme inconnu ressort **inchangé** (trimé), jamais `null` et jamais une * exception. Transformer « je ne connais pas ce nom » en « je refuse » ferait de * cette table une allowlist, c'est-à-dire nous rendrait plus stricts que le * réseau — l'erreur symétrique d'une mort asynchrone, et la pire des deux * (GPR-904). Un scheme neuf, publié après notre version de la code list, doit * continuer de fonctionner comme avant. */ export declare function canonicalScheme(scheme: string): string; /** * Le même lookup, mais qui DIT quand il ne connaît pas — `undefined`, jamais * l'entrée renvoyée telle quelle. * * ⛔ Cette distinction n'est pas cosmétique. `canonicalScheme` trime avant de * rendre, donc « inconnu » et « connu » se ressemblent dangereusement : comparer * son retour à l'entrée BRUTE fait lire « résolu » là où seul un espace a * disparu. Mesuré (GPR-1110) : `" 0193:ABCD"` ressortait trimé, donc différent de * l'entrée, donc pris pour un scheme à deux segments — et `" 0193:ABCD:EFGH"` se * découpait en `{scheme:"0193:ABCD", id:"EFGH"}`. * * ⭐ Tout appelant qui a besoin de savoir SI la table connaît un nom doit utiliser * cette fonction. `canonicalScheme` reste le bon choix pour TRADUIRE, où * l'identité sur un scheme inconnu est le comportement voulu (GPR-904). */ export declare function lookupCanonicalScheme(scheme: string): string | undefined; /** * Le pays d'un scheme, ou `undefined` quand la liste n'en publie pas. * * Accepte les DEUX orthographes : elle canonicalise avant de consulter, donc * `"NO:ORG"` et `"0192"` rendent tous deux `"NO"`. * * `undefined` couvre DEUX situations que l'appelant doit distinguer lui-même * s'il y tient : un scheme international (`DUNS`), et un scheme que notre version * de la liste ne connait pas encore. Les confondre dans un repli en dur est * précisément le défaut que ce module ferme — ne jamais rendre un pays par * défaut ici, ou l'information manquante serait maquillée en fait. */ export declare function countryForScheme(scheme: string): string | undefined; /** * ⚠️ Écrites pour le test de dérive, mais PUBLIÉES depuis `index.ts` (GPR-1110) — * le verrou vit dans la console et la table dans le SDK, donc il n'existe pas de * chemin privé entre les deux. Elles font par conséquent partie du contrat du * paquet : les retirer serait un changement majeur, pas un nettoyage. */ export declare const CANONICAL_SCHEME_COUNT: number; export declare const CANONICAL_SCHEMES_VERSION = "9.7"; /** Nombre de schemes pour lesquels la liste publie un pays. Verrouille par le test de derive. */ export declare const SCHEME_COUNTRY_COUNT: number; //# sourceMappingURL=canonical-schemes.d.ts.map