# Analyse du dépôt — Immbot AI Date : 2026-08-04 · Racine analysée : `~/Desktop/UQO/UQO_PREPARATION_COURS/` ## 1. Structure du dépôt ``` UQO_PREPARATION_COURS/ ├── IMM1003-20/ # Cours « Éléments d'évaluation immobilière » (dépôt git autonome) │ ├── plan_de_cours.tex │ ├── description_moodle.md / .html │ ├── slides/seance01.tex … seance14.tex (+ PDF compilés, style uqo-style.sty) │ ├── exercices/ # énoncés + solutions ateliers 1-3 (.tex/.pdf), aide_memoire.tex, │ │ # examen_final.pdf, scripts Python de génération de données │ └── plateforme_ateliers/ # prototype FastAPI (soumission d'ateliers) + submissions.db ├── IMM1033-20/ # Cours « Méthodes du coût en évaluation immobilière » (dépôt git autonome) │ ├── plan_de_cours.tex │ ├── slides/seance01_introduction.tex … seance14_synthese_revision.tex │ ├── exercices/ # ateliers 1-3, aide_memoire.tex, glossaire.tex, examen_mi_session.tex │ └── plateforme_data/ # données d'ateliers JSON ├── IMM-QUEBEC/ # Rapport LaTeX d'analyse du marché immobilier québécois (figures, tables, données FRED/CREA) ├── output/ │ ├── course-analysis/ # analyses pédagogiques détaillées des deux cours (blueprints d'examens) │ ├── IMM1003-20/, IMM1033-20/ # examens intra/final générés + solutionnaires + grilles ├── scripts/ # build LaTeX (latexmk/LuaLaTeX) └── immbot-ai/ # ← la présente plateforme (nouveau) ``` ## 2. Fichiers et contenus détectés | Catégorie | IMM1003-20 | IMM1033-20 | |---|---|---| | Diapositives (source .tex beamer) | 14 séances, ~731 frames | 14 séances, ~940 frames | | Plan de cours | `plan_de_cours.tex` (Automne 2026) | `plan_de_cours.tex` (Automne 2026) | | Ateliers | 3 énoncés + 3 solutions (.tex) | 3 énoncés + 3 solutions (.tex) | | Aide-mémoire | `aide_memoire.tex` | `aide_memoire.tex` | | Glossaire | — | `glossaire.tex` (bilingue) | | Examens existants | `examen_final.pdf` (corrigé embarqué) | `examen_mi_session.tex` (corrigé embarqué) | | Analyses pédagogiques | `output/course-analysis/IMM1003-20-analysis.md` | `…/IMM1033-20-analysis.md` | | Examens générés | `output/IMM1003-20/{intra,final}/` | `output/IMM1033-20/{intra,final}/` | **Format dominant : LaTeX source.** C'est un atout majeur : l'ingestion RAG peut travailler sur la source structurée (frames titrées, `\section`, boîtes sémantiques `defbox`/`importbox`/`alertbox`, équations, tableaux) plutôt que sur de l'extraction PDF avec perte. Chaque frame beamer = une diapositive numérotable → citations précises **[Cours — Séance N — Diapositive M]**. ## 3. Technologies réutilisables - **Style visuel UQO** : couleurs officielles dans `uqo-style.sty` (bleu #003E7E, or #C6A300, gris #58595B, vert #008046, rouge #B42318) — réutilisées comme base de la palette Immbot AI. - **Logo UQO** : `uqo-logo.png` présent dans chaque dossier (utilisable dans l'interface, avec le logo Immbot AI original). - **Prototype `plateforme_ateliers`** (FastAPI + SQLite) : preuve que les étudiants ont des comptes « code permanent + mot de passe ». Non réutilisé comme base de code (pile différente), mais ses **paramètres pédagogiques** (ratios de dépenses, taux, ajustements) documentent les conventions du cours. - **Scripts Python de génération d'ateliers** : documentent les conventions de calcul (profit sur directs+indirects, seuils 15/25 %, intérêts intercalaires ½). - **Analyses `output/course-analysis/`** : cartographie pédagogique déjà faite (objectifs, difficultés, incohérences connues) — réutilisée pour la carte des concepts et classée **instructor-private**. ## 4. Dépendances et environnement - Node v25.9.0 (inclut `node:sqlite` avec FTS5 + `remove_diacritics` — vérifié), pnpm, Python 3.14, SQLite 3.54, PostgreSQL 17 (installé), Docker 29. - Aucun projet Next.js/React existant, aucune intégration OpenRouter existante, aucun `.env` existant. ## 5. Données sensibles et risques | Risque | Détail | Mitigation | |---|---|---| | **`submissions.db`** (plateforme_ateliers) | Contient potentiellement codes permanents et soumissions d'étudiants | **Exclu de l'indexation** ; jamais copié dans immbot-ai | | **Examens réels et solutionnaires** (`output/…/exam`, `examen_final.pdf`, `examen_mi_session.tex`) | Révéleraient les évaluations | Classés `instructor-private` : indexés mais **invisibles aux étudiants** | | **Blueprints d'examens** (`output/course-analysis/`) | Contiennent la stratégie d'évaluation du professeur | `instructor-private` | | Clés API | Clé OpenRouter fournie par le professeur | `.env` local uniquement, jamais commitée, jamais envoyée au navigateur | | Secrets du prototype | `ADMIN_KEY`/`APP_SECRET` en dur dans `app.py` | Non réutilisés ; signalés au professeur | | Solutions d'ateliers | Publiées aux étudiants dans le cours actuel | Indexées comme contenu officiel (catégorie `solution`) | ## 6. Incohérences connues du matériel (héritées des analyses) Les analyses de cours documentent des incohérences internes (seuils 15/25 % vs 25/50 %, base du profit de l'entrepreneur, ratios de dépenses, sessions Automne/Hiver). Immbot AI les gère ainsi : - le RAG cite la source exacte, donc une divergence entre deux documents reste **traçable** ; - les prompts par cours signalent à l'assistant les conventions retenues (documentées dans `prompts/course-imm1003.md` et `prompts/course-imm1033.md`) ; - le professeur peut corriger ces prompts depuis l'administration. ## 7. Recommandations retenues 1. Ingestion **LaTeX-first** (source .tex), PDF en secours seulement. 2. SQLite (`node:sqlite`) en développement avec FTS5 + embeddings locaux ; chemin PostgreSQL/pgvector documenté pour la production (`docs/deployment.md`). 3. Embeddings **locaux** (multilingual-e5-small via transformers.js) : gratuits, privés, hors-ligne — OpenRouter n'offre pas d'API d'embeddings. 4. Espaces de connaissances isolés par cours + `instructor-private` pour tout matériel d'examen. 5. Réutiliser la palette UQO comme fondation de l'identité visuelle d'Immbot AI.