UDENTIVA Plateforme intelligente de gestion dentaire
QUALITÉ LOGICIELLE & MATURITÉ DES PROCESSUS

Notre processus de développement logiciel & Conformité SPICE

UDENTIVA grave dans l'architecture elle-même la maturité de processus recherchée pour le logiciel de santé. Cette page expose, avec preuves à l'appui, notre cycle de vie de développement, nos niveaux de capacité SPICE / ISO-IEC 15504, nos mécanismes de journalisation continue des erreurs et de contrôle, nos critères de version et de sécurité, ainsi que notre historique de développement.

Fondement : Règlement relatif aux systèmes de gestion de l'information de santé (MevzuatNo 39682), art. 6 et art. 20 — exigence de certification de la qualité logicielle (CMMI/SPICE).

L'architecture de processus d'UDENTIVA est une approche de gestion de la qualité et des processus logiciels, conforme aux principes SPICE / ISO-IEC 15504 et prête pour l'audit.

La définition des processus, leur mise en œuvre et les produits de travail traçables sont structurés ; les mécanismes de mesure quantitative, de prévention des défauts et d'amélioration continue sont exploités en production. La déclaration officielle du niveau de capacité est soumise à une évaluation indépendante (appraisal).

Niveaux de capacité SPICE

SPICE évalue les processus selon un niveau de capacité allant de 0 à 5. UDENTIVA est structurée pour répondre aux attentes des niveaux 1 à 3 au regard de la définition des processus, de leur mise en œuvre et des produits de travail traçables ; pour les niveaux 4-5, des mécanismes de mesure quantitative et d'amélioration continue sont en fonctionnement. La déclaration officielle de niveau est soumise à une évaluation indépendante.

0
Eksik (Incomplete)
Le processus n'est pas appliqué / n'atteint pas l'objectif.
1
Réalisé (Performed)
Le processus existe et produit ses résultats.
2
Géré (Managed)
Le processus est planifié et suivi ; les produits de travail sont gérés.
3
Établi (Established)
Le processus standard défini est appliqué de manière cohérente dans tout le projet.
4
Prévisible (Predictable)
Le processus est contrôlé de manière quantitative (par la mesure).
5
Optimize Eden (Optimizing)
Amélioration continue + prévention des défauts + innovation des processus.

Les mécanismes de contrôle quantitatif et d'amélioration continue relevant des niveaux 4-5 sont mis en œuvre ci-dessous avec leurs preuves (mesure en direct, registre des défauts/CAPA, journaux de déploiement).

Domaines de processus SPICE → Mise en œuvre → Preuve

Chaque domaine de processus correspond à une mise en œuvre concrète dans UDENTIVA et à une preuve auditable. Le processus n'est pas un document, c'est du code en fonctionnement.

Domaine de processusApplication UDENTIVAPreuve
ENG.1 Élicitation des exigencesFeuille de route des phases + définition des exigences par tranche verticale (vertical slice) ; le contrat de projet UDENTIVA.md verrouille les exigences.UDENTIVA.md (RÈGLES D'OR), spécification technique 02_tech_spec/, feuille de route phases/modules
ENG.4 Conception logicielleMonolithe modulaire ; les paquets de contexte (context) ne partagent pas leurs tables ; communication par interface ; service externe = adapter.règle de frontière internal/{identity,patient,billing,export,...} ; ADR-001..008
ENG.5 Construction logicielleSQL explicite (sqlc, sans ORM) ; le context est le premier paramètre de chaque fonction ; encapsulation des erreurs %w ; argent = numeric.override de type sqlc.yaml (numeric→string), db/queries/*.sql, gofmt/golangci-lint
ENG.6 Intégration logicielleChaîne loopback PHP (BFF) ↔ Go ↔ PostgreSQL ↔ Redis ; unique surface publique.web/core/ApiClient, /healthz santé des composants (db+redis)
ENG.7 Tests logicielsTest d'isolation cross-tenant (le plus critique), idempotence, conflits de rendez-vous, précision monétaire, 2FA/OTP, vecteur TOTP RFC6238, QR (vérification OpenCV+ISO).internal/integration/*_test.go, platform/totp/totp_test.go, go test ./...
SUP.1 Assurance qualitéChaque PR doit respecter les RÈGLES D'OR ; lint propre ; si le test d'isolation est rouge en CI, pas de merge.golangci-lint, Definition of Done kontrol listesi
SUP.8 Gestion de la configurationContrôle de version Git (branche core) ; versionnement de schéma séquentiel goose ; les artefacts de build sont sauvegardés.git, goose_db_version tablosu, .tools/deploy yedekleri
SUP.9 Résolution de problèmesJournal d'audit en ajout seul (append-only) + outbox e-mail/SMS (enregistrement de chaque envoi) + discipline de sauvegarde/rollback de déploiement.audit_log, email_outbox/sms_outbox, bin/server.exe.bak-* rollback
SUP.10 Gestion des demandes de changementChaque changement de schéma est une nouvelle migration numérotée ; réversible (goose Down) ; approbation du classifier de déploiement.db/migrations/0001..0027, +goose Up/Down
MAN.3 Gestion de projetLivraison par tranche verticale (chaque tranche fonctionne de bout en bout) ; notes de passation de session.super-devam.md, faz tablosu (DoD per dilim)
MAN.6 MesureContrôle de santé, mesure de capacité, métriques d'envoi e-mail/SMS, volume d'audit, télémétrie d'événements en direct./healthz, tableau de bord Supervision des processus & Qualité (événement/erreur/déploiement/KPI)

Architecture en couches & Sécurité des données

Les responsabilités sont réparties en couches ; l'autorité du domaine est centralisée en un point unique et isolée par loopback. Le navigateur ne voit que la fine BFF et n'accède jamais directement à la couche domaine ni à la couche de données.

CoucheResponsabilité & SécuritéLocalisation
Sunum (BFF)PHP 8.4 — BFF léger : session, rendu, CSRF, routage. Aucune règle métier / DB. Unique surface publique (IIS:443).web/
Uygulama / DomainMonolithe modulaire Go — l'UNIQUE autorité du domaine. RBAC, règles métier, transactions. Écoute uniquement 127.0.0.1.api/internal/
VeriPostgreSQL — chaque table possède tenant_id + RLS FORCE ; SQL explicite (sqlc), paramétré. Argent en numeric.api/db/
Cache / File d'attenteRedis — session, idempotence, verrou distribué, file asynq (SMS/e-Fatura).platform/redisx
Nesne DepolamaCompatible S3 — gros fichiers (radiographies) en presigned/stream ; le blob n'est jamais dans la DB.platform/storage
Service externe (adapter)e-Fatura, SMS (NetGSM), e-mail (SMTP), (à terme e-Nabız/MEDULA/DICOM) — abstraits derrière une interface.internal/notify

Mesure quantitative & KPI — Télémétrie des processus en direct

La mesure n'est pas une déclaration, c'est un système en fonctionnement. Toutes les opérations sont comptées en direct (succès/échec), les erreurs de production sont capturées dans un registre permanent et le cadre de KPI ci-dessous est relié à des actions périodiques. Les sources de données sont des tables réelles : event_counter (compteur d'opérations en direct), error_log (registre permanent des erreurs), deploy_log (registre des déploiements).

Domaine de mesureKPIObjectifSource de donnéesPériodeAction
Sécurité de l'isolation des tenantscross-tenant test fail0CI / izolasyon testiher PRBlocage de merge
Erreur de productionerreur explicite (5xx/panic)0error_log (persistant)continu / en directRCA + CAPA zorunlu
Taux de réussite des opérationssuccess / toplam event≥ 99 %event_counter (en direct)continu / en directCause racine en cas de baisse
Délai de résolutionMTTR (résolution moy.)↓ tendance décroissanteerror_log (resolved)mensuelTrend incelemesi
Fiabilité du déploiementtaux de rollback< %5deploy_log30 joursRollback review
Sécurité de l'identité2FA/OTP kritik olay0audit + event_countermensuelDurcissement
Fiabilité de la messagerieSMS/e-posta failure↓ faible*_outboxjournalierreview fournisseur
Préparation de la restaurationréussite du test de restauration%100DR test (hedef)trimestrielMettre à jour le runbook
Ces KPI sont suivis en temps réel depuis le tableau de bord « Surveillance des processus et qualité » en direct auquel accède l'opérateur de la plateforme : taux de réussite des opérations, nombre d'erreurs ouvertes, MTTR (temps moyen de résolution), nombre de déploiements et taux de rollback.

Cycle de prévention des défauts & d'amélioration continue (RCA/CAPA)

Chaque erreur de production passe par un cycle standard d'analyse des causes racines (RCA) et d'actions correctives/préventives (CAPA) ; la récurrence de la même erreur est évitée par un contrôle de non-régression et un suivi des tendances.

1
Journal des incidents / erreurs

Les erreurs de production (5xx/panic) sont capturées automatiquement → error_log persistant (count++ à chaque répétition de la même signature, tendance des défauts).

2
Classification

Le niveau (error/panic), l'impact et le nombre de répétitions sont déterminés ; la prévalence est mesurée par les compteurs d'événements en échec.

3
Cause racine (RCA)

L'analyse de cause racine est réalisée et enregistrée dans le tableau de bord de Supervision des processus.

4
Action corrective/préventive (CAPA)

Une action corrective + une action préventive (code, test, règle de migration, contrôle de sécurité) sont définies et enregistrées.

5
Contrôle de régression

Un test/une règle empêchant la récurrence de la même erreur est ajouté ; suivi par télémétrie continue.

6
Trend incelemesi

Les tendances des KPI (MTTR, taux d'erreur, rollback) sont évaluées périodiquement ; pour les erreurs récurrentes, une action au niveau du processus est ouverte.

Mécanismes en fonctionnement — Journalisation continue des erreurs, Contrôle & Amélioration

L'essence de SPICE niveau 5 : journalisation continue des erreurs, maintien sous contrôle, prévention des défauts et amélioration continue. UDENTIVA met ces mécanismes en œuvre en production.

Journalisation continue des erreurs

Le journal audit_log immuable (append-only) enregistre de manière persistante chaque opération critique ; email_outbox/sms_outbox enregistrent chaque envoi (status, attempts, error). Aucun événement ne se perd silencieusement.

audit_log, *_outbox (status/error/attempts)
Contrôle des erreurs & rollback

Enveloppe d'erreur cohérente {error:{code,message}} ; l'erreur interne / la stack n'est jamais divulguée. Avant chaque déploiement, sauvegarde du binary + web ; en cas d'incident, rollback en quelques secondes via bin/server.exe.bak-*.

httpx.Error, deploy yedek/rollback runbook
Prévention des défauts (Defect Prevention)

Architecture fail-closed : 0 ligne si le contexte RLS est absent ; l'idempotence empêche le double traitement ; l'argent en numeric rend impossible l'erreur de float ; la whitelist (export dataset) prévient l'injection SQL. Les erreurs sont empêchées dès la conception.

RLS FORCE, Idempotency-Key SETNX, numeric, view whitelist
Vérification indépendante

Les composants critiques sont vérifiés par deux méthodes indépendantes : vecteur de test TOTP RFC6238, décodage OpenCV cv2 + codeword de référence ISO/IEC 18004 pour le QR, test d'isolation cross-tenant.

tests d'intégration + vérification par décodeur externe
Boucle d'amélioration continue

À chaque session : audit de sécurité → constats → durcissement (ex. RBAC phase2/phase3 ajouté, 2FA, Export API). La mémoire institutionnelle est préservée par les notes de processus (super-devam.md).

boucle audit de sécurité → durcissement
Innovation des processus

Une nouvelle exigence réglementaire (Vue VEM) est directement transformée en fonctionnalité produit et en preuve ; les évolutions réglementaires sont surveillées en continu et reportées sur la carte de conformité.

Export API/vues VEM, carte de conformité /mevzuat

Contrôle de l'édition

Un seul socle de code, restriction par indicateur — pas de fork.

  • Le drapeau EDITION=base définit le MVP mono-clinique ; la visibilité du menu (app.php) et l'accès aux routes (index.php) lisent depuis l'allowlist Edition::allows().
  • Le RBAC Go est L'AUTORITÉ ; Edition ne fait que restreindre l'UI/la surface — la véritable autorisation est appliquée dans la couche API (visibilité ≠ sécurité).
  • En version full, tous les modules sont ouverts ; en version base, les modules de croissance Phase 2/Phase 3 sont masqués. Aucun fork — une seule base de code, restriction par drapeau.
  • Les limites de capacité sont mesurées via le plan/pack par tenant (modèle d'abonnement de la plateforme) ; en cas de dépassement, avertissement souple (n'empêche pas).

Mécanismes de versionnage

Version traçable au niveau du schéma, de la source, du déploiement et de l'API.

Versionnement du schéma
Migration séquentielle goose (0001 → 0027) ; chaque changement numéroté + réversible (Up/Down). La version appliquée est suivie dans la table goose_db_version. La migration prod est validée sur une DB propre.
Versionnement des sources
Contrôle de version Git (branche : core) ; dépôt bare central isolé. Chaque travail significatif est committé ; les secrets (connection.md, .tools) dans gitignore — le mot de passe n'est jamais committé.
Versionnement du déploiement
Le binary Go est compilé (-ldflags "-s -w"), swap UNIQUEMENT de bin/server.exe (jamais le wrapper WinSW). Avant chaque déploiement, sauvegarde du binary + web (horodatée). Cache-bust des assets statiques ?v=N.
Versionnement de l'API
Les endpoints publics avec préfixe /v1 ; Export API /export/v1. La rétrocompatibilité est préservée ; un changement cassant implique une nouvelle version.

Utilisation de Git, Rewind & Rollback

Tout le processus de développement est sous contrôle de version ; chaque déploiement est réversible (rewind/rollback).

Contrôle de version
Git (branche : core) ; dépôt bare central isolé. Chaque travail significatif est committé ; l'historique est traçable.
Gestion des secrets
Mots de passe / clés / informations de connexion dans gitignore — JAMAIS committés (connection.md, .tools, *.zip).
Isolation
Seul le répertoire de ce projet est versionné ; on ne touche pas aux sources d'autres projets.
Traçabilité
Les commits sont basés sur des tranches verticales / fonctionnalités ; le journal de déploiement (deploy_log) relie la chaîne commit→release→prod.
Rewind / Rollback : Avant chaque déploiement, une sauvegarde du binaire + du web + de la base de données (horodatée) est effectuée. Le schéma se rétablit via des migrations réversibles (goose Down) ; le binaire en fonctionnement revient en quelques secondes à la version précédente (bin/server.exe.bak-*) ; le web est restauré depuis l'archive précédente. En cas d'incident, la production peut être ramenée à un état antérieur sain.

Critères de sécurité (Règles d'or)

La sécurité n'est pas une fonctionnalité, c'est l'architecture elle-même. Des règles non négociables dont la violation entraîne le rejet de la PR :

Isolation au niveau ligne (RLS FORCE, fail-closed)
Chaque table possède tenant_id ; en l'absence de contexte, la policy renvoie 0 ligne. Le test d'isolation cross-tenant est un gate CI.
Atomik & idempotent yazma
Opération multi-entités en une seule transaction (tout ou rien) ; chaque mutation empêche le double traitement via Idempotency-Key.
Para = numeric
Float INTERDIT ; arrondi en un seul endroit, 2 décimales. L'erreur financière rendue impossible par la conception.
Identité & session
Mot de passe argon2id ; session_key opaque dans Redis (TTL glissant) ; vérification en deux étapes (TOTP) ; le session_key n'est pas exposé au navigateur.
Topoloji izolasyonu
Go écoute uniquement 127.0.0.1 ; unique surface publique PHP/BFF. Les ports backend (DB/Redis) sont fermés vers l'extérieur.
Audit immuable
audit_log en ajout seul (append-only) ; PII/secret non journalisés/masqués ; TCKN/données de santé de nature particulière.
Requête paramétrée
Tout le SQL est paramétré (sqlc/pgx) — injection SQL impossible ; les noms de dataset en whitelist.
Localisation des données
Données de santé uniquement en Turquie ; aucun transfert à l'étranger (KVKK art. 9, Rég. KSV art. 16).

Development History (Historique de développement)

Le système, construit par tranches verticales fonctionnant chacune de bout en bout. Ci-dessous figurent les phases et la chronologie des travaux récents de sécurité/réglementation.

Faz 0 Squelette

pgx+sqlc, goose, test RLS fail-closed, WithTenantTx, middleware de session, login+RBAC, audit, loopback PHP↔Go, base asynq, health.

Faz 1 Cœur clinique (9 tranches verticales)

CRUD Patient + test d'isolation cross-tenant → Rendez-vous (exclusion constraint + verrou Redis) → Odontogramme/Plan de traitement (FDI, append-only) → Encaissement/Compte courant/Caisse (dérivé, idempotent) → adapter e-Fatura (fast-follow) → Stock → Radiographie (S3) → Rappel SMS (asynq backoff).

Platform Console d'administration de la plateforme

Tier opérateur-plateforme (super-admin) (X-Platform-Key, plan d'identité distinct) ; gestion des tenants, modèle d'abonnement/facturation, mesure de capacité, éditeur de version légale, reCAPTCHA, paramètres NetGSM.

Croissance Multilingue & site web de la clinique

i18n (20 dil, key-based, RTL); 20 tema + klinik public site (/s/{slug}) + lead-booking; demo klinik siteleri.

2026-06 Sécurité de l'identité & des communications

Primitive OTP partagée ; réinitialisation de mot de passe + magic-link + activation de compte (SMTP réel) ; cœur SMS NetGSM ; auth publique multi-tenant ; gestion des utilisateurs de la clinique.

2026-06 Authentification à deux facteurs (2FA)

TOTP (RFC6238) + codes de secours ; QR OBLIGATOIRE (indépendant de tout externe, qr.js sans CSP ; vérifié indépendamment avec OpenCV+ISO) ; vérification du téléphone par SMS (consentement KVKK).

2026-06 Conformité réglementaire

Vue VEM (Modèle de données minimum) 12 export views + Export API (défini par SuperUser, verrouillé par tenant, fail-closed) ; carte Réglementation & Conformité ; révision des contrats légaux 100 % conforme à la réglementation.

2026-06 Support & Processus

Centre de support avec suivi de tickets ; documentation de processus SPICE (cette page) ; audit de sécurité continu + durcissement.

En savoir plus sur la maturité des processus et la conformité

Pour des informations détaillées sur l'architecture, la sécurité et la conformité réglementaire, contactez notre équipe.

Réglementation et conformité Contacter