T ToutadminDokumentacja

Ta strona nie została jeszcze przetłumaczona na Twój język: jest wyświetlana po francusku.

Architecture

Node 22, Express, EJS et SQLite. 78 modules dans src/, 89 vues. Pas de couche d'abstraction sur la base, pas de framework front, pas d'étape de construction.

Pile technique#

CoucheChoixPourquoi
ExécutionNode 22Le test runner, fetch et les fonctions de chiffrement sont dans la bibliothèque standard
ServeurExpress 4Assez petit pour être compris entièrement
VuesEJS, rendu côté serveurPas de construction, pas d'hydratation, pas de fenêtre entre le HTML et le JavaScript
Basebetter-sqlite3Synchrone, requêtes paramétrées, un fichier ; aucun serveur à administrer
FrontJavaScript nu, sans dépendanceLa CSP interdit tout script en ligne ; un framework n'apporterait rien à des pages rendues côté serveur

Organisation du code#

Un fichier par domaine métier, exportant des fonctions pures autant que possible. Les routes appellent ces fonctions et rendent une vue ; elles ne portent pas de logique métier.

src/
  app.js             assemblage de l'application Express
  server.js          démarrage et balayage périodique
  db.js              schéma, migrations, contraintes
  install.js         état d'installation, secret de session
  security.js        CSRF (dont multipart), débit, verrouillage, nonce CSP
  session-store.js   magasin de sessions SQLite, révocation
  audit.js           journal d'audit : écriture, filtres, export, purge
  i18n.js            langue, traduction, statuts, sens d'écriture
  locales/           16 dictionnaires

  hr.js              demandes, soldes, fiches de paie
  cse.js             mandats, élections, scrutin anonyme
  finance.js         tiers, contrats, factures, budgets, notes de frais
  currency.js        devises et taux figés
  billing.js         abonnements et facturation récurrente
  vat.js             déclarations de TVA
  governance.js      réunions, décisions, actions, risques
  surveys.js         sondages anonymes, baromètre
  planning.js        créneaux, roulements, astreintes
  quality.js         non-conformités, actions, audits
  frontdesk.js       visiteurs et courrier
  signing.js         parapheur : empreinte, sceau, circuit
  workflows.js       demandes internes et circuits d'approbation
  intake.js          pièces reçues, arbitrage règles / modèle
  invoice-scan.js    lecture d'une facture
  ai.js              analyse assistée optionnelle
  mailbox.js         relève IMAP
  backup.js          sauvegarde, intégrité, restauration
  offsite/           externalisation FTP et Google Drive
  export.js          export intégral
  api-tokens.js      jetons d'API
  webhooks.js        webhooks signés, file d'attente, réessais
  …

views/
  partials/          en-tête, barres latérales, icônes, thème, langues
  *.ejs              une vue par écran

public/              feuille de style, thème, chronomètre, agenda, jauges
tests/               suite d'intégration (node --test)
doc/                 ce site, indépendant du logiciel

Choix de conception#

Le schéma porte les règles#

Les statuts sont contraints par des CHECK, les liens par des clés étrangères avec la bonne action en cascade, l'unicité par des index. Une règle inscrite au schéma tient même si un code futur l'oublie — c'est ce qui empêche, par exemple, de facturer deux fois la même échéance d'abonnement quand deux balayages se croisent.

Le refus explicite plutôt que la valeur par défaut#

Une devise sans taux connu n'est pas proposée ; un import fautif n'est pas écrit ; une écriture déséquilibrée est rejetée en disant de combien. Les fonctions renvoient { ok: false, reason } plutôt que de deviner.

Aucun style ni gestionnaire d'événement en ligne#

La CSP interdit style="…" et onclick="…". Les valeurs dynamiques passent par des attributs data-* lus par un script à nonce. C'est contraignant à écrire, mais cela ferme la classe entière des injections de script.

Les fichiers vivent hors du dépôt#

CV, coffre-fort, parapheur, pièces reçues et sauvegardes sont écrits en 0600 dans des dossiers séparés, jamais servis en statique. Seules les photos de profil le sont.

Dépendances#

La règle est de n'ajouter une dépendance que lorsque la réécrire serait déraisonnable ou risqué. Le format tar, le TOTP, le lecteur CSV, le client FTP et le jeton JWT sont écrits ici ; le protocole IMAP et le décodage MIME ne le sont pas.

DépendanceRôle
expressServeur HTTP et routage
better-sqlite3Base de données
ejsGabarits de vues
helmetEn-têtes de sécurité et CSP
bcryptHachage des mots de passe
multerRéception des envois multipart, en mémoire
imapflowProtocole IMAP
mailparserDécodage MIME
@anthropic-ai/sdkAnalyse assistée, chargé seulement si activée

Ce site#

Le dossier doc/ contient cette documentation. Il est indépendant du logiciel : aucun fichier n'est partagé, rien n'est servi par le CMS, et le site se dépose tel quel sur un hébergement statique.

node doc/build.js     # écrit doc/site/, le dossier à héberger

Le script n'a aucune dépendance. Il lit src/locales/ et tests/ pour en extraire le lexique et les décomptes affichés dans ces pages : la documentation ne peut donc pas afficher un chiffre que le dépôt contredit.

Dokumentacja Toutadmin — zbudowana 2026-09-13. Witryna samodzielna, niezależna od oprogramowania.