Conformité & traçabilité
Cette page documente, à destination des auditeurs, développeurs et institutions, comment PRECONIA prouve(1) la fidélité de sa base de données aux données officielles de l'Assurance maladie et du CERAH, et (2) la conformité de son algorithme et de son évaluateur de cumul à l'arrêté du 6 février 2025. Le principe directeur : ne jamais demander de nous croire sur parole— chaque affirmation est soit vérifiable automatiquement par un script reproductible, soit tracée vers la section exacte du texte réglementaire et le test qui la verrouille. L'intégralité du code, des données et de leur historique est publique : github.com/PRECONIA/preconia.
1. Vérification reproductible de la base de données
La base tarifaire officielle LPPTOTest publiée par la CNAMTS et téléchargeable par quiconque sur le site du codage de l'Assurance maladie. Le script scripts/verifier-lpptot.mjs du dépôt la télécharge, la parse et confronte chaque code LPP, tarif et libellé des fichiers data/*.jsonde PRECONIA à l'enregistrement officiel correspondant. Il s'exécute sans aucune dépendance, en une commande :
git clone https://github.com/PRECONIA/preconia.git && cd preconia node scripts/verifier-lpptot.mjs
Résultat de la dernière campagne (9 juillet 2026, base LPPTOT892) :
Les 1092 contrôles portent sur 420 codes LPP distincts : un même code officiel est re-vérifié dans chacun des fichiers qui le référence (code mère, catalogue de recherche, fiche de modèle de marque…), ce qui garantit sa cohérence d'un fichier à l'autre en plus de sa conformité à la base.
Empreinte SHA-256 de la base officielle vérifiée : b99c78f05d4a217c7dd930cc63561f9ab30f4aa996487b5b642c004fb31e4662. Quiconque télécharge la même version de la LPPTOT peut recalculer cette empreinte et ré-exécuter la vérification — c'est l'équivalent informatique d'une contre-expertise. Le script sort en erreur au moindre écart (code absent, radié ou tarif divergent) ; les libellés que nous reformulons pour la lisibilité (abréviations développées) sont signalés à part, en avertissements.
Le contrôle est bidirectionnel: outre la vérification de chaque code porté par PRECONIA, le script énumère l'intégralité des codes « VPH » de la base officielle (427recensés) et signale toute ligne en vigueur absente du catalogue — c'est la détection des nouveautés (nouvelle inscription, lignes RBEU à venir…). À la dernière campagne : 0 nouveauté non couverte ; 7 codes documentés hors périmètre (monte-escaliers transportables, anciens codes en nom de marque transitoires — liste justifiée dans le script).
2. Contrôle continu (intégration continue)
À chaque modification du code ou des données, et chaque semaine à date fixe, GitHub Actions — un tiers neutre — exécute publiquement : la vérification de typage, les tests unitaires des règles, la construction complète du site (qui échoue si une donnée viole un schéma ou une contrainte de cohérence), et le vérificateur LPPTOTci-dessus contre la base courante de la CNAMTS. Personne ne peut donc publier une version dont les données divergent de la base officielle sans que le contrôle passe au rouge — y compris si c'est la CNAMTS qui publie une nouvelle version modifiant un tarif : l'exécution hebdomadaire le détecte. L'historique de toutes les exécutions est consultable sur github.com/PRECONIA/preconia/actions.
3. Traçabilité des données
Toute la connaissance métier de PRECONIA vit dans des fichiers de données séparés du code (data/*.json), chacun portant sa source et sa date de mise à jour. Aucun coefficient, code ou tarif n'est écrit « en dur » dans l'interface.
| Fichier | Contenu | Source officielle | Vérification |
|---|---|---|---|
| device-lpp.json | 22 codes mères d'achat neuf par type/classe, avec tarifs | Base LPP (LPPTOT, CNAMTS) | Vérificateur : existence, vigueur et tarif de chaque code |
| device-models.json | Catalogue des modèles inscrits (396 codes marque/modèle) | Liste CERAH des VPH inscrits + base LPP | Vérificateur : existence et vigueur ; marque retrouvée dans la désignation |
| lppr.json / lppr-adjonctions.json | 380 lignes du moteur de recherche (achat neuf, adjonctions, PAP) | Base LPP (LPPTOT, CNAMTS) | Vérificateur : existence, vigueur et libellé de chaque code |
| lppr-prestations.json | 32 forfaits LLD, LCD, SAV, MAD et livraison, avec tarifs | Base LPP (LPPTOT, CNAMTS) | Vérificateur : existence, vigueur, tarif et libellé |
| location-forfaits.json | Correspondance catégorie → forfaits de location (LCD ≤ 13 / 14–26 sem, option d'achat, MAD LCD, LLD par classe) | Arrêté du 06/02/2025 (Titre I ch. 9, Titre IV 3.3) + base LPP | Vérificateur + contrôles de cohérence au build (lib/data.ts) |
| mad-forfaits.json | Niveaux MAD1/MAD2 par catégorie de VPH | Arrêté du 06/02/2025 (Titre IV 5.1 et 5.2) + base LPP | Vérificateur + tests unitaires (madForfaitFor) |
| adjonctions.json / pap.json / adjonction-brands.json | Adjonctions facturables du parcours, forfaits PAP A/B, variantes de marque | Arrêté du 06/02/2025 (Titre IV §7) + base LPP | Vérificateur (codes, tarifs, sentinelle « sur devis ») + tests de compatibilité |
| devices.json | Catégories, modes de prise en charge, paliers de prescripteur, DAP | Arrêté du 06/02/2025 (Titre I et IV) | Tests unitaires (éligibilités, prescriberFor) + revue contre le texte |
| cumul.json | Matrice des non-cumuls entre catégories | Arrêté du 06/02/2025 (Titre IV 4.1–4.2) | Tests unitaires ligne à ligne (isCumulAllowed, cumulVerdict) |
| device-indications.json | Indications officielles de prise en charge par catégorie et mode | Arrêté du 06/02/2025 (sections « indications ») | Revue contre le texte (citations quasi littérales) |
| classes.json / besoins.json | Classes d'usage A/B/C (code de la route) ; fiche d'évaluation des besoins | Arrêté du 06/02/2025 (Titre IV §2) ; fiche d'évaluation 2026 | Tests unitaires (classeRoute) + revue |
Prestations et forfaits à jour du 2026-07-02 ; règles de cumul à jour du 2026-07-01. Source générale : Nomenclature VPH 2025 (LPPR) + fiche d'évaluation des besoins 2026 + fiche de préconisation 2026.
4. Traçabilité des règles de l'algorithme et du cumul
Toute la logique réglementaire est isolée dans des fonctions pures (lib/rules.ts), sans état ni dépendance à l'interface, couvertes par des tests unitaires (tests/rules.test.ts) dont les assertions citent les sections de l'arrêté. La table ci-dessous fait correspondre chaque règle implémentée à sa référence dans l'arrêté du 6 février 2025, à son implémentation et à son contrôle. Un auditeur peut la parcourir ligne à ligne, texte en main.
| Règle implémentée | Référence (arrêté du 06/02/2025) | Implémentation | Contrôle |
|---|---|---|---|
| Catégories de VPH et acronymes (FMP … SCO) | Titre IV, §1 | data/devices.json | Schémas zod au build |
| Éligibilité à la LCD : FMP, FMPR, FRM, FRE uniquement | Titre I ch. 9, 9.1 | devices.json (modes) + deviceAllowedForDuree() | tests/rules.test.ts (temporalité) + E2E |
| Éligibilité à la LLD : FRMP, FRMV, FREP (A/B/C), FREV, POU_MRE | Titre IV, 3.3.1 | devices.json (modes) + deviceAllowedForDuree() | tests/rules.test.ts + E2E |
| Forfait hebdomadaire LCD selon la durée (≤ 13 sem / 14–26 sem) | Titre I, 9.3 | lcdForfaitFor() + location-forfaits.json | tests « forfaits de location » + vérificateur LPPTOT |
| Option d'achat LCD par catégorie, au terme des 26 semaines ; garantie 2 ans | Titre I, 9.3 ; 6.1.1 | lcdOptionAchatFor() + note détaillée sur la fiche | Tests unitaires + E2E |
| Forfait trimestriel LLD par catégorie, FREP décliné par classe A/B/C | Titre IV, 3.3.2 | lldForfaitFor() | Tests unitaires + vérificateur |
| MAD1 / MAD2 réservés à l'achat et à la LLD, 3 niveaux selon la catégorie | Titre IV, 5.1 et 5.2 | madForfaitFor() + mad-forfaits.json | Tests unitaires + vérificateur |
| MAD LCD dédiée, réservée FRM et FRE, une fois par épisode de location | Titre I, 9.8 | madLcdFor() | Tests unitaires + E2E |
| Livraison sur prescription : 1 par VPH / 5 ans (3 ans avant 16 ans) | Titre I, 9.9 | meta.json (livraison) + libellé sur la fiche | Vérificateur (code, tarif) + revue |
| Prescripteur à l'achat (qui signe l'ordonnance) : médecin/ergo (FMP, FMPR, FRM, BASE, POU_S) ; MPR/DU/formation ou ergo seul (FRMC, FRMA, FRMP) ; MPR/DU ou ergo en équipe pluridisciplinaire (FRMS, FRMV, FRE, FREP, FREV, POU_MRE, CYC, SCO) | Titre IV, 3.1.4.1 et 3.1.4.2.4 | devices.json (presc) + prescriberFor() | Tests dédiés (prescriberFor) |
| Évaluation des besoins et fiche de préconisation — professionnel distinct du prescripteur : équipe pluridisciplinaire (catégories complexes) ; prescripteur compétent (FRM, FRMC, FRMA, FRMP) ; non requise (FMP, FMPR, BASE, POU_S) | Titre IV, 3.1.4.2.1 | devices.json (eval) + carte evaluators | Schéma zod + cohérence eval/fiche au build |
| LCD manuelle prescriptible par médecin, ergothérapeute ou kinésithérapeute | Titre I, 9.5.a | prescriberFor(pec = lcd) | Test dédié + E2E |
| LCD d'un FRE : palier restreint, DAP, essai préalable et certificat de conduite | Titre I, 9.5.b | prescriberFor() + devices.json (dap) + essaisNotes() | Test dédié + E2E |
| Renouvellement à l'identique par médecin généraliste ou ergothérapeute | Titre IV, 3.1.6 | prescriberFor(mad = renouv_id) | Test dédié + E2E |
| LCD : 26 forfaits hebdomadaires consécutifs maximum par année glissante | Titre I, 9.6 | Encarts du parcours + fiche PDF | E2E (présence des encarts) |
| Délai de carence d'un an après le dernier forfait de location (dérogation : indication différente) | Titre I, 9.6 ; Titre IV, 3.3.2 et 3.1 | Encarts CARENCE_LCD / CARENCE_LLD + fiche PDF | E2E |
| Renouvellement à 5 ans (3 ans avant 16 ans) ; seuil réglementaire de 16 ans | Titre IV, 3.1.6 et 3.3.5 ; Titre I, 9.9 | Étape âge du parcours + libellés | E2E |
| Renouvellement anticipé dérogatoire (VPH irréparable, évolution rapide) | Art. R. 165-24 CSS ; Titre IV, 3.1.6 et 3.3.5 | Encart de l'étape mise à disposition | E2E |
| En LCD, adjonctions et PAP inclus au forfait hebdomadaire — aucune facturation séparée | Titre IV, §7 ; Titre I, 9.3 | WalkerShell (billAdj) : codes/tarifs retirés, rubrique « à fournir » sur la fiche | E2E (parcours LCD complet) |
| Supplément appui-tête non cumulable avec le forfait PAP A | Titre IV, §7 | Exclusion automatique dans l'étape adjonctions | E2E |
| Forfait PAP A = membre supérieur et dossier ; PAP B = membre inférieur, hanches et siège | Titre IV, §7 | pap.json (régions → forfaits) | Vérificateur (codes/tarifs) + revue contre le texte |
| Compatibilité des adjonctions par catégorie de VPH | Titre IV, §7.1 | adjonctions.json (compat) + filterAdjonctions() | Tests unitaires (invariant 3) |
| Adjonctions sur devis : DAP, mention manuscrite, essai réel, confirmation écrite du patient | Titre IV, §7 | Notes dédiées (étape adjonctions + fiche PDF) | Revue + E2E |
| Non-cumuls : deux non-modulaires ; deux manuels modulaires (exception sport FRMS) ; deux électriques modulaires ; cycle + manuel modulaire ; scooter + électrique ; AAP + électrique ou scooter ; sièges coquille. Le cumul manuel modulaire + électrique modulaire est autorisé. | Tableau ministériel « Cumul 2025 » (handicap.gouv.fr) + Titre IV 4.2 | cumul.json + isCumulAllowed() | Tests unitaires ligne à ligne |
| LCD exclusive de tout autre VPH loué ou vendu ; dérogation LCD d'un FRE (manuel possédé sans AAP, impossibilité transitoire) | Titre IV, 4.1 | cumulVerdict() + verdict « dérogation » du module cumul | Tests dédiés + E2E |
| Essais achat/LLD : 4 modèles sur catalogue, comparatif d'au moins 2, essai réel 7 j (48 h min) — aucune facturation avant la fin | Titre IV, 3.1.4.2.3 | essaisNotes() (résultat + fiche PDF) | E2E |
| Essai préalable en équipe pluridisciplinaire + certificat (FRE, scooters, AAP) | Titre IV, 3.1.4.2.3 ; Titre I, 9.5.b ; §7.1.1.1 | essaisNotes() + question aptitude à la conduite | E2E |
| Pièces conditionnant le remboursement : évaluation, préconisation, certificat d'essais, devis, prescription définitive | Titre IV, 3.3.6 | Checklist de la fiche PDF (achat modulaire / LLD) | E2E |
| Classes d'usage A/B/C (FRE, FREP) et A+/B/C (scooters) ; classes B et C soumises au code de la route | Titre IV, §2 | classes.json + classeRoute() | Tests unitaires (invariant 4) |
| Poussettes réservées aux enfants de moins de 16 ans | Titre IV, 3.1.3.8, 3.1.3.9 et 3.3.3.5 | Filtre d'âge du parcours | E2E |
| Scooters (SCO) : achat uniquement, classes d'usage A+/B/C, aptitude à la conduite condition de l'indication (pas d'exception accompagnant), PAP non applicables, éclairage code de la route selon la classe, mention pathologie évolutive | Titre IV, 2.4.2.4, 3.1.3.5, 3.1.5 et 4.2 | classes-sco.json + parcours besoins/adjonctions dédié | Tests dédiés (SCO) + E2E |
| Dispositions transitoires : anciens VPH délivrables jusqu'au 01/12/2026 ; anciens codes de location ≥ 52 sem facturables jusqu'au 30/11/2027 | Arrêté du 06/02/2025, art. 2 et 3 | Encart « période transitoire » de l'accueil | Revue |
« E2E » : scénarios de bout en bout rejoués dans un navigateur contre la version de production avant chaque mise en ligne (parcours complets LCD, LLD, achat, cumuls). Les contrôles de cohérence au build (lib/data.ts) refusent par construction toute donnée incohérente : catégorie sans forfait, code de forfait absent des prestations, niveau MAD orphelin, etc.
5. Limites et statut
Ces preuves établissent la fidélité aux sources officielles à une date donnéeet la traçabilité des règles vers le texte — elles ne confèrent aucune valeur réglementaire à l'outil. PRECONIA est une aide à la décision non opposable: seuls font foi l'arrêté du 6 février 2025, la base LPP de la CNAMTS et la liste CERAH des VPH inscrits, accessibles depuis l'encart « Liens officiels » de l'accueil. Aide à la décision non opposable. Ne remplace ni l'essai réel ni l'évaluation ergothérapique. Codes, paliers de prescripteur, classes et cumuls à confirmer dans la nomenclature et les fiches en vigueur.
Contact : Dr Thomas BREDEL — Médecine Physique et de Réadaptation, Rouen. ← Retour à PRECONIA