Skip to content

Humanix-Cybersecurity/qualiForma

Repository files navigation

QualiForma — plateforme souveraine de gestion d'organisme de formation

Plateforme SaaS multi-tenant, open source (AGPLv3) et auto-hébergeable pour gérer un organisme de formation de bout en bout : acquisition, vente, réalisation, émargement à valeur probante, conformité Qualiopi, pilotage et facturation. Pensée souveraine (hébergement FR/UE, aucune dépendance SaaS US) et conforme eIDAS, RGAA 4.1 / WCAG 2.1 AA, RGPD.

⚖️ Cadre légal : ce dépôt encode des bonnes pratiques de conformité, pas une garantie juridique. Le niveau de signature (AES + horodatage qualifié), la facturation électronique et la conformité finale doivent être validés avec votre organisme certificateur, votre PSCo d'horodatage et un·e juriste avant exploitation.


✨ Le différenciateur : un émargement réellement probant et souverain

Là où la plupart des outils s'arrêtent à une signature « simple », QualiForma produit une preuve opposable :

  • Signature avancée (AES) au sens eIDAS : émargement authentifié multi-modal (code, QR dynamique anti-fraude, signature manuscrite, lien personnel à usage unique), co-signature formateur obligatoire.
  • Scellement consolidé d'une demi-journée + horodatage QUALIFIÉ eIDAS (RFC 3161, PSCo français de la liste de confiance ANSSI/UE — Datasure/Universign), TSA pluggable (qualified | internal | mock, refus de démarrer en prod hors mode qualifié).
  • Pack de preuve vérifiable hors-ligne (chaîne d'audit SHA-256, jeton d'horodatage) via l'outil @humanix/proof-verifier.
  • Immuabilité garantie au niveau SGBD (triggers) + stockage WORM (object-lock).

Voir docs/conformite/valeur-probante.md et docs/conformite/niveau-signature-juridique.md.


🧩 Fonctionnalités

Catalogue & sessions — formations (CRUD + programme/RI/convocation/convention PDF), sessions, créneaux demi-journée (validation horaires), inscriptions, désinscription, gestion des comptes apprenant/formateur.

Émargement & preuve — multi-modal, hors-ligne (PWA + file IndexedDB, sync idempotente), géolocalisation consentie, scellement + pack de preuve, feuille d'émargement consolidée.

Conformité Qualiopitableau de bord des 32 indicateurs RNQ (auto-évaluation + statut

  • preuves), alertes de complétude avant clôture de session, mapping indicateurs.

Gestion commercialedevis → conversion en facture → encaissements, BPF (Bilan Pédagogique et Financier) ventilé par financeur, export comptable CSV, conventions.

Facturation électroniqueFactur-X (profil MINIMUM, XML embarqué dans le PDF) + endpoint XML, prêt pour dépôt PDP/Chorus Pro (socle ; cf. roadmap).

Acquisitioncatalogue public sans authentification (/catalogue/:slug) + préinscription en ligne, conversion en compte + inscription.

Pilotage — tableau de bord KPI temps réel (sessions, heures, CA, satisfaction, réclamations, sessions à clôturer). Planning / agenda avec détection de conflits formateur/salle.

E-learning (LMS) — modules de cours (leçons texte / vidéo intégrée / PDF), suivi de progression apprenant.

Qualité & RGPD — questionnaires (positionnement, satisfaction, acquis) + restitution/CSV, réclamations + actions correctives, RGPD self-service (export, anonymisation), MFA TOTP.

IntégrationsAPI publique v1 (lecture, clés d'API hmx_<slug>_<secret> résolues sous RLS), webhooks signés HMAC-SHA256 (scellement.created).

Exploitation — observabilité Prometheus (/metrics), quotas par tenant, jobs planifiés (relances, purge RGPD), notifications e-mail/SMS via opérateurs FR (Brevo / Octopush), back-office super-admin (tenants, plans, quotas).


🏗️ Architecture & stack

Couche Choix ADR
Monorepo pnpm workspaces + Turborepo, TypeScript strict 0001
Backend NestJS 10 + PostgreSQL 16 + Prisma 5 0001
Multi-tenant PostgreSQL Row-Level Security (tenant_id, rôle non-bypass) 0002
Signature/émargement AES + horodatage qualifié RFC 3161, port QTSP/SEA 0003
Accessibilité RGAA 4.1 / WCAG 2.1 AA, gate CI (axe, Lighthouse, pa11y) 0004
Offline émargement PWA + file d'attente, horodatage serveur faisant foi 0005
Uploads MinIO/Garage (S3) + ClamAV + WORM/object-lock 0006
Licence & SaaS AGPLv3, cœur séparé des modules d'exploitation 0007
Souveraineté services de confiance FR/UE uniquement, pas de SaaS US 0008

Front : React 18 + Vite + PWA (Workbox) + Capacitor (iOS/Android), React-Aria + Tailwind, react-i18next (FR/EN), police Inter auto-hébergée (souveraine).

📁 Structure du dépôt

apps/
  api/      NestJS — API, RBAC, RLS, jobs, ~33 modules métier
  web/      React + Vite PWA + Capacitor (apprenant / formateur / admin OF / super-admin)
  admin/    Back-office super-admin (scaffold)
packages/
  domain/            Types & entités partagés (source de vérité métier)
  ui/                Design system accessible (React Aria + Tailwind)
  i18n/              Catalogues react-i18next FR/EN
  pdf-templates/     Gabarits PDF versionnés (émargement, certificat, convention, facture, Factur-X…)
  signature-engine/  Cœur probant : faisceau de preuves, audit chaîné, RFC 3161, vérification
  proof-verifier/    CLI de vérification de pack de preuve hors-ligne
  config/            ESLint / TS / tooling partagés
docs/
  adr/          Architecture Decision Records (0001–0008)
  conformite/   Qualiopi, valeur probante, niveau de signature eIDAS, RGPD (registre + DPA), sécurité
  legal/        Modèles mentions légales & CGU
  deploiement/  Self-host, production (PgBouncer/migrations), multiplateforme, facturation électronique
infra/docker/   Dockerfiles & compose

🚀 Lancer l'application (Docker)

Stack complète (API + front + PostgreSQL + MinIO + ClamAV), avec migrations / RLS / seed automatiques :

docker compose up --build
# → Front : http://localhost:8080   ·   API : http://localhost:3000

Comptes de démo (mot de passe Demo!Passw0rd) :

Rôle E-mail Tenant (en-tête x-tenant-slug)
Admin OF admin@demo.test demo
Formateur formateur@demo.test demo
Apprenant sofia.nguyen@demo.test demo
Super-admin SaaS superadmin@humanix.test humanix

Catalogue public de démo : http://localhost:8080/catalogue/demo.

🧑‍💻 Développement local (sans conteneur applicatif)

pnpm install
docker compose -f infra/docker/docker-compose.dev.yml up -d   # PostgreSQL, MinIO, ClamAV
pnpm --filter @humanix/api db:setup                           # migrations + RLS + seed
pnpm --filter @humanix/api dev      # API  (http://localhost:3000)
pnpm --filter @humanix/web dev      # front (http://localhost:5173)

Qualité : pnpm typecheck · pnpm lint · pnpm test · pnpm lint:spdx. CI : lint/typecheck/ tests, isolation RLS inter-tenant (gate bloquant), accessibilité (gate bloquant), sécurité (audit deps, gitleaks, SBOM CycloneDX, Semgrep, Trivy, CodeQL).

🇫🇷 Souveraineté & conformité

  • Hébergement FR (Scaleway ; cible SecNumCloud documentée), stockage WORM (MinIO/Garage).
  • Horodatage qualifié par PSCo français (liste de confiance UE) — jamais de service US.
  • E-mail/SMS via opérateurs FR (Brevo / OVH / Octopush). Pas de Twilio/SendGrid.
  • Toutes les dépendances sont OSI, compatibles AGPLv3 (tables de licences dans les docs de déploiement). Aucun composant propriétaire, SSPL/BSL ou SaaS US obligatoire.
  • Niveau juridique visé : signature AVANCÉE (AES) + horodatage QUALIFIÉ (pas la QES) — cité explicitement dans le pack de preuve.

🗺️ Roadmap — état

Tronc fonctionnel au niveau des leaders du marché (Digiforma, Dendreo, Kaliio, Teachizy…), plus le différenciateur souverain. Livré : pilotage, gestion commerciale + BPF, devis→facture, catalogue public, Qualiopi 32 indicateurs, planning, LMS (1ʳᵉ tranche), API + webhooks, socle Factur-X.

Points d'extension documentés (dépendent d'accès/habilitations externes) : dépôt PDP/Chorus Pro (Factur-X), connecteurs financeurs EDOF/Kairos/OPCO, paiement en ligne PSP UE. Voir docs/deploiement/facturation-electronique-financeurs.md.

📄 Licence

Distribué sous GNU AGPL-3.0-or-later (voir LICENSE et NOTICE). L'AGPL impose la mise à disposition du code source modifié aux utilisateur·ice·s du service réseau : tout déploiement SaaS de ce logiciel (y compris modifié) doit offrir l'accès au code source correspondant.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors