# Modèle de données — Immbot AI Schéma complet : `lib/db/schema.ts` (SQLite, portable PostgreSQL — types simples, FTS5 remplaçable par tsvector, blob d'embedding par pgvector). ## Domaines ### Identité et sécurité - `users` — rôles `student|instructor|admin`, `must_change_password`, `is_initial_admin`, `auth_provider` (préparé pour un SSO futur). - `sessions` — **jeton haché SHA-256** (jamais en clair), expiration 14 j. - `auth_events` — journal (connexions, échecs, resets, actions admin). - `enrollments` — accès par cours (toute route cours vérifie l'inscription). ### Contenu et RAG - `courses` — IMM1003 / IMM1033 (chemins sources, couleur, session). - `documents` — fichier ingéré : `space` (`official-*`, `instructor-private`, `student-*`), type, semaine, somme de contrôle SHA-256, statut, visibilité étudiante. - `chunks` — fragment : référence exacte (`ref_type` slide/section/exercise/glossary/page, `ref_number`, `ref_label` « Séance 4 — Diapositive 18 »), contenu indexable + affichable, types de boîtes sémantiques, **embedding** (blob Float32 384d), propriétaire éventuel. - `chunks_fts` — FTS5 (`unicode61 remove_diacritics 2`), rowid = chunks.id. - `ingestion_runs` — exécutions avec rapport. ### Conversations - `conversations` — cours, mode, mode de connaissances, modèle, dossier/épingle/archive, branches (`parent_conversation_id`, `branched_from_message_id`). - `messages` — contenu, **citations résolues** (JSON), pièces jointes, jetons, coût, feedback, signalement, sauvegarde. - `uploads` — fichiers étudiants (texte extrait, persistant ou lié à une conversation). - `report_flags` — signalements à traiter par le professeur. ### Modèles et usage - `model_overrides` — surcharges admin du registre OpenRouter. - `usage_log` — chaque appel LLM (jetons, coût, latence, erreur) → budgets et statistiques. - `settings` — clé/valeur JSON : budgets, intégrité, presets, croisement inter-cours, partage. - `prompt_versions` — prompts système versionnés (actif = dernière version active). - `announcements` — annonces ciblées par cours. ### Apprentissage - `concepts` + `concept_links` — la carte des connaissances (préalable/relation/application/ approfondissement), 36 concepts par cours. - `mastery` (score composite par utilisateur×concept) + `mastery_events` (chaque observation : type de tâche, difficulté, autonomie, confiance) — voir learning-science-strategy.md. - `flashcards` + `card_states` (SM-2 : EF, intervalle, échéance) + `review_log` (historique complet, permet une migration FSRS sans perte). - `quiz_questions` (banque : type, difficulté 1-5, options JSON, explication) + `quiz_sessions` + `quiz_answers`. - `mock_exams` (composition de questions, durée, type) + `exam_attempts` (réponses, note, analyse par concept/axe JSON). - `study_plans` — plan généré (JSON jours/items cochables) + configuration. - `error_notebook` — erreurs capturées (quiz/examen) avec statut étudiant. - `summaries` — résumés générés avec citations. - `saved_items` — bibliothèque personnelle. - `activity_log` — activité (séries de jours, temps d'étude estimé). - `weekly_goals` — objectifs hebdomadaires.