ELIGIBOU LABLe cours de l’intérieur
0 / 22 étapes

COURS INTERACTIF · VERSION 0.1.0

Comprendre Eligibou,
une dépense à la fois.

On commence par le tout début : ce qu’est un programme, un langage, une fonction, une bibliothèque, un fichier et une donnée. Ensuite seulement, tu suivras une dépense depuis Excel jusqu’à sa revue humaine et son export.

22petits pas
12ateliers
1défi final
DONNÉE BRUTE
DÉCISION HUMAINE
LOT · 2026
DÉPENSE #42Réfection rue des écolesInvestissement · 12 840 €
1234
propositionELIGIBLEÀ REVOIR
R Rust au cœur
React à l’écran
01

Le contrat du cours — aucune connaissance informatique n’est supposée. On part des mots, on écrit quelques lignes, puis on regarde comment Eligibou assemble ses pièces.

Chaque mot technique est traduit avant d’être utilisé.
02

APPRENDRE SANS SE NOYER

Une méthode qui te fait pratiquer, pas réciter

Un novice ne doit pas tout retenir d’un coup. Ici, chaque idée revient plusieurs fois : d’abord avec une image, ensuite avec un exemple, puis avec une action que tu fais toi-même.

01
Devine

Avant la réponse, prends cinq secondes pour imaginer ce qui va se passer.

02
Vois

Lis une explication courte liée à un exemple concret, pas une définition isolée.

03
Essaie

Change une valeur, clique, exécute une ligne de code ou choisis une réponse.

04
Explique

Dis avec tes mots ce que tu viens de voir. C’est le meilleur test de compréhension.

05
Reviens

Les mêmes idées réapparaissent plus loin, dans le vrai code d’Eligibou.

🗺Te repérer

Savoir raconter le trajet d’une dépense, du fichier à la décision humaine.

🧩Nommer juste

Distinguer un langage, un outil, un format de fichier, une bibliothèque et une boîte de code.

Lire sans panique

Repérer une variable, une fonction, une condition et le rôle d’un fichier sans comprendre chaque caractère.

Faire un premier geste

Modifier un mini-programme, lancer un test et savoir où chercher quand quelque chose ne marche pas.

ÉCHAUFFEMENT30 sec

Quand sais-tu vraiment que tu as compris ?

Choisis la réponse la plus utile. Elle guide tout le cours.

Permission de ne pas savoir

Tu n’as pas besoin de comprendre une ligne entière immédiatement. Dans ce cours, comprendre le rôle d’une ligne est déjà une vraie victoire. Les détails viendront après.

03

LE MODÈLE MENTAL QUI DÉBLOQUE TOUT

Une application reçoit, transforme, montre et mémorise

Un ordinateur ne “devine” rien : il suit une recette. Pour comprendre n’importe quelle app, retrouve toujours ce qui entre, ce qui décide, ce qui sort et ce qui reste enregistré.

REGARDE L’EXEMPLE D’ELIGIBOU

Entrée : le fichier Excel

Une personne choisit un fichier de dépenses. C’est une entrée : quelque chose arrive dans l’application depuis l’extérieur.

dépenses.xlsx → lignes, montants, descriptions

Question à se poser : “Qu’est-ce que l’utilisateur donne au programme ?”

1Qu’est-ce qui entre ?

Un clic, un fichier, une phrase, un nombre.

2Quelle règle agit ?

Une fonction, une condition ou une règle écrite.

3Qu’est-ce qui sort ?

Un texte, une décision, un écran ou un fichier.

4Qu’est-ce qui est gardé ?

Une ligne, un lot, une préférence ou une trace.

EXERCICE DE LOGIQUE1 min

Une petite app reçoit 12 €, vérifie si le montant est positif puis affiche “dépense enregistrée”.

Quel est le bon résumé ?

04

LE DICTIONNAIRE AVANT LE CODE

Les mots de base, avec des exemples

Avant de parler d’Eligibou, on apprend à reconnaître les objets d’un programme. Clique sur un mot : tu verras sa traduction et un mini-exemple.

1Nommerles mots
2Écrireune instruction
3Relierles fichiers
4Construireune app
TRADUCTION EN LANGAGE COURANT

Programme

une recette d’instructions

Un programme est une liste d’instructions que l’ordinateur exécute dans un ordre. Comme une recette : prendre les ingrédients, mélanger, puis servir.

EXEMPLE
1. prendre un nom
2. afficher « Bonjour »
Résultat : l’ordinateur suit les étapes dans l’ordre.
La règle pour la suite

À chaque nouveau mot, demande-toi : “Est-ce un langage ? Un fichier ? Une bibliothèque ? Une action ? Une donnée ?” Cette question suffit pour ne pas se perdre.

05

LES MOTS QUI SE RESSEMBLENT SANS ÊTRE LA MÊME CHOSE

Évite les confusions les plus fréquentes

C’est normal de confondre les mots au début : ils arrivent souvent ensemble. Le bon réflexe est de demander : “Est-ce une façon d’écrire ? un outil ? un fichier ? ou une boîte du projet ?”

Aa

Un langage

Une façon d’écrire des instructions.

Rust, TypeScript, JavaScript

Une bibliothèque

Des outils de code déjà construits que l’on réutilise.

React, SQLx

Un outil

Un programme qui aide à construire, lancer ou emballer l’app.

Tauri, pnpm, Cargo

Un format

Une manière de ranger de l’information dans un fichier.

JSON, YAML, XLSX

Une crate

Une boîte de code Rust dans le projet.

fctva-import, fctva-export

Un fichier

Un document enregistré sur le PC, qui peut contenir du code ou des données.

App.tsx, core.yaml

“Rust est un outil.”
Non : Rust est un langage. Cargo est l’outil qui aide Rust à organiser et lancer le projet.

“JSON est du code.”
Pas forcément : JSON est surtout une façon de décrire une fiche de données sous forme de texte.

“Une crate est une app.”
Non : c’est une partie de l’app, rangée avec un métier précis.

TRI RAPIDE45 sec

Rust est…

Réponds avant de regarder le reste du cours.

06

FAIS UNE HYPOTHÈSE AVANT LA RÉPONSE

Prédire est plus utile que relire

Avant d’exécuter un programme, essaie de prévoir son résultat. Même une mauvaise hypothèse est utile : elle rend l’explication qui suit beaucoup plus mémorable.

SITUATION A

Que va afficher le programme ?

const montant = 12;
if (montant > 0) {
print("dépense");
}

Indice : une condition pose une question. Ici, 12 est-il plus grand que 0 ?

SITUATION B

Et si le montant vaut -4 ?

if (montant > 0) {
print("dépense");
} else {
print("à contrôler");
}

Indice : else signifie “dans les autres cas”.

PRÉDICTION1 min

Dans la situation A, quel texte apparaît ?

Ne lance rien : raisonne d’abord avec la question posée par if.

🧠
Pause d’explication

Sans regarder les définitions : raconte à voix haute la différence entre une variable et une condition. Une phrase suffit.

07

ATELIER · TU ÉCRIS, L’ORDINATEUR RÉPOND

Ton premier mini-programme

Pour voir immédiatement le lien entre une instruction et un résultat, écris quelques lignes de JavaScript dans le cadre ci-dessous. JavaScript est utilisé ici uniquement parce que ton navigateur sait l’exécuter directement ; Eligibou, lui, utilise aussi Rust.

TON CODE · JAVASCRIPTlocal, rien n’est envoyé
RÉSULTATprêt
Clique sur « Exécuter » pour voir le résultat.

Ce qui s’est passé : le navigateur a lu les lignes une par une. const a rangé une valeur dans une boîte, function a défini une action et if a posé une question.

A

Change le prénom
Remplace “Mina” par ton prénom et exécute.

B

Change le nombre
Mets 1 : la phrase de la condition disparaît.

C

Ajoute une ligne
Écris print("Je programme !").

constvariableune boîte nommée
functionfonctionune action que l’on peut rappeler
ifconditionune question oui / non
printafficherécrire un résultat
Pourquoi commencer par JavaScript ?

Ce petit atelier ne prétend pas que JavaScript est le langage d’Eligibou. Il montre simplement les idées communes à tous les langages : données, fonctions, conditions et résultats. Ensuite, on verra comment Rust utilise les mêmes idées avec une autre écriture.

08

UNE APP, C’EST UNE IDÉE QUI DEVIENT UNE ACTION

Construis une mini-app avant de regarder la vraie

Avant les grands mots, fabrique une version miniature d’Eligibou. Elle ne connaît que trois règles simples, mais elle possède déjà un écran, des données, une décision et un résultat.

TA VERSION MINIATURE

L’étiqueteuse de dépenses

Choisis une description, un montant et une règle. Prédis le résultat, puis clique sur le bouton.

CE QUE VOIT LA PERSONNE

Dépense à regarder

PRÊT

Renseigne la fiche et lance l’exemple. La décision affichée ne vaut pas une décision FCTVA réelle : elle sert uniquement à apprendre.

entréerèglerésultat
1Écran

Des champs où une personne écrit ou choisit.

2Données

La description, le montant et la règle choisie.

3Fonction

Une petite recette qui compare ces données.

4Résultat

Un texte clair affiché à la personne.

LA RECETTE DERRIÈRE LE BOUTON

Lis le code comme une histoire : on reçoit une description et un montant, on pose une question, puis on renvoie une étiquette.

function etiqueter(description, montant) {
if (montant > 0 && description.includes("travaux")) {
return "bon signal : à vérifier";
}
return "il faut plus d’informations";
}
RETOUR SUR TA MINI-APP1 min

Dans cette mini-app, où se trouve la décision ?

Repère la partie qui pose une question et choisit une réponse.

09

LES OUTILS, EXPLIQUÉS

La stack : les outils de l’application

“Stack” veut simplement dire “ensemble d’outils utilisés ensemble”. Maintenant que les mots de base sont posés, on peut regarder l’équipe d’Eligibou.

INSPECTEUR DE COUCHE

L’écran que voit l’utilisateur

React construit les composants visuels : boutons, tableaux, tiroirs de revue et indicateurs de progression. TypeScript ajoute des garde-fous sur les données qui circulent dans l’interface.

apps/desktop/src/App.tsx

Quand tu cliques, React prépare un appel vers le cœur Rust via client.ts.

TSTypeScript / TSX

TypeScript est le langage de la partie écran. TSX est une écriture qui permet de mettre des balises d’écran dans ce code.

apps/desktop/src/
RRust

Rust est un langage de programmation. Ici, il écrit le travail de fond : lire, vérifier, mémoriser, analyser et exporter.

crates/ · src-tauri/
YYAML + Markdown

Ce sont deux façons d’écrire du texte lisible. YAML porte les réglages ; Markdown porte les explications métier.

rules/ · local/
SQLSQL + JSON

SQL pose des questions aux tableaux SQLite. JSON décrit une fiche dans un texte que plusieurs programmes peuvent relire.

fctva-storage/ · types.ts
À retenir

Eligibou n’est pas “une app IA”. C’est une application locale : React fabrique l’écran, Rust fait le travail de fond, SQLite garde les informations et l’IA n’est qu’un moteur que l’on peut remplacer.

EXERCICE 011 min

Qui doit lire un fichier Excel ?

Choisis la boîte de code qui transforme les cellules du classeur en fiches compréhensibles par le reste de l’application.

10

UN CHOIX D’ORGANISATION, PAS UNE COLLECTION DE MOTS

Pourquoi Eligibou ne met pas tout dans un seul fichier

Séparer les responsabilités ne veut pas dire “faire compliqué”. Cela veut dire donner un travail clair à chaque partie, comme dans une cuisine : une personne prépare, une autre cuit, une autre vérifie.

L’écran

Il montre des boutons, des listes et des résultats. Son travail est de rendre les choses utilisables.

React + TypeScript
R

Le travail de fond

Il lit les fichiers, vérifie les données, applique les règles et fabrique les exports.

Rust + crates

La mémoire

Elle garde les lots et les décisions pour les retrouver plus tard, même après fermeture.

SQLite

Les consignes

Elles vivent dans des textes lisibles afin de pouvoir être relues et changées sans chercher partout.

YAML + Markdown
Si tout était mélangé…une modification risquerait de casser une autre partie et personne ne saurait où chercher.
Quand les rôles sont séparés…on peut tester, expliquer et modifier une pièce sans perdre le reste.
CHOIX D’EMPLACEMENT1 min

Tu veux modifier une consigne FCTVA lisible par une personne métier.

Où cherches-tu d’abord ?

11

LIRE DU CODE SANS TOUT DÉCHIFFRER

Lis une ligne comme une phrase

Ne lis pas le code caractère par caractère. Cherche d’abord les mots qui donnent le rôle : une valeur, une action, une question, un résultat. Clique sur chaque ligne de l’exemple.

TRADUCTION DE LA LIGNE

Une valeur avec un nom

const montant = 120 crée une boîte appelée montant et y range le nombre 120. Le programme peut réutiliser ce nombre plus bas.

À dire simplement : “Je garde 120 sous le nom montant.”
Pourquoi c’est utile ?Un nom clair évite de perdre le sens du nombre.
EXEMPLE GUIDÉ

La même idée dans deux écritures

JavaScript et Rust ne s’écrivent pas pareil. Pourtant les deux lignes rangent la même information sous le nom montant.

JavaScript : const montant = 120;
Rust : let montant = 120;
LECTURE ACTIVE45 sec

Quelle ligne renvoie un résultat vers l’endroit qui a appelé la fonction ?

12

LE PLAN DE L’APPLICATION

Une ligne, plusieurs relais

Une architecture est le plan d’un programme : quelles sont ses grandes pièces, et comment une information passe de l’une à l’autre ? Clique sur une étape pour voir la traduction simple.

ESCALE 01 · SOURCE

Le fichier ne bouge pas

L’utilisateur choisit un fichier. Eligibou le lit comme une suite de petits nombres, sans toucher à l’original, et calcule une signature pour reconnaître son contenu.

EntréeUn fichier local
Sortiecontenu + nom
apps/desktop/src-tauri/src/lib.rs · preview_file
Une commande = une demande

L’écran dit au programme : “fais cette action”. Par exemple invoke('import_file') signifie “importe ce fichier”.

Un événement = une nouvelle

Le programme dit à l’écran : “voici où j’en suis”. React écoute cette nouvelle pour afficher la progression.

01L’information avance

Le fichier devient une fiche, puis une proposition, puis une relecture.

02La personne garde la main

L’écran montre une suggestion ; l’agent confirme ou corrige.

03Le programme laisse des traces

Les lots, alertes, propositions et décisions restent consultables.

13

LIRE LES FICHIERS

Le plan des pièces

Le “dépôt” est simplement le dossier complet du projet. On ne mémorise pas chaque fichier : on apprend à reconnaître les boîtes et le métier de chacune.

FCTVApp/
FCTVApp/
├─ apps/desktop/
│  ├─ src/App.tsx 
│  ├─ src/client.ts 
│  ├─ src/types.ts 
│  └─ src-tauri/src/lib.rs 
├─ crates/
│  ├─ fctva-domain/ 
│  ├─ fctva-import/ 
│  ├─ fctva-rules/ 
│  ├─ fctva-ai/ 
│  ├─ fctva-analysis/ 
│  ├─ fctva-storage/ 
│  ├─ fctva-export/ 
│  └─ fctva-observability/ 
├─ rules/active/core.yaml
├─ local/ 
├─ Cargo.toml 
├─ package.json 
└─ README.md 
FICHIER SÉLECTIONNÉ

apps/desktop/src/App.tsx

Le composant racine de l’interface. Il garde l’écran courant, le lot actif, les lignes, le filtre, la configuration d’analyse et les écouteurs d’événements.

Rôlechef d’orchestre de l’interface
const [screen, setScreen] = useState<Screen>('dashboard')
1
Entrer par l’écran

Regarde le bouton et trouve le call() qui part de App.tsx.

2
Suivre le pont

Dans client.ts, repère invoke et le nom exact de la commande.

3
Atterrir dans Rust

Dans src-tauri/src/lib.rs, retrouve #[tauri::command] puis le service appelé.

LE MOTIF À RECONNAÎTRE
// React / TypeScript
await call<ImportStats>('import_file', { fileName, bytes })

// Rust / Tauri
#[tauri::command]
async fn import_file(...) -> Result<ImportStats, AppError> {
    let parsed = parse_workbook(...)?;
    state.store.insert_batch(...).await?;
    Ok(parsed.stats)
}
EXERCICE 022 min

Tu veux changer le texte d’un bouton

Quel fichier ou ensemble de fichiers regardes-tu en premier ?

14

LES INFORMATIONS PRENNENT FORME

De la cellule à la dépense

Une donnée, c’est une information. Le programme la transforme progressivement en une fiche claire, tout en conservant la valeur d’origine pour pouvoir vérifier.

01

Ligne brute

La ligne telle qu’elle arrive du fichier : des noms de colonnes et des valeurs parfois étranges.

RowData · nom interne
02

Fiche de dépense

Une fiche rangée avec montant, mandat, fournisseur, dates et alertes.

ExpenseRecord · nom Rust
03

Proposition

Une réponse expliquée, avec les règles utilisées, l’incertitude et les manques.

AnalysisResult · résultat
04

Trace de relecture

La décision finale de la personne qui a relu la ligne.

ReviewRecord · décision
UNE FICHE DÉCRITE EN RUSTexemple de code
pub struct ExpenseRecord {
  id: Uuid,
  raw: RowData,       // original conservé
  amount: Option<Decimal>,
  mandate_number: Option<String>,
  warnings: Vec<String>,
  excluded_from_ai: bool,
}

Option veut dire “peut-être absent”. Uuid est un identifiant unique, Decimal un nombre précis et Vec une liste. Le logiciel décrit donc clairement ce qu’il peut recevoir.

LA MÉMOIRE DE L’APPSQLite
batchesles lots importés : nom, signature, compteurs, statut
expensesles dépenses, avec la ligne originale en JSON
analysesles propositions et leur date
reviewsles décisions humaines et commentaires

SQLite est une petite base de données dans un fichier : fctva-assist.sqlite3. Elle garde les tableaux même après fermeture de l’application.

DANS fctva-import

Le petit travail invisible qui évite les gros problèmes

Avant l’analyse, le code lit le fichier, détecte la feuille, reconnaît des variantes de colonnes, convertit les montants et signale les incohérences.

Types de fichiers
.xls, .xlsx, .xlsm, .csv

Signature
empreinte SHA-256 du fichier source

Doublons
clé mandat / compte / montant / description

Dates
date dans la cellule ou le libellé

EXERCICE 032 min

Une colonne s’appelle “Total TTC”

Quel champ métier le mapping automatique doit-il remplir ?

15

PLUSIEURS FAÇONS DE RÉFLÉCHIR

Règles d’abord, moteur ensuite, humain toujours

Une analyse “hybride” mélange plusieurs outils : des consignes écrites, un moteur qui propose une réponse et une personne qui vérifie. Le mot provider désigne simplement l’adaptateur vers ce moteur.

01Lire les consignesRuleSet.evaluate · signaux + anomalies
02Préparer la ficheAnalysisInput · dépense + contexte
03Choisir le moteurprovider · Mock / Codex / HTTP
04Vérifier la réponsevalidate_result · garde-fous
05Faire relireReviewRecord · décision humaine
MOTEUR ACTIF · EXPLICATION

Mock : le faux moteur qui permet d’apprendre sans réseau

Le Mock applique une logique de démonstration et renvoie une structure d’analyse. Il permet de tester l’interface et le stockage sans envoyer une dépense nulle part.

même promesse pour tousanalyze(input) → AnalysisResult
Les données ne donnent pas d’ordres

Le texte d’une cellule est une donnée à lire, pas une instruction. Une phrase dans une dépense ne peut jamais commander le programme.

!Une proposition n’est pas une décision

La vérification finale peut corriger une proposition trop incertaine : validate_result est le nom interne de ce contrôle.

Une fiche mal formée reste sous contrôle

Si la réponse structurée en JSON est incomplète, le programme peut demander une seule correction. Il ne recommence pas indéfiniment.

SIMULATEUR PÉDAGOGIQUE

Fais parler le moteur d’exemple

Ce mini-jeu simplifie volontairement la fonction interne qui imite une analyse. Il ne remplace pas la méthodologie FCTVA : il montre comment des signaux modifient une proposition.

PROPOSITIONELIGIBLE

Le mot “investissement” et une description de travaux donnent un signal favorable.

incertitude
22%
UNE PROMESSE COMMUNE POUR TOUS LES MOTEURS

Un contrat est une promesse : chaque moteur doit savoir recevoir une fiche et renvoyer une analyse, même s’il travaille différemment à l’intérieur.

#[async_trait]
pub trait AiAnalysisProvider {
    fn kind(&self) -> AnalysisProviderKind;
    async fn analyze(&self, input: AnalysisInput)
        -> Result<AnalysisResult, ProviderError>;
}
16

DE L’ÉCRAN AU PROGRAMME

Tauri fait le pont

“Desktop” veut dire une application qui s’ouvre comme une vraie fenêtre sur le PC. React dessine cette fenêtre, Rust travaille derrière, et Tauri fait passer les messages entre les deux.

Eligibou · Revue FCTVAlocal ⌂
LOT ACTIF / dépenses.xlsxRevue des dépenses
12à revoir48éligibles7anomalies
lignedescriptionproposition
#42Réfection rue des écolesELIGIBLE
#43Location matérielNON_ELIGIBLE
#44Annulation mandat 812CONTROLE
01Partie écranApp.tsx + client.ts
02Le pont Taurifenêtre + messages
03Partie travailRust : import + analyse + mémoire
A
Le clic

Un bouton dans App.tsx demande : “analyse ce lot”. Le nom interne est analyze_batch.

B
Le message

client.ts est le traducteur. Tauri transmet la demande à la fonction Rust autorisée.

C
Le retour

Le résultat revient sous forme de données structurées ; des messages de progression préviennent l’écran.

LE PONT, EN DEUX LANGAGES

Les noms du code sont techniques, mais l’idée tient en une phrase : l’écran demande une action, puis reçoit le résultat.

// client.ts
export async function call<T>(command: string, args?: Record<string, unknown>) {
  return isTauri() ? invoke<T>(command, args) : demo<T>(command, args)
}

// src-tauri/src/lib.rs
#[tauri::command]
async fn dashboard(state: State<'_, AppState>, batch_id: Uuid)
  -> Result<DashboardSummary, AppError> {
    Ok(state.store.dashboard(batch_id).await?)
}
EXERCICE 042 min

Le bouton “Analyser le lot” ne répond plus

Quel chemin suis-tu pour chercher la panne ?

Et dans un navigateur ?

client.ts détecte l’absence de Tauri et utilise un petit mode de démonstration. C’est pourquoi l’interface peut être prévisualisée sans lancer le programme Windows complet.

17

FAIRE CONFIANCE À UNE MODIFICATION

Tester, c’est poser une question précise au programme

Un test ne dit pas “tout est parfait”. Il vérifie une petite promesse. Par exemple : “si je donne ce fichier, les montants sont-ils bien lus ?” C’est ce qui permet de modifier le code sans jouer à la loterie.

1

Préparer

Choisir une entrée connue : une ligne, un fichier ou une situation miniature.

montant = -4
2

Agir

Demander au programme de faire exactement une chose.

analyser(montant)
3

Comparer

Vérifier que le résultat est celui attendu.

résultat = “à contrôler”
UNE PROMESSE CONCRÈTE DANS ELIGIBOU

“Le fichier original ne doit pas être modifié.”

Le test garde une copie du fichier, lance la lecture, puis vérifie que la copie et l’original sont identiques. S’ils diffèrent, le test alerte avant qu’une personne n’utilise la version Windows.

entrée connueactionrésultat attendu
QUESTION DE TEST1 min

Quel est le meilleur test pour une règle disant “un montant négatif doit demander un contrôle” ?

18

UN BUG EST UNE PISTE, PAS UN ÉCHEC

Déboguer : réduire le problème avant de le corriger

Quand un bouton ne répond plus, ne change pas dix choses au hasard. Suis le trajet de l’information et vérifie une étape après l’autre. C’est plus lent pendant une minute, mais beaucoup plus rapide au total.

01Reproduire

Refaire exactement l’action qui pose problème.

02Lire le signe

Regarder le message, le résultat ou l’étape où cela s’arrête.

03Réduire

Tester un petit exemple : une seule ligne au lieu d’un gros fichier.

04Changer une chose

Faire une correction, puis relancer le même test.

CAS PRATIQUE

“Analyser le lot” ne fait rien

Le trajet attendu est : bouton dans App.tsx → traducteur client.ts → commande Rust → service d’analyse.

Le premier objectif n’est pas de réparer : c’est de trouver où le message s’arrête.

A

Vérifie le clic
Le bouton réagit-il visuellement ?

B

Vérifie la demande
Le traducteur reçoit-il “analyser le lot” ?

C

Vérifie le travail
La partie Rust démarre-t-elle l’analyse ?

PREMIER RÉFLEXE45 sec

Un bouton ne répond plus. Quelle action fais-tu en premier ?

19

LA BOUCLE SE FERME

Relire, exporter, livrer

Une application métier n’est terminée que quand on peut relire, corriger, retrouver et livrer le résultat à quelqu’un d’autre.

APRÈS L’ANALYSE

L’humain confirme

Le tiroir de ligne affiche les données source, les anomalies, la proposition, le motif, l’incertitude et les pièces manquantes.

review_case → ReviewRecordnom interne : enregistrer la relecture
À LA FIN

Un fichier Excel traçable

fctva-export crée plusieurs feuilles au lieu d’écraser le fichier d’entrée. XLSX est simplement le format moderne d’Excel.

RésultatsSynthèseAnomaliesMétadonnées
CARNET DE BORD

Voir ce qui s’est passé

Le programme écrit des messages de suivi : import commencé, étape terminée, erreur rencontrée. Les événements JSON gardent une forme que les outils peuvent relire, tandis que le Journal IA conserve la demande, la réponse, la durée et l’éventuelle correction.

INFO import_file · 148 lignesINFO étape 2 terminée · 16/48WARN ligne 44 · fiche mal formée · correction
LIVRAISON WINDOWS

Assembler la fenêtre

Tauri rassemble l’écran construit et le programme Rust dans un installeur Windows. Les fichiers de configuration disent comment fabriquer cette fenêtre et quelles ressources joindre.

tauri.conf.jsontauri.windows.conf.jsonscripts/prepare-codex-windows.mjstooling/codex-cli-manifest.json
ATELIER WINDOWS

Les commandes à essayer soi-même

Ouvre PowerShell dans le dépôt FCTVApp. Fais-les dans l’ordre et lis le résultat de chaque commande.

01
Installer les dépendances
pnpm install
02
Construire l’interface
pnpm build
03
Lancer les tests du code Rust
cargo test --workspace
04
Ouvrir l’app en développement
pnpm dev
05
Construire l’installeur Windows
pnpm --dir apps/desktop tauri build
PS

À quoi sert chaque commande ? pnpm installe et lance la partie écran, cargo construit et teste Rust, et Tauri assemble les deux dans une application Windows.

20

AVANT D’ÉCRIRE UNE COMMANDE

Windows sans peur : une commande est une phrase courte

PowerShell est une fenêtre où l’on donne une instruction écrite au PC. Ce n’est pas une formule magique : chaque commande dit soit “va ici”, “montre-moi ceci”, “installe”, “teste” ou “lance”.

TRADUCTION DE COMMANDE

cd : changer de dossier

Cette commande dit à PowerShell : “à partir de maintenant, travaille dans ce dossier”. C’est comme ouvrir un tiroir avant de chercher un document dedans.

cd .\FCTVApp

Question à se poser : “Dans quel dossier suis-je avant de lancer la suite ?”

Le réflexe débutant : après chaque commande, lis les deux ou trois dernières lignes. Si tu ne comprends pas, ne passe pas à l’étape suivante ; copie le message et cherche ce qu’il veut dire.

REPÈRE WINDOWS30 sec

Tu veux voir les fichiers présents dans le dossier où tu te trouves.

21

TRANSFÈRE CE QUE TU AS APPRIS

Imagine ton propre petit programme

Le meilleur moyen de vérifier que les notions tiennent est de les utiliser pour une autre idée. Tu ne vas pas créer un énorme produit : seulement une app qui reçoit quelque chose, applique une règle et affiche un résultat.

CANEVAS DE MINI-PROJET

Décris une idée en une minute

TON PLAN D’APPLICATION

Mon étiqueteuse de tâches

  1. Entrée : une tâche et sa priorité
  2. Règle : la priorité est-elle urgente ?
  3. Sortie : un message “à faire aujourd’hui” ou “à planifier”
  4. Première version : une page, un bouton, un résultat.

Ce plan suffit pour commencer. Tu ajouteras une mémoire, un second écran ou des règles seulement après avoir fait marcher la première version.

1Une seule action

Évite “gérer toute ma vie”. Commence par “étiqueter une tâche”.

2Un seul écran

Un champ, un bouton et un résultat sont déjà une application.

3Une seule règle

Écris le “si… alors…” en français avant de le coder.

4Un test

Invente un exemple qui doit produire un résultat clair.

GARDER UNE TAILLE RÉALISTE45 sec

Quel premier projet est le plus adapté à un débutant ?

🗣
Le test ultime

Explique ton mini-projet à quelqu’un en utilisant les quatre mots : entrée, règle, résultat, mémoire. S’il comprend le principe, tu as déjà une base solide.

22 · DÉFI FINAL

Tu es l’architecte de la ligne #42

Une dernière mission : explique le trajet complet à quelqu’un qui ne connaît pas le code. Les réponses sont cachées dans les cours, pas dans un piège.

MISSION

Quel composant intervient ?

Réponds aux quatre questions, puis demande ton score.

01
Le fichier Excel doit être lu sans être modifié.
02
Le montant est négatif et le libellé contient “annulation mandat 812”.
03
Le moteur propose ELIGIBLE avec une forte incertitude.
04
La personne corrige la proposition puis exporte.
LA PHRASE À SAVOIR DIRE

“Eligibou est une application qui s’ouvre dans une fenêtre. React dessine l’écran, Rust fait le travail de fond, SQLite garde les informations, puis une personne vérifie avant l’export Excel.”

MINI-GLOSSAIRE

Clique sur un mot pour sa traduction en langage simple.

FIN DU PARCOURS

Ton atelier est prêt

Valide les étapes et le défi final pour afficher ton badge de compréhension.

0 / 22