diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64ae218 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +backend/app/__pycache__/ +*.pyc +local.db +*-dev.*.log + +frontend/node_modules/ +frontend/dist/ diff --git a/Programme/PROGRESSION_CONTENUS_PEDAGOGIQUES.md b/Programme/PROGRESSION_CONTENUS_PEDAGOGIQUES.md index 8b10521..557a762 100644 --- a/Programme/PROGRESSION_CONTENUS_PEDAGOGIQUES.md +++ b/Programme/PROGRESSION_CONTENUS_PEDAGOGIQUES.md @@ -4,9 +4,9 @@ Ce fichier sert de memoire de travail persistante. Il doit etre mis a jour a cha ## Phase courante -- Phase : `3A - SVG lecon CM1 mathematiques / 01B_fractions` +- Phase : `6A - SVG exercices CM1 mathematiques / 01B_fractions` - Statut : `termine - a relire` -- Derniere mise a jour : `2026-05-03` +- Derniere mise a jour : `2026-05-05` ## Phase 0 - Index et classification @@ -141,16 +141,98 @@ Livrables attendus : Etat d'avancement : - SVG de lecon : generes, `8` fichiers, XML valide. -- Contextes dynamiques par card : non lance. +- Contextes dynamiques par card : non lance dans cette phase. - Exercices textuels : non lance. - SVG exercices : non lance. - Kit adaptatif : non lance. +Statut final : valide par l'utilisateur le `2026-05-05`. + +Trace : + +- `contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md` + +## Phase 4A - Contextes dynamiques par card CM1 mathematiques / 01B_fractions + +Objectif : produire les textes pedagogiques associes aux cards detectees dans les 8 SVG fractions, pour contraindre Professeur TOP a parler de la card courante. + +Livrables attendus : + +- `card_contexts/README.md` +- un dossier `card_contexts//` pour chaque fiche SVG ; +- des fichiers `Fiche{numero_fiche}Card{numero_card}.md` alignes sur l'ordre des cards visibles. + +Etat d'avancement : + +- Contextes dynamiques par card : generes, `24` fichiers. +- SVG de lecon : deja generes et valides. +- Exercices textuels : non lance dans cette phase. +- SVG exercices : non lance. +- Kit adaptatif : non lance. + +Statut final : valide par l'utilisateur le `2026-05-05`. + +Trace : + +- `contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md` + +## Phase 5A - Exercices textuels CM1 mathematiques / 01B_fractions + +Objectif : produire les exercices textuels progressifs pour les 8 micro-competences fractions, sans generer encore les SVG d'exercices. + +Livrables attendus : + +- `exercices/README.md` +- `exercices/01_lire_ecrire_fraction_simple/exercices.md` +- `exercices/02_representer_fraction_partage/exercices.md` +- `exercices/03_fraction_sur_demi_droite_graduee/exercices.md` +- `exercices/04_fraction_superieure_a_un/exercices.md` +- `exercices/05_comparer_fractions_simples/exercices.md` +- `exercices/06_encadrer_fraction_entre_entiers/exercices.md` +- `exercices/07_additionner_soustraire_fractions_simples/exercices.md` +- `exercices/08_fraction_d_une_quantite/exercices.md` + +Etat d'avancement : + +- Exercices textuels : generes, `8` fichiers, `32` exercices. +- Reponses attendues : ajoutees. +- Observations pedagogiques : ajoutees. +- SVG exercices : non lance dans cette phase. +- Kit adaptatif : non lance. + +Statut final : valide par l'utilisateur le `2026-05-05`. + +Trace : + +- `contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md` + +## Phase 6A - SVG exercices CM1 mathematiques / 01B_fractions + +Objectif : produire une planche SVG d'exercices pour chacune des 8 micro-competences fractions. + +Livrables attendus : + +- `exercices_svg/README.md` +- `exercices_svg/01_lire_ecrire_fraction_simple.svg` +- `exercices_svg/02_representer_fraction_partage.svg` +- `exercices_svg/03_fraction_sur_demi_droite_graduee.svg` +- `exercices_svg/04_fraction_superieure_a_un.svg` +- `exercices_svg/05_comparer_fractions_simples.svg` +- `exercices_svg/06_encadrer_fraction_entre_entiers.svg` +- `exercices_svg/07_additionner_soustraire_fractions_simples.svg` +- `exercices_svg/08_fraction_d_une_quantite.svg` + +Etat d'avancement : + +- SVG exercices : generes, `8` fichiers. +- Corriges : conserves dans les fichiers Markdown d'exercices. +- Kit adaptatif : non lance. + ## Prochaine etape -- Phase suivante : `3B - Validation SVG lecon 01B_fractions` -- Statut : `a valider apres Phase 3A` -- Objectif : relire les 8 SVG de lecon fractions avant de lancer les contextes dynamiques par card. +- Phase suivante : `6B - Validation SVG exercices 01B_fractions` +- Statut : `a valider apres Phase 6A` +- Objectif : relire les 8 SVG d'exercices avant de lancer le kit adaptatif. ## Phases prevues diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md index 2c3fcb2..e465c2a 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md @@ -60,3 +60,72 @@ Phase 3A : 8 SVG de lecon generes dans `svg/`. - `svg/08_fraction_d_une_quantite.svg` Statut : brouillons visuels propres, XML valides, a relire avant validation finale. + +## Validation SVG + +Phase 3B : les 8 SVG de lecon sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_3B.md` + +## Contextes dynamiques generes + +Phase 4A : 24 contextes dynamiques par card generes dans `card_contexts/`. + +Organisation : + +- `card_contexts/01_lire_ecrire_fraction_simple/` : 4 cards. +- `card_contexts/02_representer_fraction_partage/` : 4 cards. +- `card_contexts/03_fraction_sur_demi_droite_graduee/` : 2 cards. +- `card_contexts/04_fraction_superieure_a_un/` : 3 cards. +- `card_contexts/05_comparer_fractions_simples/` : 3 cards. +- `card_contexts/06_encadrer_fraction_entre_entiers/` : 2 cards. +- `card_contexts/07_additionner_soustraire_fractions_simples/` : 3 cards. +- `card_contexts/08_fraction_d_une_quantite/` : 3 cards. + +Statut : contextes initiaux prets pour relecture Phase 4B. + +## Validation contextes dynamiques + +Phase 4B : les 24 contextes dynamiques par card sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_4B.md` + +## Exercices textuels generes + +Phase 5A : 8 fichiers d'exercices textuels generes dans `exercices/`, soit `32` exercices au total. + +Organisation : + +- `exercices/01_lire_ecrire_fraction_simple/exercices.md` +- `exercices/02_representer_fraction_partage/exercices.md` +- `exercices/03_fraction_sur_demi_droite_graduee/exercices.md` +- `exercices/04_fraction_superieure_a_un/exercices.md` +- `exercices/05_comparer_fractions_simples/exercices.md` +- `exercices/06_encadrer_fraction_entre_entiers/exercices.md` +- `exercices/07_additionner_soustraire_fractions_simples/exercices.md` +- `exercices/08_fraction_d_une_quantite/exercices.md` + +Statut : exercices initiaux prets pour relecture Phase 5B. + +## Validation exercices textuels + +Phase 5B : les 8 fichiers d'exercices textuels sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_5B.md` + +## SVG exercices generes + +Phase 6A : 8 planches SVG d'exercices generees dans `exercices_svg/`. + +Organisation : + +- `exercices_svg/01_lire_ecrire_fraction_simple.svg` +- `exercices_svg/02_representer_fraction_partage.svg` +- `exercices_svg/03_fraction_sur_demi_droite_graduee.svg` +- `exercices_svg/04_fraction_superieure_a_un.svg` +- `exercices_svg/05_comparer_fractions_simples.svg` +- `exercices_svg/06_encadrer_fraction_entre_entiers.svg` +- `exercices_svg/07_additionner_soustraire_fractions_simples.svg` +- `exercices_svg/08_fraction_d_une_quantite.svg` + +Statut : SVG exercices initiaux prets pour relecture Phase 6B. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md new file mode 100644 index 0000000..2f1a54d --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md @@ -0,0 +1,28 @@ +# Validation Phase 3B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 8 SVG de lecon du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : contextes dynamiques par card. + +## SVG valides + +1. `svg/01_lire_ecrire_fraction_simple.svg` +2. `svg/02_representer_fraction_partage.svg` +3. `svg/03_fraction_sur_demi_droite_graduee.svg` +4. `svg/04_fraction_superieure_a_un.svg` +5. `svg/05_comparer_fractions_simples.svg` +6. `svg/06_encadrer_fraction_entre_entiers.svg` +7. `svg/07_additionner_soustraire_fractions_simples.svg` +8. `svg/08_fraction_d_une_quantite.svg` + +## Regles pour la Phase 4A + +- Un contexte doit correspondre a une card visible. +- Professeur TOP doit parler uniquement des nombres et objets affiches sur la card. +- Le contexte doit contenir une consigne orale courte, des limites et un critere de passage. +- Les mots `unite`, `parts egales`, `numerateur` et `denominateur` doivent etre utilises quand ils sont pertinents. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md new file mode 100644 index 0000000..d86e0aa --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md @@ -0,0 +1,28 @@ +# Validation Phase 4B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 24 contextes dynamiques par card du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : exercices textuels. + +## Contextes valides + +- `card_contexts/01_lire_ecrire_fraction_simple/` : 4 cards. +- `card_contexts/02_representer_fraction_partage/` : 4 cards. +- `card_contexts/03_fraction_sur_demi_droite_graduee/` : 2 cards. +- `card_contexts/04_fraction_superieure_a_un/` : 3 cards. +- `card_contexts/05_comparer_fractions_simples/` : 3 cards. +- `card_contexts/06_encadrer_fraction_entre_entiers/` : 2 cards. +- `card_contexts/07_additionner_soustraire_fractions_simples/` : 3 cards. +- `card_contexts/08_fraction_d_une_quantite/` : 3 cards. + +## Regles pour la Phase 5A + +- Produire des exercices textuels progressifs, sans SVG dans cette phase. +- Garder le niveau CM1 et les denominateurs simples. +- Donner les reponses attendues pour permettre une future correction automatique. +- Noter les erreurs observables utiles a Professeur TOP. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md new file mode 100644 index 0000000..41b05dc --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md @@ -0,0 +1,28 @@ +# Validation Phase 5B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 8 fichiers d'exercices textuels du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : SVG des exercices. + +## Exercices valides + +- `exercices/01_lire_ecrire_fraction_simple/exercices.md` +- `exercices/02_representer_fraction_partage/exercices.md` +- `exercices/03_fraction_sur_demi_droite_graduee/exercices.md` +- `exercices/04_fraction_superieure_a_un/exercices.md` +- `exercices/05_comparer_fractions_simples/exercices.md` +- `exercices/06_encadrer_fraction_entre_entiers/exercices.md` +- `exercices/07_additionner_soustraire_fractions_simples/exercices.md` +- `exercices/08_fraction_d_une_quantite/exercices.md` + +## Regles pour la Phase 6A + +- Produire une planche SVG d'exercices par micro-competence. +- Ne pas integrer Professeur TOP dans les planches. +- Garder des zones de reponse visibles mais non corrigees. +- Placer les corriges uniquement dans les fichiers Markdown, pas dans les SVG d'exercice. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md new file mode 100644 index 0000000..8eab0ee --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md @@ -0,0 +1,23 @@ +# Fiche 1 - Card 1 - La fraction + +Cette card presente la fraction `3/4` sous forme verticale. + +Idee a enseigner : +- `3/4` s'ecrit avec un nombre en haut, une barre, puis un nombre en bas. +- Le nombre du haut s'appelle le numerateur. +- Le nombre du bas s'appelle le denominateur. + +Nombres autorises sur cette card : +- `3/4` uniquement. + +Consigne orale courte pour Professeur TOP : +Montre que la fraction affichee est `3/4`. Explique que le `3` est en haut et le `4` en bas. Demande a l'eleve de montrer ou de dire quel nombre est en haut. + +Limites : +- Ne parle pas encore du rectangle partage. +- Ne donne pas d'autre fraction. +- Ne lance pas encore la lecture `trois quarts` sauf si l'eleve la propose. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il reconnait que `3` est en haut et `4` en bas, ou s'il dit qu'il a compris cette ecriture. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md new file mode 100644 index 0000000..35ad8ca --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md @@ -0,0 +1,25 @@ +# Fiche 1 - Card 2 - Ce que ca dit + +Cette card explique le sens de `3/4`. + +Idee a enseigner : +- Le `3` indique les parts prises. +- Le `4` indique les parts egales dans l'unite. +- `3/4` se lit `trois quarts`. + +Nombres et vocabulaire autorises : +- `3 parts prises` ; +- `4 parts egales` ; +- `trois quarts`. + +Consigne orale courte pour Professeur TOP : +Explique que `3/4` veut dire `3 parts prises sur 4 parts egales`. Fais lire la fraction `trois quarts`, puis demande a l'eleve de repeter. + +Limites : +- Ne change pas de fraction. +- Ne parle pas encore de fractions plus grandes que `1`. +- Ne donne pas de calcul. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il lit `3/4` comme `trois quarts` ou s'il explique que le `3` indique les parts prises. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md new file mode 100644 index 0000000..f9b4f21 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md @@ -0,0 +1,20 @@ +# Fiche 1 - Card 3 - L'unite partagee + +Cette card montre une unite partagee en `4` parts egales, dont `3` sont coloriees. + +Idee a enseigner : +- L'unite est le rectangle entier. +- Le rectangle est coupe en `4` parts egales. +- `3` parts sont coloriees : cela represente `3/4`. + +Consigne orale courte pour Professeur TOP : +Commence par nommer l'unite : le rectangle entier. Dis qu'il est partage en `4` parts egales et que `3` parts sont coloriees. Demande a l'eleve combien de parts sont coloriees. + +Limites : +- Ne donne pas d'autre dessin. +- Ne compare pas avec une autre fraction. +- Ne parle pas des fractions decimales. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond `3`, ou s'il dit que `3` parts sur `4` sont coloriees. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md new file mode 100644 index 0000000..ae9f9b7 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md @@ -0,0 +1,19 @@ +# Fiche 1 - Card 4 - A retenir + +Cette card formule la regle a memoriser. + +Idee a enseigner : +- Le denominateur indique le partage. +- Le numerateur indique les parts prises. +- Il faut toujours penser a l'unite avant de lire la fraction. + +Consigne orale courte pour Professeur TOP : +Resume en une phrase : le denominateur dit en combien de parts egales on partage l'unite, le numerateur dit combien de parts on prend. Demande a l'eleve de redire le role du denominateur. + +Limites : +- Ne commence pas une nouvelle fiche. +- Ne donne pas d'exercice long. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le denominateur indique le partage, ou s'il dit clairement qu'il a compris. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md new file mode 100644 index 0000000..d4f11ae --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 1 - Bande : 3/5 + +Cette card represente `3/5` avec une bande. + +Idee a enseigner : +- L'unite est la bande entiere. +- Elle est partagee en `5` parts egales. +- `3` parts sont coloriees. + +Consigne orale courte pour Professeur TOP : +Dis que la bande entiere est l'unite. Explique qu'elle est coupee en `5` parts egales et que `3` parts sont coloriees. Demande quelle fraction est representee. + +Limites : +- Ne parle pas encore du disque ni de la collection. +- Ne change pas le nombre de parts. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond `3/5` ou s'il dit `3 parts sur 5`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md new file mode 100644 index 0000000..e95d2be --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 2 - Disque : 1/4 + +Cette card represente `1/4` avec un disque. + +Idee a enseigner : +- L'unite est le disque entier. +- Le disque est partage en `4` parts egales. +- Une seule part est coloriee. + +Consigne orale courte pour Professeur TOP : +Nomme l'unite : le disque entier. Fais compter les `4` parts egales, puis la part coloriee. Demande a l'eleve de lire la fraction `1/4`. + +Limites : +- Ne parle pas de pourcentage. +- Ne compare pas avec la bande precedente sauf pour rappeler que l'unite peut changer de forme. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il lit `1/4` comme `un quart` ou s'il reconnait une part sur quatre. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md new file mode 100644 index 0000000..61a69ef --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md @@ -0,0 +1,20 @@ +# Fiche 2 - Card 3 - Collection : 6/10 + +Cette card represente `6/10` avec une collection d'objets. + +Idee a enseigner : +- L'unite est toute la collection de `10` objets. +- `6` objets sont choisis. +- La fraction representee est `6/10`. + +Consigne orale courte pour Professeur TOP : +Explique que l'unite n'est pas une forme ici, mais toute la collection. Fais compter mentalement `10` objets au total, puis `6` objets choisis. Demande quelle fraction cela donne. + +Limites : +- Ne simplifie pas `6/10`. +- Ne transforme pas en nombre decimal. +- Ne change pas la collection. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit `6/10` ou `6 objets sur 10`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md new file mode 100644 index 0000000..3a57958 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 4 - A retenir + +Cette card rappelle la condition essentielle d'une representation. + +Idee a enseigner : +- Une fraction a besoin d'une unite claire. +- Les parts doivent etre egales. +- On partage d'abord, puis on prend ou on colorie. + +Consigne orale courte pour Professeur TOP : +Resume les trois gestes : je choisis l'unite, je partage en parts egales, je prends les parts demandees. Demande a l'eleve lequel de ces gestes vient en premier. + +Limites : +- Ne donne pas de nouvel exemple numerique. +- Ne commence pas encore les exercices. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut d'abord choisir l'unite ou partager en parts egales. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md new file mode 100644 index 0000000..a8ee641 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md @@ -0,0 +1,20 @@ +# Fiche 3 - Card 1 - Exemple : placer 5/4 + +Cette card montre la fraction `5/4` sur une demi-droite graduee de `0` a `2`. + +Idee a enseigner : +- L'intervalle de `0` a `1` est une unite. +- Chaque unite est partagee en `4` parts egales. +- `5/4` correspond a `5` quarts depuis `0`, donc le point est juste apres `1`. + +Consigne orale courte pour Professeur TOP : +Commence par faire reperer l'unite entre `0` et `1`. Dis que le denominateur `4` impose `4` parts egales par unite. Compte ensuite `5` quarts depuis `0` et montre que `5/4` est juste apres `1`. + +Limites : +- Ne place pas d'autre fraction. +- Ne parle pas de nombres decimaux. +- Ne saute pas l'etape de l'unite. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il explique que `5/4` est apres `1`, ou s'il dit que chaque unite est partagee en `4`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md new file mode 100644 index 0000000..c62b965 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md @@ -0,0 +1,19 @@ +# Fiche 3 - Card 2 - A retenir + +Cette card fixe la regle pour une demi-droite graduee. + +Idee a enseigner : +- L'intervalle de `0` a `1` represente l'unite. +- On partage cette unite en parts egales selon le denominateur. +- Le numerateur indique combien de parts on avance. + +Consigne orale courte pour Professeur TOP : +Resume la methode en trois temps : je regarde l'unite, je la partage selon le denominateur, puis j'avance selon le numerateur. Demande a l'eleve ce que represente l'intervalle de `0` a `1`. + +Limites : +- Ne donne pas un nouvel exercice. +- Ne parle pas de graduations irregulieres. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que de `0` a `1`, c'est une unite. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md new file mode 100644 index 0000000..45cc8be --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md @@ -0,0 +1,20 @@ +# Fiche 4 - Card 1 - Exemple : 7/4 + +Cette card represente `7/4` avec deux bandes-unites partagees en quarts. + +Idee a enseigner : +- Chaque bande entiere represente une unite. +- Une unite complete vaut `4/4`. +- Pour montrer `7/4`, on colorie `4/4`, puis encore `3/4`. + +Consigne orale courte pour Professeur TOP : +Fais d'abord apparaitre l'unite complete : `4/4`. Puis montre qu'il reste `3` quarts a colorier pour arriver a `7/4`. Demande a l'eleve combien de quarts sont colories dans la premiere bande. + +Limites : +- Ne donne pas d'autre fraction superieure a `1`. +- Ne transforme pas en nombre decimal. +- Ne parle pas encore de division posee. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que la premiere bande vaut `4/4` ou une unite. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md new file mode 100644 index 0000000..ce8f624 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md @@ -0,0 +1,20 @@ +# Fiche 4 - Card 2 - Je decompose + +Cette card ecrit la decomposition de `7/4`. + +Idee a enseigner : +- `7/4 = 4/4 + 3/4`. +- Comme `4/4 = 1`, alors `7/4 = 1 + 3/4`. +- La partie entiere apparait quand une unite est complete. + +Consigne orale courte pour Professeur TOP : +Lis la decomposition lentement : `7/4`, c'est `4/4 + 3/4`, donc `1 + 3/4`. Demande a l'eleve pourquoi `4/4` vaut `1`. + +Limites : +- Ne simplifie pas davantage. +- Ne donne pas d'autre decomposition. +- Reste sur `7/4`. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `4/4` fait une unite ou s'il reconnait `1 + 3/4`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md new file mode 100644 index 0000000..d79dc4c --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md @@ -0,0 +1,19 @@ +# Fiche 4 - Card 3 - A retenir + +Cette card rappelle qu'une fraction peut depasser `1`. + +Idee a enseigner : +- Une fraction est plus grande que `1` quand il faut plus d'une unite. +- C'est souvent le cas quand le numerateur est plus grand que le denominateur. +- On utilise alors plusieurs unites. + +Consigne orale courte pour Professeur TOP : +Explique qu'une fraction peut etre plus grande que `1`. Dis que dans ce cas, une seule unite ne suffit pas. Demande a l'eleve comment on le voit avec `7/4`. + +Limites : +- Ne generalise pas a toutes les fractions impropres. +- Ne donne pas de calcul nouveau. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `7/4` depasse une unite ou qu'il faut plusieurs unites. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md new file mode 100644 index 0000000..34ec79b --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md @@ -0,0 +1,19 @@ +# Fiche 5 - Card 1 - Meme denominateur + +Cette card compare `3/5` et `4/5`. + +Idee a enseigner : +- Les deux fractions ont le meme denominateur : les parts ont la meme taille. +- `4/5` a une part coloriee de plus que `3/5`. +- Donc `3/5 < 4/5`. + +Consigne orale courte pour Professeur TOP : +Commence par demander si les denominateurs sont identiques. Fais observer que les deux bandes sont partagees en `5`. Explique ensuite que `4` parts prises, c'est plus que `3` parts prises. + +Limites : +- Ne parle pas encore du cas `1/2` et `1/4`. +- Ne compare pas avec des decimaux. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `4/5` est plus grand que `3/5`, ou que les denominateurs sont les memes. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md new file mode 100644 index 0000000..55fd3ef --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md @@ -0,0 +1,20 @@ +# Fiche 5 - Card 2 - Meme numerateur + +Cette card compare `1/2` et `1/4`. + +Idee a enseigner : +- Les deux fractions prennent une seule part. +- Mais une moitie est plus grande qu'un quart. +- Quand on partage la meme unite en plus de parts, chaque part est plus petite. + +Consigne orale courte pour Professeur TOP : +Explique que le numerateur est le meme : on prend `1` part. Puis montre que les parts n'ont pas la meme taille : une part sur `2` est plus grande qu'une part sur `4`. Demande quelle fraction est la plus grande. + +Limites : +- Ne transforme pas en `0,5` ou `0,25`. +- Ne donne pas d'autre comparaison. +- Rappelle que l'unite doit etre la meme. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `1/2` est plus grand que `1/4`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md new file mode 100644 index 0000000..a0db973 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md @@ -0,0 +1,19 @@ +# Fiche 5 - Card 3 - A retenir + +Cette card fixe la regle principale de comparaison. + +Idee a enseigner : +- A denominateur egal, les parts ont la meme taille. +- Le plus grand numerateur donne la plus grande fraction. +- Avant de comparer, il faut verifier l'unite. + +Consigne orale courte pour Professeur TOP : +Resume la regle : si les denominateurs sont egaux, on compare les numerateurs. Demande a l'eleve ce qu'il faut verifier avant de comparer deux fractions. + +Limites : +- Ne donne pas un long exercice. +- Ne parle pas de fractions equivalentes. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut comparer les numerateurs quand les denominateurs sont les memes. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md new file mode 100644 index 0000000..643651d --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md @@ -0,0 +1,20 @@ +# Fiche 6 - Card 1 - Exemple : 7/3 + +Cette card encadre `7/3` entre `2` et `3`. + +Idee a enseigner : +- En tiers, `6/3 = 2`. +- En tiers, `9/3 = 3`. +- Comme `7/3` est entre `6/3` et `9/3`, alors `2 < 7/3 < 3`. + +Consigne orale courte pour Professeur TOP : +Commence par montrer les entiers voisins sous forme de fractions : `6/3 = 2` et `9/3 = 3`. Puis place `7/3` entre les deux. Demande a l'eleve entre quels entiers se trouve `7/3`. + +Limites : +- Ne donne pas d'autre fraction. +- Ne parle pas de division euclidienne. +- Ne saute pas les fractions equivalentes aux entiers voisins. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond que `7/3` est entre `2` et `3`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md new file mode 100644 index 0000000..5584546 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md @@ -0,0 +1,19 @@ +# Fiche 6 - Card 2 - A retenir + +Cette card rappelle la methode d'encadrement. + +Idee a enseigner : +- On compare la fraction aux fractions qui valent les entiers voisins. +- Il faut garder le meme denominateur. +- L'encadrement s'ecrit avec deux signes `<`. + +Consigne orale courte pour Professeur TOP : +Resume : pour encadrer, je cherche les entiers voisins ecrits avec le meme denominateur. Fais redire l'encadrement affiche : `2 < 7/3 < 3`. + +Limites : +- Ne lance pas un nouvel exemple. +- Ne parle pas de notation decimale. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il relit correctement `2 < 7/3 < 3` ou s'il dit qu'il faut chercher les entiers voisins. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md new file mode 100644 index 0000000..27ac3ba --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md @@ -0,0 +1,20 @@ +# Fiche 7 - Card 1 - Exemple + +Cette card additionne `2/7 + 3/7`. + +Idee a enseigner : +- Les denominateurs sont les memes : les parts ont la meme taille. +- On additionne les numerateurs : `2 + 3 = 5`. +- Le denominateur reste `7`. + +Consigne orale courte pour Professeur TOP : +Fais d'abord verifier que les denominateurs sont tous les deux `7`. Explique ensuite que l'on ajoute les parts coloriees : `2` parts plus `3` parts font `5` parts, donc `5/7`. + +Limites : +- Ne change pas le denominateur. +- Ne simplifie pas la fraction. +- Ne parle pas encore de soustraction. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le resultat est `5/7` ou que le denominateur reste `7`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md new file mode 100644 index 0000000..ca63baa --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md @@ -0,0 +1,19 @@ +# Fiche 7 - Card 2 - La regle + +Cette card donne la regle et un exemple de soustraction. + +Idee a enseigner : +- On garde le denominateur quand les parts ont la meme taille. +- On ajoute ou on retire seulement les numerateurs. +- Exemple affiche : `6/8 - 2/8 = 4/8`. + +Consigne orale courte pour Professeur TOP : +Dis la regle clairement : je garde le denominateur, j'ajoute ou je retire les numerateurs. Lis l'exemple `6/8 - 2/8 = 4/8`, puis demande pourquoi le `8` reste. + +Limites : +- Ne reduis pas `4/8`. +- Ne donne pas de calcul avec denominateurs differents. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le denominateur reste parce que les parts ont la meme taille. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md new file mode 100644 index 0000000..210347c --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md @@ -0,0 +1,19 @@ +# Fiche 7 - Card 3 - A retenir + +Cette card rappelle la verification indispensable avant le calcul. + +Idee a enseigner : +- Avant de calculer, on verifie les denominateurs. +- S'ils sont identiques, les parts ont la meme taille. +- On calcule alors seulement avec les numerateurs. + +Consigne orale courte pour Professeur TOP : +Demande a l'eleve quelle verification il faut faire avant d'additionner ou de soustraire des fractions. Attends l'idee : les denominateurs doivent etre les memes. + +Limites : +- Ne donne pas d'algorithme pour denominateurs differents. +- Ne propose pas d'exercice nouveau. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut verifier que les denominateurs sont identiques. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md new file mode 100644 index 0000000..168c85a --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md @@ -0,0 +1,20 @@ +# Fiche 8 - Card 1 - Exemple : 3/4 de 20 + +Cette card montre comment trouver `3/4` de `20`. + +Idee a enseigner : +- La quantite `20` est partagee en `4` parts egales. +- Une part vaut `5`. +- On prend `3` parts, donc `15`. + +Consigne orale courte pour Professeur TOP : +Separe bien les deux gestes : d'abord je partage `20` en `4` parts, chaque part vaut `5`; ensuite je prends `3` parts, donc `15`. Demande a l'eleve combien vaut une part. + +Limites : +- Ne change pas la quantite `20`. +- Ne donne pas d'autre fraction. +- Ne presente pas de formule abstraite avant le partage. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond qu'une part vaut `5` ou que `3` parts valent `15`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md new file mode 100644 index 0000000..fc39802 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md @@ -0,0 +1,20 @@ +# Fiche 8 - Card 2 - La methode + +Cette card formalise le calcul de `3/4` de `20`. + +Idee a enseigner : +- On divise par le denominateur : `20 / 4 = 5`. +- On multiplie par le numerateur : `5 x 3 = 15`. +- Le denominateur partage, le numerateur dit combien prendre. + +Consigne orale courte pour Professeur TOP : +Lis les deux calculs dans l'ordre : `20 / 4 = 5`, puis `5 x 3 = 15`. Demande a l'eleve quel nombre sert a partager. + +Limites : +- Ne parle pas encore de pourcentage. +- Ne donne pas de probleme texte. +- Reste sur `3/4` de `20`. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le `4` sert a partager ou que le resultat est `15`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md new file mode 100644 index 0000000..58acfca --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md @@ -0,0 +1,19 @@ +# Fiche 8 - Card 3 - A retenir + +Cette card rappelle la methode generale pour trouver une fraction d'une quantite. + +Idee a enseigner : +- Pour trouver `3/4` d'une quantite, on divise par `4`. +- Puis on multiplie par `3`. +- Plus generalement : je partage, puis je prends. + +Consigne orale courte pour Professeur TOP : +Resume avec les mots de la card : pour trouver `3/4` d'une quantite, je divise par `4`, puis je multiplie par `3`. Demande a l'eleve de redire les deux gestes : partager puis prendre. + +Limites : +- Ne donne pas de nouvel exemple. +- Ne parle pas de fractions plus complexes. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit `je partage puis je prends`, ou s'il dit `diviser par 4 puis multiplier par 3`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md new file mode 100644 index 0000000..06a860f --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md @@ -0,0 +1,16 @@ +# Contextes dynamiques - CM1 - Fractions + +Ce dossier contient les textes pedagogiques associes aux cards detectees dans les SVG de lecon du sous-theme `01B_fractions`. + +Convention de nommage attendue par l'application : + +- `card_contexts//Fiche{numero_fiche}Card{numero_card}.md` + +Objectif : + +- guider Professeur TOP pour expliquer uniquement la card affichee ; +- eviter que le modele reparte sur toute la fiche ou sur une autre notion ; +- fournir un critere simple pour avancer a la card suivante. + +Statut Phase 4A : contextes initiaux generes, a relire avant exercices. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md new file mode 100644 index 0000000..fa92eca --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md @@ -0,0 +1,64 @@ +# Exercices - Lire et ecrire une fraction simple + +## Intention + +Verifier que l'eleve sait lire une fraction, reconnaitre numerateur et denominateur, puis ecrire une fraction dictee. + +## Exercice 1 - Lire les fractions + +Lis les fractions suivantes : + +- `1/2` +- `3/4` +- `5/8` +- `7/10` + +Reponses attendues : + +- `un demi` +- `trois quarts` +- `cinq huitiemes` +- `sept dixiemes` + +## Exercice 2 - Nommer les nombres + +Pour chaque fraction, indique le numerateur et le denominateur : + +- `2/5` +- `4/9` +- `6/7` + +Reponses attendues : + +- `2/5` : numerateur `2`, denominateur `5` +- `4/9` : numerateur `4`, denominateur `9` +- `6/7` : numerateur `6`, denominateur `7` + +## Exercice 3 - Ecrire en chiffres + +Ecris en fraction : + +- deux tiers +- trois cinquiemes +- neuf dixiemes + +Reponses attendues : + +- `2/3` +- `3/5` +- `9/10` + +## Exercice 4 - Expliquer le sens + +Explique ce que veut dire `3/4` avec les mots `unite`, `parts egales` et `parts prises`. + +Reponse attendue : + +- L'unite est partagee en `4` parts egales et on prend `3` parts. + +## Observations pour Professeur TOP + +- Si l'eleve inverse haut et bas, reprendre numerateur puis denominateur avec `3/4`. +- Si l'eleve lit chiffre par chiffre, refaire lire avec les mots usuels : demi, tiers, quarts. +- Si l'eleve oublie l'unite, revenir a la card `L'unite partagee`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md new file mode 100644 index 0000000..c018cd8 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md @@ -0,0 +1,56 @@ +# Exercices - Representer une fraction comme partage + +## Intention + +Verifier que l'eleve sait choisir une unite, la partager en parts egales, puis prendre ou colorier les parts demandees. + +## Exercice 1 - Dire la fraction coloriee + +Imagine une bande partagee en parts egales. Quelle fraction est coloriee ? + +- `2` parts coloriees sur `3` +- `4` parts coloriees sur `5` +- `6` parts coloriees sur `10` + +Reponses attendues : + +- `2/3` +- `4/5` +- `6/10` + +## Exercice 2 - Decrire le dessin a faire + +Dis comment representer chaque fraction avec une bande : + +- `1/4` +- `3/6` +- `5/8` + +Reponses attendues : + +- Partager l'unite en `4` parts egales et colorier `1` part. +- Partager l'unite en `6` parts egales et colorier `3` parts. +- Partager l'unite en `8` parts egales et colorier `5` parts. + +## Exercice 3 - Verifier les parts egales + +Une bande est coupee en `4` morceaux, mais les morceaux n'ont pas la meme taille. Peut-on dire que `2` morceaux colories representent forcement `2/4` ? + +Reponse attendue : + +- Non, les parts doivent etre egales. + +## Exercice 4 - Collection + +Dans une collection de `12` jetons, `5` jetons sont rouges. Quelle fraction de la collection est rouge ? + +Reponse attendue : + +- `5/12` + +## Observations pour Professeur TOP + +- Si l'eleve donne seulement le nombre de parts coloriees, faire chercher le total. +- Si l'eleve ne nomme pas l'unite, demander : `quelle est toute la quantite ?` +- Si les parts egales sont oubliees, revenir a la regle : une fraction exige des parts egales. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md new file mode 100644 index 0000000..fd1dff1 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md @@ -0,0 +1,44 @@ +# Exercices - Placer une fraction sur une demi-droite graduee + +## Intention + +Verifier que l'eleve sait reperer l'unite, utiliser le denominateur pour graduer, puis avancer selon le numerateur. + +## Exercice 1 - Reperer l'unite + +Sur une demi-droite, l'intervalle de `0` a `1` est partage en `4` parts egales. Combien vaut chaque petite part ? + +Reponse attendue : + +- Chaque petite part vaut `1/4`. + +## Exercice 2 - Placer une fraction entre 0 et 1 + +Pour placer `3/4`, combien de petites parts faut-il avancer depuis `0` ? + +Reponse attendue : + +- Il faut avancer de `3` petites parts. + +## Exercice 3 - Lire une fraction placee + +L'unite est partagee en `5` parts egales. Un point est place sur la deuxieme petite graduation apres `0`. Quelle fraction indique ce point ? + +Reponse attendue : + +- `2/5` + +## Exercice 4 - Fraction apres 1 + +L'unite est partagee en quarts. Explique pourquoi `5/4` est juste apres `1`. + +Reponse attendue : + +- `4/4` vaut `1`, donc `5/4` est un quart apres `1`. + +## Observations pour Professeur TOP + +- Si l'eleve compte les traits au lieu des intervalles, faire compter les parts entre `0` et `1`. +- Si l'eleve place `5/4` avant `1`, reprendre `4/4 = 1`. +- Si le denominateur est ignore, demander combien de parts egales contient chaque unite. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md new file mode 100644 index 0000000..8810556 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md @@ -0,0 +1,65 @@ +# Exercices - Comprendre une fraction superieure a 1 + +## Intention + +Verifier que l'eleve reconnait une fraction plus grande que `1` et sait la decomposer en unite complete et reste. + +## Exercice 1 - Reconnaitre + +Entoure les fractions superieures a `1` : + +- `2/5` +- `5/5` +- `7/5` +- `9/4` +- `3/8` + +Reponses attendues : + +- `7/5` +- `9/4` + +Note : `5/5` est egal a `1`, il n'est pas superieur a `1`. + +## Exercice 2 - Completer la decomposition + +Complete : + +- `5/4 = 4/4 + ...` +- `7/3 = 6/3 + ...` +- `9/2 = 8/2 + ...` + +Reponses attendues : + +- `5/4 = 4/4 + 1/4` +- `7/3 = 6/3 + 1/3` +- `9/2 = 8/2 + 1/2` + +## Exercice 3 - Ecrire avec une partie entiere + +Complete : + +- `6/5 = 1 + ...` +- `8/3 = 2 + ...` +- `11/4 = 2 + ...` + +Reponses attendues : + +- `6/5 = 1 + 1/5` +- `8/3 = 2 + 2/3` +- `11/4 = 2 + 3/4` + +## Exercice 4 - Expliquer avec l'unite + +Explique pourquoi `7/4` est plus grand que `1`. + +Reponse attendue : + +- Une unite vaut `4/4`. Dans `7/4`, on a `4/4` et encore `3/4`, donc c'est plus que `1`. + +## Observations pour Professeur TOP + +- Si l'eleve pense que toute fraction est plus petite que `1`, revenir aux bandes multiples. +- Si `denominateur plus grand` devient une regle automatique, faire comparer numerateur et denominateur. +- Si l'eleve oublie le cas egal a `1`, reprendre `5/5 = 1`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md new file mode 100644 index 0000000..c03f7cc --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md @@ -0,0 +1,62 @@ +# Exercices - Comparer des fractions simples + +## Intention + +Verifier que l'eleve compare d'abord l'unite et les denominateurs, puis choisit une strategie adaptee. + +## Exercice 1 - Meme denominateur + +Complete avec `<`, `>` ou `=` : + +- `2/7 ... 5/7` +- `6/8 ... 3/8` +- `4/9 ... 4/9` + +Reponses attendues : + +- `2/7 < 5/7` +- `6/8 > 3/8` +- `4/9 = 4/9` + +## Exercice 2 - Meme numerateur + +Choisis la plus grande fraction : + +- `1/2` ou `1/4` +- `2/3` ou `2/5` +- `3/6` ou `3/10` + +Reponses attendues : + +- `1/2` +- `2/3` +- `3/6` + +## Exercice 3 - Comparer a 1 + +Complete avec `<`, `>` ou `=` : + +- `5/6 ... 1` +- `6/6 ... 1` +- `8/6 ... 1` + +Reponses attendues : + +- `5/6 < 1` +- `6/6 = 1` +- `8/6 > 1` + +## Exercice 4 - Justifier + +Explique pourquoi `3/5 < 4/5`. + +Reponse attendue : + +- Les denominateurs sont les memes, donc les parts ont la meme taille. `4` parts, c'est plus que `3` parts. + +## Observations pour Professeur TOP + +- Si l'eleve compare seulement les denominateurs, revenir a l'unite et a la taille des parts. +- Si l'eleve bloque sur `<` et `>`, accepter une phrase orale avant le symbole. +- Si l'eleve reussit sans justifier, demander quelle strategie il a utilisee. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md new file mode 100644 index 0000000..51ef5d7 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md @@ -0,0 +1,60 @@ +# Exercices - Encadrer une fraction entre deux entiers + +## Intention + +Verifier que l'eleve trouve les entiers voisins d'une fraction superieure a `1`, en gardant le meme denominateur. + +## Exercice 1 - Trouver les entiers en fraction + +Complete : + +- Avec des quarts : `1 = .../4` et `2 = .../4` +- Avec des tiers : `2 = .../3` et `3 = .../3` +- Avec des cinquiemes : `2 = .../5` et `3 = .../5` + +Reponses attendues : + +- `1 = 4/4` et `2 = 8/4` +- `2 = 6/3` et `3 = 9/3` +- `2 = 10/5` et `3 = 15/5` + +## Exercice 2 - Encadrer + +Complete : + +- `... < 5/4 < ...` +- `... < 8/3 < ...` +- `... < 11/5 < ...` + +Reponses attendues : + +- `1 < 5/4 < 2` +- `2 < 8/3 < 3` +- `2 < 11/5 < 3` + +## Exercice 3 - Choisir l'encadrement correct + +Quel encadrement est correct pour `13/6` ? + +- `1 < 13/6 < 2` +- `2 < 13/6 < 3` +- `3 < 13/6 < 4` + +Reponse attendue : + +- `2 < 13/6 < 3` + +## Exercice 4 - Expliquer + +Explique pourquoi `7/3` est entre `2` et `3`. + +Reponse attendue : + +- `6/3 = 2` et `9/3 = 3`. Comme `7/3` est entre `6/3` et `9/3`, alors `7/3` est entre `2` et `3`. + +## Observations pour Professeur TOP + +- Si l'eleve encadre par des entiers trop eloignes, faire chercher les entiers consecutifs. +- Si le meme denominateur disparait, revenir a `6/3`, `7/3`, `9/3`. +- Si l'eleve compte bien mais ecrit mal les signes, accepter d'abord une phrase orale. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md new file mode 100644 index 0000000..d2832f2 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md @@ -0,0 +1,62 @@ +# Exercices - Additionner ou soustraire des fractions simples + +## Intention + +Verifier que l'eleve calcule avec des fractions de meme denominateur en gardant la taille des parts. + +## Exercice 1 - Additionner + +Calcule : + +- `1/5 + 2/5` +- `2/7 + 3/7` +- `4/10 + 5/10` + +Reponses attendues : + +- `3/5` +- `5/7` +- `9/10` + +## Exercice 2 - Soustraire + +Calcule : + +- `6/8 - 2/8` +- `7/9 - 3/9` +- `10/12 - 4/12` + +Reponses attendues : + +- `4/8` +- `4/9` +- `6/12` + +## Exercice 3 - Depasser 1 + +Calcule puis dis si le resultat depasse `1` : + +- `3/4 + 2/4` +- `5/6 + 1/6` +- `4/7 + 2/7` + +Reponses attendues : + +- `5/4`, depasse `1` +- `6/6`, egal a `1` +- `6/7`, ne depasse pas `1` + +## Exercice 4 - Expliquer la regle + +Pourquoi garde-t-on le denominateur dans `2/7 + 3/7 = 5/7` ? + +Reponse attendue : + +- Parce que les parts ont la meme taille : ce sont toujours des septiemes. + +## Observations pour Professeur TOP + +- Si l'eleve additionne les denominateurs, revenir a la bande partagee en parts egales. +- Si l'eleve simplifie spontanement, accepter mais rappeler que la phase attend la fraction non reduite. +- Si l'eleve oublie de verifier les denominateurs, poser toujours la question avant le calcul. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md new file mode 100644 index 0000000..f481308 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md @@ -0,0 +1,60 @@ +# Exercices - Determiner une fraction d'une quantite + +## Intention + +Verifier que l'eleve sait partager une quantite selon le denominateur, puis prendre le nombre de parts indique par le numerateur. + +## Exercice 1 - Une part + +Calcule : + +- `1/2` de `18` +- `1/3` de `24` +- `1/5` de `40` + +Reponses attendues : + +- `9` +- `8` +- `8` + +## Exercice 2 - Plusieurs parts + +Calcule : + +- `3/4` de `20` +- `2/5` de `30` +- `3/6` de `42` + +Reponses attendues : + +- `15` +- `12` +- `21` + +## Exercice 3 - Completer les deux etapes + +Complete : + +- `3/4` de `28` : `28 / 4 = ...`, puis `... x 3 = ...` +- `2/3` de `18` : `18 / 3 = ...`, puis `... x 2 = ...` + +Reponses attendues : + +- `28 / 4 = 7`, puis `7 x 3 = 21` +- `18 / 3 = 6`, puis `6 x 2 = 12` + +## Exercice 4 - Probleme court + +Dans une classe de `28` eleves, `3/4` participent a un atelier. Combien d'eleves participent ? + +Reponse attendue : + +- `21` eleves participent. + +## Observations pour Professeur TOP + +- Si l'eleve multiplie avant de partager, revenir aux deux gestes : partager puis prendre. +- Si l'eleve divise par le numerateur, demander quel nombre indique le partage. +- Si l'eleve trouve l'operation mais oublie l'unite, faire reformuler avec la quantite de depart. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md new file mode 100644 index 0000000..b607dc9 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md @@ -0,0 +1,19 @@ +# Exercices textuels - CM1 - Fractions + +Ce dossier contient les exercices textuels de la Phase 5A pour le sous-theme `01B_fractions`. + +Organisation : + +- un sous-dossier par micro-competence ; +- un fichier `exercices.md` par sous-dossier ; +- des exercices progressifs, avec reponses attendues et observations pedagogiques. + +Statut Phase 5A : exercices initiaux generes, a relire avant production des SVG d'exercices. + +## Principes + +- Une consigne courte par exercice. +- Une difficulte progressive : reconnaissance, application directe, transfert court, verbalisation. +- Pas de piege inutile. +- Les reponses restent simples a verifier oralement ou par saisie texte. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg new file mode 100644 index 0000000..0d2a9b1 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg @@ -0,0 +1,10 @@ + + + + + Exercices - Lire et écrire une fraction + 1. Lis les fractions123458710 + 2. Haut et bas254967Numérateur :Dénominateur :Recommence pour les autres. + 3. Écris en chiffresdeux tierstrois cinquièmesneuf dixièmesExplique avec unité et parts. + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg new file mode 100644 index 0000000..de626e6 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg @@ -0,0 +1,9 @@ + + + + Exercices - Représenter une fraction + 1. Quelle fraction ?2 parts sur 34 parts sur 56 parts sur 10 + 2. Colorie 36Puis explique :Dénominateur =Numérateur = + 3. Collection12 jetons, 5 rougesFraction rouge :Les parts doivent etre égales. + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg new file mode 100644 index 0000000..c9eb6bc --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg @@ -0,0 +1,7 @@ + + + Exercices - Fraction sur demi-droite + 1. Place 3401Unité partagée en 4 parts.Avance de combien de parts ? + 2. Lis le point01L'unité est en 5 parts.Le point indique : + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg new file mode 100644 index 0000000..bfd8b90 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg @@ -0,0 +1,8 @@ + + + Exercices - Fraction supérieure à 1 + 1. Entoure > 12555759438Attention : égal à 1 n'est pas > 1. + 2. Complète54 = 44 +73 = 63 +92 = 82 + + 3. Représente 74Colorie le reste. + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg new file mode 100644 index 0000000..c65217f --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg @@ -0,0 +1,8 @@ + + + Exercices - Comparer des fractions + 1. Complète275768384949 + 2. Choisis la plus grande12 ou 1423 ou 2536 ou 310 + 3. Compare avec 1561661861Justifie un choix. + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg new file mode 100644 index 0000000..8560c5f --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg @@ -0,0 +1,8 @@ + + + Exercices - Ençadrer une fraction + 1. Entiers en fractions1 =/42 =/4Puis recommence en tiers. + 2. Complète< 54 << 83 << 115 < + 3. Place 136123Ençadrement : + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg new file mode 100644 index 0000000..b144581 --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg @@ -0,0 +1,8 @@ + + + Exercices - Additionner et soustraire des fractions + 1. Additionne15 + 25 =27 + 37 =410 + 510 = + 2. Soustrais68 - 28 =79 - 39 =1012 - 412 = + 3. Dessine 27 + 37Résultat :Le dénominateur reste : + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg new file mode 100644 index 0000000..7e97b3b --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg @@ -0,0 +1,8 @@ + + + Exercices - Fraction d'une quantité + 1. Une part12 de 18 =13 de 24 =15 de 40 = + 2. Partage puis prends34 de 2020 ÷ 4 =Puis x 3 = + 3. Problème28 élèves.34 participent.Combien ?Deux gestes :1. partager2. prendre + + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md new file mode 100644 index 0000000..659954e --- /dev/null +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md @@ -0,0 +1,13 @@ +# SVG exercices - CM1 - Fractions + +Ce dossier contient les planches SVG d'exercices de la Phase 6A pour le sous-theme `01B_fractions`. + +Organisation : + +- une planche SVG par micro-competence ; +- consignes courtes ; +- zones de reponse visibles ; +- pas de corrige dans le visuel. + +Les corriges restent dans les fichiers `exercices/*/exercices.md`. + diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg index 1d37148..3fd606e 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg @@ -6,8 +6,8 @@ - Lire et ecrire une fraction - Maths CM1 - Numerateur, denominateur, unite + Lire et écrire une fraction + Maths CM1 - Numérateur, dénominateur, unité @@ -18,15 +18,15 @@ - Ce que ca dit + Ce que ça dit 3 parts prises - 4 parts egales - 3/4 se lit : + 4 parts égales + 34 se lit : trois quarts - L'unite partagee + L'unité partagée @@ -34,11 +34,11 @@ - L'unite est coupee en 4 parts egales. + L'unité est coupée en 4 parts égales. - A retenir - Le denominateur indique le partage. Le numerateur indique les parts prises. + À retenir + Le dénominateur indique le partage. Le numérateur indique les parts prises. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg index 51887d6..08063c5 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg @@ -1,17 +1,17 @@ - Representer une fraction - Je partage l'unite en parts egales, puis je colorie + Représenter une fraction + Je partage l'unité en parts égales, puis je colorie - Bande : 3/5 + Bande : 35 - 5 parts egales, 3 parts coloriees - Disque : 1/4 + 5 parts égales, 3 parts coloriées + Disque : 14 - 4 parts egales, 1 part coloriee - Collection : 6/10 + 4 parts égales, 1 part coloriée + Collection : 610 10 objets, 6 sont choisis - A retenirUne fraction n'a de sens que si l'unite et les parts egales sont claires. + À retenirUne fraction n'a de sens que si l'unité et les parts égales sont claires. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg index 0d8d5b0..c3acebd 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg @@ -2,18 +2,18 @@ Placer une fraction sur une demi-droite - Je partage chaque unite selon le denominateur + Je partage chaque unité selon le dénominateur - Exemple : placer 5/4 + Exemple : placer 54 0 1 2 - 5/4 + 54 - Denominateur 4 :chaque unite a 4 parts.5/4 est juste apres 1. + Dénominateur 4 :chaque unité a 4 parts.54 est juste après 1. - A retenirL'intervalle de 0 a 1 est l'unite. Je le partage en parts egales. + À retenirL'intervalle de 0 à 1 est l'unité. Je le partage en parts égales. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg index c67d3f5..61e328f 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg @@ -1,15 +1,15 @@ - Fraction superieure a 1 - Quand le numerateur depasse le denominateur + Fraction supérieure à 1 + Quand le numérateur depasse le dénominateur - Exemple : 7/4 + Exemple : 74 - Je decompose - 7/4 = 4/4 + 3/47/4 = 1 + 3/4La premiere unite est complete.Il reste encore trois quarts. + Je décompose + 74 = 44 + 3474 = 1 + 34La première unité est complète.Il reste encore trois quarts. - A retenirUne fraction peut etre plus grande que 1 : il faut alors utiliser plusieurs unites. + À retenirUne fraction peut etre plus grande que 1 : il faut alors utiliser plusieurs unités. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg index 0ab3f21..2180e60 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg @@ -2,15 +2,15 @@ Comparer des fractions simples - Meme unite, parts egales, puis je compare + Même unité, parts égales, puis je compare - Meme denominateur - 3/5 < 4/5 + Même dénominateur + 35 < 45 - Meme numerateur - 1/2 > 1/4Quand on partage en plus de parts,chaque part est plus petite.Toujours comparer la meme unite. + Même numérateur + 12 > 14Quand on partage en plus de parts,chaque part est plus petite.Toujours comparer la meme unité. - A retenirA denominateur egal, le plus grand numerateur donne la plus grande fraction. + À retenirA dénominateur égal, le plus grand numérateur donne la plus grande fraction. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg index ab31f27..64ec1e5 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg @@ -1,13 +1,13 @@ - Encadrer une fraction + Ençadrer une fraction Je cherche entre quels entiers elle se trouve - Exemple : 7/3 - 6/3 = 29/3 = 32 < 7/3 < 3 + Exemple : 73 + 63 = 293 = 32 < 73 < 3 - 01237/3 + 012373 - A retenirJe compare la fraction aux fractions qui valent les entiers voisins. + À retenirJe compare la fraction aux fractions qui valent les entiers voisins. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg index 569600b..50a4e0c 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg @@ -2,11 +2,11 @@ Additionner des fractions simples - Si les denominateurs sont les memes, les parts ont la meme taille + Si les dénominateurs sont les mêmes, les parts ont la meme taille - Exemple2/7 + 3/7 = 5/7 + Exemple27 + 37 = 57 - La regleJe garde le denominateur.J'ajoute ou je retireseulement les numerateurs.6/8 - 2/8 = 4/8 - A retenirAvant de calculer, je verifie que les denominateurs sont identiques. + La règleJe garde le dénominateur.J'ajoute ou je retireseulement les numérateurs.68 - 28 = 48 + À retenirAvant de çalculer, je vérifie que les dénominateurs sont identiques. diff --git a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg index 34a672e..e278c59 100644 --- a/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg +++ b/Programme/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg @@ -1,13 +1,13 @@ - Trouver une fraction d'une quantite - Je partage, puis je prends les parts demandees + Trouver une fraction d'une quantité + Je partage, puis je prends les parts demandées - Exemple : 3/4 de 20 + Exemple : 34 de 20 20 partage en 4 parts : chaque part vaut 5.Je prends 3 parts : 15. - La methode20 / 4 = 55 x 3 = 15Le denominateur partage.Le numerateur dit combien prendre. - A retenirPour trouver 3/4 d'une quantite : je divise par 4, puis je multiplie par 3. + La méthode20 ÷ 4 = 55 x 3 = 15Le dénominateur partage.Le numérateur dit combien prendre. + À retenirPour trouver 34 d'une quantité : je divise par 4, puis je multiplie par 3. diff --git a/backend/app/main.py b/backend/app/main.py index d2d1829..4fbd5f2 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -19,12 +19,14 @@ from .auth import ( ) from .curriculum import QUESTIONS from .program_content import ( + build_program_tree, decode_asset_token, get_content_status, get_lesson, list_lessons_for_grade, normalize_grade, render_svg_section, + update_program_review, ) from .services import ( build_llm_reply, @@ -306,6 +308,26 @@ def get_program_status( return get_content_status() +@app.get("/admin/program/tree") +def get_admin_program_tree( + current_user: models.User = Depends(require_roles("teacher", "maintenance")), +): + return build_program_tree() + + +@app.put("/admin/program/review") +def put_admin_program_review( + payload: schemas.ProgramReviewRequest, + current_user: models.User = Depends(require_roles("teacher", "maintenance")), +): + return update_program_review( + payload.node_key, + payload.status, + payload.comment, + current_user.username, + ) + + @app.get("/program/assets/{asset_token}") def get_program_asset( asset_token: str, diff --git a/backend/app/program_content.py b/backend/app/program_content.py index ee2301c..8539475 100644 --- a/backend/app/program_content.py +++ b/backend/app/program_content.py @@ -1,7 +1,9 @@ import base64 import html +import json import os import re +from datetime import datetime from functools import lru_cache from pathlib import Path from urllib.parse import quote @@ -26,6 +28,7 @@ def default_content_root() -> Path: CONTENT_ROOT = Path(os.getenv("PROGRAM_CONTENT_ROOT", default_content_root())).resolve() LESSON_BACKGROUND = "#f8fafc" +REVIEW_STATE_PATH = Path(os.getenv("PROGRAM_REVIEW_STATE_PATH", CONTENT_ROOT / ".program_review_state.json")) GRADE_ALIASES = { "CM1": "cm1", @@ -90,19 +93,31 @@ def find_section_context_path(svg_path: Path, asset_number: int, section_number: return next((candidate for candidate in candidates if candidate.exists()), None) +def svg_attr(attrs: str, name: str, default: float | None = None) -> float | None: + match = re.search(rf'\b{name}="(?P[-\d.]+)"', attrs) + if match: + return float(match.group("value")) + return default + + def extract_svg_sections(svg_path: Path, asset_number: int | None = None) -> list[dict]: text = svg_path.read_text(encoding="utf-8", errors="ignore") sections: list[dict] = [] pattern = re.compile( r'[-\d.]+)\s+(?P[-\d.]+)\)">\s*' - r'[-\d.]+)"\s+height="(?P[-\d.]+)"[^>]*>' + r'[^>]*)/?>' r'(?P.*?)', re.DOTALL, ) for match in pattern.finditer(text): - width = float(match.group("w")) - height = float(match.group("h")) - if width < 250 or height < 120: + attrs = match.group("attrs") + rect_x = svg_attr(attrs, "x", 0) + rect_y = svg_attr(attrs, "y", 0) + width = svg_attr(attrs, "width") + height = svg_attr(attrs, "height") + if rect_x != 0 or rect_y != 0 or width is None or height is None: + continue + if width < 250 or height < 100: continue title_match = re.search(r']*>(?P.*?)</text>', match.group("body"), re.DOTALL) raw_title = re.sub(r"<[^>]+>", "", title_match.group("title") if title_match else "") @@ -261,3 +276,105 @@ def get_content_status() -> dict: def get_lesson(lesson_id: str) -> dict | None: return next((lesson for lesson in list_lessons() if lesson["id"] == lesson_id), None) + + +def load_review_state() -> dict: + if not REVIEW_STATE_PATH.exists(): + return {} + try: + return json.loads(REVIEW_STATE_PATH.read_text(encoding="utf-8")) + except json.JSONDecodeError: + return {} + + +def save_review_state(state: dict) -> None: + REVIEW_STATE_PATH.parent.mkdir(parents=True, exist_ok=True) + REVIEW_STATE_PATH.write_text( + json.dumps(state, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", + ) + + +def collect_lesson_status(lesson: dict) -> dict: + lesson_dir = CONTENT_ROOT / lesson["id"] + return { + "micro_fiches": len([path for path in lesson_dir.glob("*.md") if path.name.startswith(tuple("0123456789"))]), + "lesson_svg": len(lesson.get("assets") or []), + "cards": sum(len(asset.get("sections") or []) for asset in lesson.get("assets") or []), + "contexts": len(list((lesson_dir / "card_contexts").rglob("Fiche*Card*.md"))), + "text_exercises": len(list((lesson_dir / "exercices").rglob("exercices.md"))), + "exercise_svg": len(list((lesson_dir / "exercices_svg").glob("*.svg"))), + "validations": sorted(path.stem for path in lesson_dir.glob("VALIDATION_PHASE_*.md")), + } + + +def append_tree_child(parent: dict, key: str, label: str, node_type: str, path: str = "") -> dict: + children = parent.setdefault("children", []) + for child in children: + if child["key"] == key: + return child + child = {"key": key, "label": label, "type": node_type, "path": path, "children": []} + children.append(child) + return child + + +def build_program_tree() -> dict: + reviews = load_review_state() + root = { + "key": "program", + "label": "Programme", + "type": "root", + "path": "", + "children": [], + "review": reviews.get("program", {}), + } + for lesson in list_lessons(): + parts = lesson["id"].split("/") + cycle, subject, grade = parts[0], parts[1], parts[2] + theme_parts = parts[3:-1] + lesson_slug = parts[-1] + + cycle_node = append_tree_child(root, cycle, title_from_slug(cycle), "cycle", cycle) + grade_key = f"{cycle}/{grade}" + grade_node = append_tree_child(cycle_node, grade_key, grade.upper(), "grade", grade_key) + subject_key = f"{grade_key}/{subject}" + subject_node = append_tree_child(grade_node, subject_key, title_from_slug(subject), "subject", subject_key) + parent = subject_node + current_path = f"{cycle}/{subject}/{grade}" + for theme_slug in theme_parts: + current_path = f"{current_path}/{theme_slug}" + parent = append_tree_child(parent, current_path, title_from_slug(theme_slug), "theme", current_path) + + lesson_node = append_tree_child(parent, lesson["id"], lesson["title"], "lesson", lesson["id"]) + lesson_node["status"] = collect_lesson_status(lesson) + lesson_node["review"] = reviews.get(lesson["id"], {}) + lesson_node["assets"] = lesson.get("assets") or [] + for asset in lesson.get("assets") or []: + asset_key = asset["path"] + asset_node = append_tree_child(lesson_node, asset_key, asset["title"], "fiche", asset_key) + asset_node["url"] = asset.get("url") + asset_node["review"] = reviews.get(asset_key, {}) + for section in asset.get("sections") or []: + section_key = f"{asset_key}#{section.get('context_key') or section.get('index')}" + section_node = append_tree_child( + asset_node, + section_key, + section.get("title") or section_key, + "card", + section_key, + ) + section_node["url"] = section.get("url") + section_node["review"] = reviews.get(section_key, {}) + return root + + +def update_program_review(node_key: str, status: str, comment: str, reviewer: str) -> dict: + state = load_review_state() + state[node_key] = { + "status": status, + "comment": comment, + "reviewer": reviewer, + "updated_at": datetime.utcnow().isoformat(timespec="seconds") + "Z", + } + save_review_state(state) + return state[node_key] diff --git a/backend/app/schemas.py b/backend/app/schemas.py index e5b08ba..67e41c4 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -130,6 +130,12 @@ class ProgramLessonListResponse(BaseModel): lessons: List[ProgramLesson] +class ProgramReviewRequest(BaseModel): + node_key: str = Field(..., min_length=1) + status: str = "needs_changes" + comment: str = "" + + class StudentProgramAssignRequest(BaseModel): lesson_id: str = Field(..., min_length=1) diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/01_lire_ecrire_fraction_simple.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/01_lire_ecrire_fraction_simple.md new file mode 100644 index 0000000..39b15ae --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/01_lire_ecrire_fraction_simple.md @@ -0,0 +1,47 @@ +# 01 - Lire et ecrire une fraction simple + +## Objectif eleve + +Lire, dire et ecrire une fraction simple en comprenant le role du numerateur et du denominateur. + +## Message central + +Dans une fraction, le denominateur dit en combien de parts egales on partage l'unite. Le numerateur dit combien de parts on prend. + +Exemple : `3/4` se lit `trois quarts`. L'unite est partagee en `4` parts egales, on en prend `3`. + +## Contenu de cours + +- Une fraction s'ecrit avec deux nombres separes par une barre. +- Le nombre du bas est le denominateur. +- Le nombre du haut est le numerateur. +- Les parts doivent etre egales pour que la fraction soit correcte. + +## Exemples resolus + +| Fraction | Lecture | Sens | +| --- | --- | --- | +| `1/2` | un demi | 1 part sur 2 parts egales | +| `3/4` | trois quarts | 3 parts sur 4 parts egales | +| `5/8` | cinq huitiemes | 5 parts sur 8 parts egales | + +## Piste visuelle + +Une fiche avec : + +- une fraction grand format `3/4` ; +- une etiquette `numerateur : parts prises` ; +- une etiquette `denominateur : parts egales dans l'unite` ; +- un rectangle partage en quatre parts, dont trois coloriees. + +## Contexte dynamique par card plus tard + +Le modele devra toujours rappeler quelle est l'unite avant d'expliquer le numerateur et le denominateur. + +## Variante exercice plus tard + +Demander : + +- Lis `2/5`. +- Ecris en fraction : `quatre sixiemes`. +- Dans `7/10`, quel est le denominateur ? diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/02_representer_fraction_partage.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/02_representer_fraction_partage.md new file mode 100644 index 0000000..5b975df --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/02_representer_fraction_partage.md @@ -0,0 +1,48 @@ +# 02 - Representer une fraction comme partage + +## Objectif eleve + +Representer une fraction en partageant une unite en parts egales. + +## Message central + +Pour representer une fraction, on partage d'abord l'unite en parts egales, puis on colorie le nombre de parts demande. + +Exemple : pour `2/3`, je partage l'unite en `3` parts egales et j'en colorie `2`. + +## Contenu de cours + +- L'unite peut etre une bande, un disque, un carre ou une collection. +- Les parts doivent avoir la meme taille. +- Le denominateur indique le nombre total de parts egales. +- Le numerateur indique le nombre de parts prises. + +## Exemples resolus + +| Fraction | Representation attendue | +| --- | --- | +| `1/4` | 1 part coloriee sur 4 parts egales | +| `3/5` | 3 parts coloriees sur 5 parts egales | +| `6/10` | 6 parts coloriees sur 10 parts egales | + +## Piste visuelle + +Une fiche avec trois representations cote a cote : + +- bande partagee ; +- disque partage ; +- collection d'objets. + +Chaque representation montre la meme idee : parts egales et parts prises. + +## Contexte dynamique par card plus tard + +La card doit expliciter : `je choisis l'unite`, `je partage en parts egales`, `je prends les parts`. + +## Variante exercice plus tard + +Proposer une figure partagee et demander : + +- Quelle fraction est coloriee ? +- Colorie `3/8` de la bande. +- La representation est-elle correcte si les parts ne sont pas egales ? diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/03_fraction_sur_demi_droite_graduee.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/03_fraction_sur_demi_droite_graduee.md new file mode 100644 index 0000000..277f4ca --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/03_fraction_sur_demi_droite_graduee.md @@ -0,0 +1,40 @@ +# 03 - Placer une fraction sur une demi-droite graduee + +## Objectif eleve + +Lire et placer une fraction sur une demi-droite graduee. + +## Message central + +Sur une demi-droite graduee, l'intervalle entre `0` et `1` represente une unite. Pour placer `3/4`, on partage cette unite en `4` parts egales et on avance de `3` parts. + +## Contenu de cours + +- On repere d'abord les entiers `0`, `1`, `2`, etc. +- Chaque unite doit etre partagee en parts egales. +- Le denominateur indique le nombre de parts dans chaque unite. +- Le numerateur indique le nombre de parts depuis `0`, ou depuis le dernier entier si la fraction est superieure a `1`. + +## Exemples resolus + +| Fraction | Placement | +| --- | --- | +| `1/2` | au milieu entre `0` et `1` | +| `3/4` | troisieme graduation si l'unite est partagee en 4 | +| `5/4` | une unite et un quart, donc juste apres `1` | + +## Piste visuelle + +Une demi-droite de `0` a `2`, avec chaque unite partagee en quarts. Les points `1/4`, `3/4` et `5/4` sont marques. + +## Contexte dynamique par card plus tard + +La card doit commencer par verifier la taille de l'unite et le nombre de graduations par unite. + +## Variante exercice plus tard + +Demander : + +- Place `2/3` sur une demi-droite de `0` a `1`. +- Lis la fraction indiquee par le point. +- Explique pourquoi `5/4` est apres `1`. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/04_fraction_superieure_a_un.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/04_fraction_superieure_a_un.md new file mode 100644 index 0000000..58669b9 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/04_fraction_superieure_a_un.md @@ -0,0 +1,41 @@ +# 04 - Comprendre une fraction superieure a 1 + +## Objectif eleve + +Comprendre, lire et representer une fraction superieure a `1`. + +## Message central + +Une fraction peut etre plus grande que `1` quand le numerateur est plus grand que le denominateur. + +Exemple : `7/4`, c'est `4/4 + 3/4`, donc `1 + 3/4`. + +## Contenu de cours + +- `4/4` represente une unite entiere. +- Si on a plus de parts que dans une unite, il faut utiliser plusieurs unites. +- Une fraction superieure a `1` peut se decomposer en partie entiere et fraction restante. + +## Exemples resolus + +| Fraction | Decomposition | Sens | +| --- | --- | --- | +| `5/4` | `4/4 + 1/4` | `1 + 1/4` | +| `7/3` | `6/3 + 1/3` | `2 + 1/3` | +| `9/2` | `8/2 + 1/2` | `4 + 1/2` | + +## Piste visuelle + +Deux bandes-unites partagees en quarts. Pour `7/4`, la premiere bande est complete et la seconde a `3` quarts colories. + +## Contexte dynamique par card plus tard + +Le modele devra faire apparaitre l'unite complete avant la partie restante. + +## Variante exercice plus tard + +Demander : + +- Represente `6/5`. +- Complete : `9/4 = 8/4 + ...`. +- Encercle les fractions superieures a `1` : `2/5`, `5/5`, `7/5`. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/05_comparer_fractions_simples.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/05_comparer_fractions_simples.md new file mode 100644 index 0000000..0942452 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/05_comparer_fractions_simples.md @@ -0,0 +1,42 @@ +# 05 - Comparer des fractions simples + +## Objectif eleve + +Comparer des fractions simples en s'appuyant sur leur representation et sur le role du denominateur. + +## Message central + +Pour comparer deux fractions, il faut regarder l'unite et les parts. Quand le denominateur est le meme, la fraction qui a le plus grand numerateur est la plus grande. + +Exemple : `3/8 > 2/8`, car on prend plus de parts de meme taille. + +## Contenu de cours + +- On compare toujours des fractions de la meme unite. +- A denominateur egal, les parts ont la meme taille. +- A numerateur egal, plus le denominateur est grand, plus les parts sont petites. +- Une representation peut aider quand les denominateurs sont differents. + +## Exemples resolus + +| Comparaison | Resultat | Pourquoi | +| --- | --- | --- | +| `3/5` et `4/5` | `3/5 < 4/5` | memes parts, on en prend moins | +| `1/2` et `1/4` | `1/2 > 1/4` | une moitie est plus grande qu'un quart | +| `5/6` et `6/6` | `5/6 < 6/6` | `6/6` vaut une unite | + +## Piste visuelle + +Deux bandes de meme longueur, partagees et coloriees. Une alerte visuelle indique : `meme unite obligatoire`. + +## Contexte dynamique par card plus tard + +La card doit demander : `les denominateurs sont-ils identiques ?`, puis choisir la strategie. + +## Variante exercice plus tard + +Demander : + +- Complete avec `<`, `>` ou `=` : `2/7 ... 5/7`. +- Choisis la plus grande fraction : `1/3` ou `1/6`. +- Explique avec un dessin. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/06_encadrer_fraction_entre_entiers.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/06_encadrer_fraction_entre_entiers.md new file mode 100644 index 0000000..1d80853 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/06_encadrer_fraction_entre_entiers.md @@ -0,0 +1,41 @@ +# 06 - Encadrer une fraction entre deux entiers + +## Objectif eleve + +Encadrer une fraction entre deux nombres entiers consecutifs. + +## Message central + +Pour encadrer une fraction, on cherche combien d'unites entieres elle contient. + +Exemple : `7/3` est entre `2` et `3`, car `6/3 = 2` et `9/3 = 3`. + +## Contenu de cours + +- Une unite entiere correspond a une fraction dont le numerateur est egal au denominateur : `3/3 = 1`. +- Deux unites correspondent a `6/3` si l'unite est partagee en tiers. +- On peut utiliser une demi-droite graduee pour voir entre quels entiers se trouve la fraction. + +## Exemples resolus + +| Fraction | Encadrement | Explication | +| --- | --- | --- | +| `5/4` | `1 < 5/4 < 2` | `4/4 = 1` et `8/4 = 2` | +| `8/3` | `2 < 8/3 < 3` | `6/3 = 2` et `9/3 = 3` | +| `11/5` | `2 < 11/5 < 3` | `10/5 = 2` et `15/5 = 3` | + +## Piste visuelle + +Une demi-droite de `0` a `3`, partagee selon le denominateur, avec la fraction placee entre deux entiers. + +## Contexte dynamique par card plus tard + +La card doit montrer les fractions equivalentes aux entiers voisins avant de conclure. + +## Variante exercice plus tard + +Demander : + +- Encadre `9/4` entre deux entiers. +- Place `13/6` puis complete : `... < 13/6 < ...`. +- Explique pourquoi `4/4` n'est pas entre `0` et `1`, mais egal a `1`. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/07_additionner_soustraire_fractions_simples.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/07_additionner_soustraire_fractions_simples.md new file mode 100644 index 0000000..580d46a --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/07_additionner_soustraire_fractions_simples.md @@ -0,0 +1,42 @@ +# 07 - Additionner ou soustraire des fractions simples + +## Objectif eleve + +Additionner ou soustraire des fractions de meme denominateur. + +## Message central + +Quand les denominateurs sont les memes, les parts ont la meme taille. On additionne ou on soustrait seulement les numerateurs. + +Exemple : `2/7 + 3/7 = 5/7`. + +## Contenu de cours + +- Le denominateur ne change pas si les parts ont la meme taille. +- On ajoute les parts prises pour une addition. +- On retire des parts prises pour une soustraction. +- Il faut verifier que les denominateurs sont identiques avant de calculer. + +## Exemples resolus + +| Calcul | Resultat | Pourquoi | +| --- | --- | --- | +| `1/5 + 2/5` | `3/5` | 1 part + 2 parts = 3 parts | +| `6/8 - 2/8` | `4/8` | 6 parts - 2 parts = 4 parts | +| `3/4 + 2/4` | `5/4` | le resultat depasse 1 | + +## Piste visuelle + +Une bande partagee en parts egales. Les parts ajoutees ont deux couleurs, puis le total est affiche sous forme de fraction. + +## Contexte dynamique par card plus tard + +La card doit verifier d'abord : `les denominateurs sont-ils les memes ?` + +## Variante exercice plus tard + +Demander : + +- Calcule `3/10 + 4/10`. +- Calcule `7/9 - 2/9`. +- Represente `3/4 + 2/4` avec deux bandes si besoin. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/08_fraction_d_une_quantite.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/08_fraction_d_une_quantite.md new file mode 100644 index 0000000..d5d0a39 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/08_fraction_d_une_quantite.md @@ -0,0 +1,42 @@ +# 08 - Determiner une fraction d'une quantite + +## Objectif eleve + +Calculer une fraction simple d'une quantite. + +## Message central + +Pour trouver une fraction d'une quantite, on partage d'abord la quantite selon le denominateur, puis on prend le nombre de parts indique par le numerateur. + +Exemple : `3/4` de `20`, c'est `20 ÷ 4 = 5`, puis `5 × 3 = 15`. + +## Contenu de cours + +- Le denominateur indique en combien de groupes egaux on partage. +- Le numerateur indique combien de groupes on prend. +- Il est souvent plus simple de calculer d'abord une part. +- On peut representer la quantite par une collection ou une barre. + +## Exemples resolus + +| Situation | Calcul | Resultat | +| --- | --- | --- | +| `1/2` de `18` | `18 ÷ 2` | `9` | +| `3/4` de `20` | `20 ÷ 4 = 5`, puis `5 × 3` | `15` | +| `2/5` de `30` | `30 ÷ 5 = 6`, puis `6 × 2` | `12` | + +## Piste visuelle + +Une barre representant `20`, partagee en `4` parts egales de `5`, puis `3` parts coloriees. + +## Contexte dynamique par card plus tard + +La card doit isoler les deux gestes : `je partage` puis `je prends`. + +## Variante exercice plus tard + +Demander : + +- Calcule `1/3` de `24`. +- Calcule `2/5` de `40`. +- Dans une classe de `28` eleves, `3/4` participent a un atelier. Combien d'eleves participent ? diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md new file mode 100644 index 0000000..e465c2a --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/README.md @@ -0,0 +1,131 @@ +# CM1 - Fractions + +Source principale : `pdf_collecteur/state/synthese_cycle3_cm1_mathematiques.md` + +Domaine : Nombres, calcul et resolution de problemes +Sous-theme : Fractions +Niveau : CM1 + +## Perimetre + +Le travail sur les fractions commence des la periode 1 et se poursuit toute l'annee. Les fractions sont abordees comme partage, mesure, nombre sur une demi-droite graduee et operateur unitaire. + +Points de cadrage : + +- fractions superieures a `1` ; +- denominateurs inferieurs ou egaux a `20`, sauf fractions decimales jusqu'aux centiemes ; +- fractions decimales preparees pour l'introduction des nombres decimaux. + +## Micro-competences prevues + +1. `01_lire_ecrire_fraction_simple.md` : lire et ecrire une fraction simple. +2. `02_representer_fraction_partage.md` : representer une fraction comme partage. +3. `03_fraction_sur_demi_droite_graduee.md` : placer et lire une fraction sur une demi-droite graduee. +4. `04_fraction_superieure_a_un.md` : comprendre et representer une fraction superieure a `1`. +5. `05_comparer_fractions_simples.md` : comparer des fractions simples avec appui visuel. +6. `06_encadrer_fraction_entre_entiers.md` : encadrer une fraction entre deux entiers. +7. `07_additionner_soustraire_fractions_simples.md` : additionner ou soustraire des fractions de meme denominateur. +8. `08_fraction_d_une_quantite.md` : determiner une fraction d'une quantite. + +Statut Phase 2A : les 8 micro-fiches Markdown sont generees et pretes pour relecture. + +## Futures sorties + +- Fiches de lecon Markdown et SVG. +- Contextes dynamiques par card : sens de la fraction, unite, numerateur, denominateur, representation. +- Exercices textuels : lecture, representation, placement, comparaison, calcul simple. +- SVG exercices : bandes, disques, droites graduees, collections. +- Kit adaptatif conseille : les erreurs de choix d'unite et de denominateur sont frequentes. + +## Prochaine validation + +Avant les SVG et les contextes dynamiques, relire : + +- la justesse mathematique ; +- la granularite une competence par fiche ; +- le niveau CM1 ; +- la coherence des futures pistes visuelles. + +## SVG generes + +Phase 3A : 8 SVG de lecon generes dans `svg/`. + +- `svg/01_lire_ecrire_fraction_simple.svg` +- `svg/02_representer_fraction_partage.svg` +- `svg/03_fraction_sur_demi_droite_graduee.svg` +- `svg/04_fraction_superieure_a_un.svg` +- `svg/05_comparer_fractions_simples.svg` +- `svg/06_encadrer_fraction_entre_entiers.svg` +- `svg/07_additionner_soustraire_fractions_simples.svg` +- `svg/08_fraction_d_une_quantite.svg` + +Statut : brouillons visuels propres, XML valides, a relire avant validation finale. + +## Validation SVG + +Phase 3B : les 8 SVG de lecon sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_3B.md` + +## Contextes dynamiques generes + +Phase 4A : 24 contextes dynamiques par card generes dans `card_contexts/`. + +Organisation : + +- `card_contexts/01_lire_ecrire_fraction_simple/` : 4 cards. +- `card_contexts/02_representer_fraction_partage/` : 4 cards. +- `card_contexts/03_fraction_sur_demi_droite_graduee/` : 2 cards. +- `card_contexts/04_fraction_superieure_a_un/` : 3 cards. +- `card_contexts/05_comparer_fractions_simples/` : 3 cards. +- `card_contexts/06_encadrer_fraction_entre_entiers/` : 2 cards. +- `card_contexts/07_additionner_soustraire_fractions_simples/` : 3 cards. +- `card_contexts/08_fraction_d_une_quantite/` : 3 cards. + +Statut : contextes initiaux prets pour relecture Phase 4B. + +## Validation contextes dynamiques + +Phase 4B : les 24 contextes dynamiques par card sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_4B.md` + +## Exercices textuels generes + +Phase 5A : 8 fichiers d'exercices textuels generes dans `exercices/`, soit `32` exercices au total. + +Organisation : + +- `exercices/01_lire_ecrire_fraction_simple/exercices.md` +- `exercices/02_representer_fraction_partage/exercices.md` +- `exercices/03_fraction_sur_demi_droite_graduee/exercices.md` +- `exercices/04_fraction_superieure_a_un/exercices.md` +- `exercices/05_comparer_fractions_simples/exercices.md` +- `exercices/06_encadrer_fraction_entre_entiers/exercices.md` +- `exercices/07_additionner_soustraire_fractions_simples/exercices.md` +- `exercices/08_fraction_d_une_quantite/exercices.md` + +Statut : exercices initiaux prets pour relecture Phase 5B. + +## Validation exercices textuels + +Phase 5B : les 8 fichiers d'exercices textuels sont valides par l'utilisateur le `2026-05-05`. + +Trace : `VALIDATION_PHASE_5B.md` + +## SVG exercices generes + +Phase 6A : 8 planches SVG d'exercices generees dans `exercices_svg/`. + +Organisation : + +- `exercices_svg/01_lire_ecrire_fraction_simple.svg` +- `exercices_svg/02_representer_fraction_partage.svg` +- `exercices_svg/03_fraction_sur_demi_droite_graduee.svg` +- `exercices_svg/04_fraction_superieure_a_un.svg` +- `exercices_svg/05_comparer_fractions_simples.svg` +- `exercices_svg/06_encadrer_fraction_entre_entiers.svg` +- `exercices_svg/07_additionner_soustraire_fractions_simples.svg` +- `exercices_svg/08_fraction_d_une_quantite.svg` + +Statut : SVG exercices initiaux prets pour relecture Phase 6B. diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_2B.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_2B.md new file mode 100644 index 0000000..e86fcd9 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_2B.md @@ -0,0 +1,32 @@ +# Validation Phase 2B - CM1 mathematiques - Fractions + +Date : `2026-05-03` + +## Decision + +Les 8 micro-fiches Markdown du sous-theme `01B_fractions` sont validees. + +La production peut passer a la phase suivante : SVG de lecon, puis contextes dynamiques par card. + +## Fiches validees + +1. `01_lire_ecrire_fraction_simple.md` +2. `02_representer_fraction_partage.md` +3. `03_fraction_sur_demi_droite_graduee.md` +4. `04_fraction_superieure_a_un.md` +5. `05_comparer_fractions_simples.md` +6. `06_encadrer_fraction_entre_entiers.md` +7. `07_additionner_soustraire_fractions_simples.md` +8. `08_fraction_d_une_quantite.md` + +## Regles pour la Phase 3A + +- Une fiche SVG = une competence. +- Le SVG doit rester lisible pour un eleve de CM1. +- Chaque visuel doit rendre explicite l'unite, les parts egales, le numerateur et le denominateur quand c'est pertinent. +- Ne pas integrer de professeur dans la fiche. +- Preparer mentalement les futures variantes exercice sans les produire dans cette phase. + +## Prochain lot + +`3A - SVG lecon CM1 mathematiques / 01B_fractions` diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md new file mode 100644 index 0000000..2f1a54d --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_3B.md @@ -0,0 +1,28 @@ +# Validation Phase 3B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 8 SVG de lecon du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : contextes dynamiques par card. + +## SVG valides + +1. `svg/01_lire_ecrire_fraction_simple.svg` +2. `svg/02_representer_fraction_partage.svg` +3. `svg/03_fraction_sur_demi_droite_graduee.svg` +4. `svg/04_fraction_superieure_a_un.svg` +5. `svg/05_comparer_fractions_simples.svg` +6. `svg/06_encadrer_fraction_entre_entiers.svg` +7. `svg/07_additionner_soustraire_fractions_simples.svg` +8. `svg/08_fraction_d_une_quantite.svg` + +## Regles pour la Phase 4A + +- Un contexte doit correspondre a une card visible. +- Professeur TOP doit parler uniquement des nombres et objets affiches sur la card. +- Le contexte doit contenir une consigne orale courte, des limites et un critere de passage. +- Les mots `unite`, `parts egales`, `numerateur` et `denominateur` doivent etre utilises quand ils sont pertinents. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md new file mode 100644 index 0000000..d86e0aa --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_4B.md @@ -0,0 +1,28 @@ +# Validation Phase 4B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 24 contextes dynamiques par card du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : exercices textuels. + +## Contextes valides + +- `card_contexts/01_lire_ecrire_fraction_simple/` : 4 cards. +- `card_contexts/02_representer_fraction_partage/` : 4 cards. +- `card_contexts/03_fraction_sur_demi_droite_graduee/` : 2 cards. +- `card_contexts/04_fraction_superieure_a_un/` : 3 cards. +- `card_contexts/05_comparer_fractions_simples/` : 3 cards. +- `card_contexts/06_encadrer_fraction_entre_entiers/` : 2 cards. +- `card_contexts/07_additionner_soustraire_fractions_simples/` : 3 cards. +- `card_contexts/08_fraction_d_une_quantite/` : 3 cards. + +## Regles pour la Phase 5A + +- Produire des exercices textuels progressifs, sans SVG dans cette phase. +- Garder le niveau CM1 et les denominateurs simples. +- Donner les reponses attendues pour permettre une future correction automatique. +- Noter les erreurs observables utiles a Professeur TOP. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md new file mode 100644 index 0000000..41b05dc --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/VALIDATION_PHASE_5B.md @@ -0,0 +1,28 @@ +# Validation Phase 5B - CM1 mathematiques - Fractions + +Date : `2026-05-05` + +## Decision + +Les 8 fichiers d'exercices textuels du sous-theme `01B_fractions` sont valides par l'utilisateur. + +La production peut passer a la phase suivante : SVG des exercices. + +## Exercices valides + +- `exercices/01_lire_ecrire_fraction_simple/exercices.md` +- `exercices/02_representer_fraction_partage/exercices.md` +- `exercices/03_fraction_sur_demi_droite_graduee/exercices.md` +- `exercices/04_fraction_superieure_a_un/exercices.md` +- `exercices/05_comparer_fractions_simples/exercices.md` +- `exercices/06_encadrer_fraction_entre_entiers/exercices.md` +- `exercices/07_additionner_soustraire_fractions_simples/exercices.md` +- `exercices/08_fraction_d_une_quantite/exercices.md` + +## Regles pour la Phase 6A + +- Produire une planche SVG d'exercices par micro-competence. +- Ne pas integrer Professeur TOP dans les planches. +- Garder des zones de reponse visibles mais non corrigees. +- Placer les corriges uniquement dans les fichiers Markdown, pas dans les SVG d'exercice. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md new file mode 100644 index 0000000..8eab0ee --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card1.md @@ -0,0 +1,23 @@ +# Fiche 1 - Card 1 - La fraction + +Cette card presente la fraction `3/4` sous forme verticale. + +Idee a enseigner : +- `3/4` s'ecrit avec un nombre en haut, une barre, puis un nombre en bas. +- Le nombre du haut s'appelle le numerateur. +- Le nombre du bas s'appelle le denominateur. + +Nombres autorises sur cette card : +- `3/4` uniquement. + +Consigne orale courte pour Professeur TOP : +Montre que la fraction affichee est `3/4`. Explique que le `3` est en haut et le `4` en bas. Demande a l'eleve de montrer ou de dire quel nombre est en haut. + +Limites : +- Ne parle pas encore du rectangle partage. +- Ne donne pas d'autre fraction. +- Ne lance pas encore la lecture `trois quarts` sauf si l'eleve la propose. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il reconnait que `3` est en haut et `4` en bas, ou s'il dit qu'il a compris cette ecriture. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md new file mode 100644 index 0000000..35ad8ca --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card2.md @@ -0,0 +1,25 @@ +# Fiche 1 - Card 2 - Ce que ca dit + +Cette card explique le sens de `3/4`. + +Idee a enseigner : +- Le `3` indique les parts prises. +- Le `4` indique les parts egales dans l'unite. +- `3/4` se lit `trois quarts`. + +Nombres et vocabulaire autorises : +- `3 parts prises` ; +- `4 parts egales` ; +- `trois quarts`. + +Consigne orale courte pour Professeur TOP : +Explique que `3/4` veut dire `3 parts prises sur 4 parts egales`. Fais lire la fraction `trois quarts`, puis demande a l'eleve de repeter. + +Limites : +- Ne change pas de fraction. +- Ne parle pas encore de fractions plus grandes que `1`. +- Ne donne pas de calcul. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il lit `3/4` comme `trois quarts` ou s'il explique que le `3` indique les parts prises. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md new file mode 100644 index 0000000..f9b4f21 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card3.md @@ -0,0 +1,20 @@ +# Fiche 1 - Card 3 - L'unite partagee + +Cette card montre une unite partagee en `4` parts egales, dont `3` sont coloriees. + +Idee a enseigner : +- L'unite est le rectangle entier. +- Le rectangle est coupe en `4` parts egales. +- `3` parts sont coloriees : cela represente `3/4`. + +Consigne orale courte pour Professeur TOP : +Commence par nommer l'unite : le rectangle entier. Dis qu'il est partage en `4` parts egales et que `3` parts sont coloriees. Demande a l'eleve combien de parts sont coloriees. + +Limites : +- Ne donne pas d'autre dessin. +- Ne compare pas avec une autre fraction. +- Ne parle pas des fractions decimales. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond `3`, ou s'il dit que `3` parts sur `4` sont coloriees. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md new file mode 100644 index 0000000..ae9f9b7 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/01_lire_ecrire_fraction_simple/Fiche1Card4.md @@ -0,0 +1,19 @@ +# Fiche 1 - Card 4 - A retenir + +Cette card formule la regle a memoriser. + +Idee a enseigner : +- Le denominateur indique le partage. +- Le numerateur indique les parts prises. +- Il faut toujours penser a l'unite avant de lire la fraction. + +Consigne orale courte pour Professeur TOP : +Resume en une phrase : le denominateur dit en combien de parts egales on partage l'unite, le numerateur dit combien de parts on prend. Demande a l'eleve de redire le role du denominateur. + +Limites : +- Ne commence pas une nouvelle fiche. +- Ne donne pas d'exercice long. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le denominateur indique le partage, ou s'il dit clairement qu'il a compris. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md new file mode 100644 index 0000000..d4f11ae --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card1.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 1 - Bande : 3/5 + +Cette card represente `3/5` avec une bande. + +Idee a enseigner : +- L'unite est la bande entiere. +- Elle est partagee en `5` parts egales. +- `3` parts sont coloriees. + +Consigne orale courte pour Professeur TOP : +Dis que la bande entiere est l'unite. Explique qu'elle est coupee en `5` parts egales et que `3` parts sont coloriees. Demande quelle fraction est representee. + +Limites : +- Ne parle pas encore du disque ni de la collection. +- Ne change pas le nombre de parts. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond `3/5` ou s'il dit `3 parts sur 5`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md new file mode 100644 index 0000000..e95d2be --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card2.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 2 - Disque : 1/4 + +Cette card represente `1/4` avec un disque. + +Idee a enseigner : +- L'unite est le disque entier. +- Le disque est partage en `4` parts egales. +- Une seule part est coloriee. + +Consigne orale courte pour Professeur TOP : +Nomme l'unite : le disque entier. Fais compter les `4` parts egales, puis la part coloriee. Demande a l'eleve de lire la fraction `1/4`. + +Limites : +- Ne parle pas de pourcentage. +- Ne compare pas avec la bande precedente sauf pour rappeler que l'unite peut changer de forme. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il lit `1/4` comme `un quart` ou s'il reconnait une part sur quatre. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md new file mode 100644 index 0000000..61a69ef --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card3.md @@ -0,0 +1,20 @@ +# Fiche 2 - Card 3 - Collection : 6/10 + +Cette card represente `6/10` avec une collection d'objets. + +Idee a enseigner : +- L'unite est toute la collection de `10` objets. +- `6` objets sont choisis. +- La fraction representee est `6/10`. + +Consigne orale courte pour Professeur TOP : +Explique que l'unite n'est pas une forme ici, mais toute la collection. Fais compter mentalement `10` objets au total, puis `6` objets choisis. Demande quelle fraction cela donne. + +Limites : +- Ne simplifie pas `6/10`. +- Ne transforme pas en nombre decimal. +- Ne change pas la collection. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit `6/10` ou `6 objets sur 10`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md new file mode 100644 index 0000000..3a57958 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/02_representer_fraction_partage/Fiche2Card4.md @@ -0,0 +1,19 @@ +# Fiche 2 - Card 4 - A retenir + +Cette card rappelle la condition essentielle d'une representation. + +Idee a enseigner : +- Une fraction a besoin d'une unite claire. +- Les parts doivent etre egales. +- On partage d'abord, puis on prend ou on colorie. + +Consigne orale courte pour Professeur TOP : +Resume les trois gestes : je choisis l'unite, je partage en parts egales, je prends les parts demandees. Demande a l'eleve lequel de ces gestes vient en premier. + +Limites : +- Ne donne pas de nouvel exemple numerique. +- Ne commence pas encore les exercices. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut d'abord choisir l'unite ou partager en parts egales. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md new file mode 100644 index 0000000..a8ee641 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card1.md @@ -0,0 +1,20 @@ +# Fiche 3 - Card 1 - Exemple : placer 5/4 + +Cette card montre la fraction `5/4` sur une demi-droite graduee de `0` a `2`. + +Idee a enseigner : +- L'intervalle de `0` a `1` est une unite. +- Chaque unite est partagee en `4` parts egales. +- `5/4` correspond a `5` quarts depuis `0`, donc le point est juste apres `1`. + +Consigne orale courte pour Professeur TOP : +Commence par faire reperer l'unite entre `0` et `1`. Dis que le denominateur `4` impose `4` parts egales par unite. Compte ensuite `5` quarts depuis `0` et montre que `5/4` est juste apres `1`. + +Limites : +- Ne place pas d'autre fraction. +- Ne parle pas de nombres decimaux. +- Ne saute pas l'etape de l'unite. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il explique que `5/4` est apres `1`, ou s'il dit que chaque unite est partagee en `4`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md new file mode 100644 index 0000000..c62b965 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/03_fraction_sur_demi_droite_graduee/Fiche3Card2.md @@ -0,0 +1,19 @@ +# Fiche 3 - Card 2 - A retenir + +Cette card fixe la regle pour une demi-droite graduee. + +Idee a enseigner : +- L'intervalle de `0` a `1` represente l'unite. +- On partage cette unite en parts egales selon le denominateur. +- Le numerateur indique combien de parts on avance. + +Consigne orale courte pour Professeur TOP : +Resume la methode en trois temps : je regarde l'unite, je la partage selon le denominateur, puis j'avance selon le numerateur. Demande a l'eleve ce que represente l'intervalle de `0` a `1`. + +Limites : +- Ne donne pas un nouvel exercice. +- Ne parle pas de graduations irregulieres. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que de `0` a `1`, c'est une unite. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md new file mode 100644 index 0000000..45cc8be --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card1.md @@ -0,0 +1,20 @@ +# Fiche 4 - Card 1 - Exemple : 7/4 + +Cette card represente `7/4` avec deux bandes-unites partagees en quarts. + +Idee a enseigner : +- Chaque bande entiere represente une unite. +- Une unite complete vaut `4/4`. +- Pour montrer `7/4`, on colorie `4/4`, puis encore `3/4`. + +Consigne orale courte pour Professeur TOP : +Fais d'abord apparaitre l'unite complete : `4/4`. Puis montre qu'il reste `3` quarts a colorier pour arriver a `7/4`. Demande a l'eleve combien de quarts sont colories dans la premiere bande. + +Limites : +- Ne donne pas d'autre fraction superieure a `1`. +- Ne transforme pas en nombre decimal. +- Ne parle pas encore de division posee. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que la premiere bande vaut `4/4` ou une unite. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md new file mode 100644 index 0000000..ce8f624 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card2.md @@ -0,0 +1,20 @@ +# Fiche 4 - Card 2 - Je decompose + +Cette card ecrit la decomposition de `7/4`. + +Idee a enseigner : +- `7/4 = 4/4 + 3/4`. +- Comme `4/4 = 1`, alors `7/4 = 1 + 3/4`. +- La partie entiere apparait quand une unite est complete. + +Consigne orale courte pour Professeur TOP : +Lis la decomposition lentement : `7/4`, c'est `4/4 + 3/4`, donc `1 + 3/4`. Demande a l'eleve pourquoi `4/4` vaut `1`. + +Limites : +- Ne simplifie pas davantage. +- Ne donne pas d'autre decomposition. +- Reste sur `7/4`. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `4/4` fait une unite ou s'il reconnait `1 + 3/4`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md new file mode 100644 index 0000000..d79dc4c --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/04_fraction_superieure_a_un/Fiche4Card3.md @@ -0,0 +1,19 @@ +# Fiche 4 - Card 3 - A retenir + +Cette card rappelle qu'une fraction peut depasser `1`. + +Idee a enseigner : +- Une fraction est plus grande que `1` quand il faut plus d'une unite. +- C'est souvent le cas quand le numerateur est plus grand que le denominateur. +- On utilise alors plusieurs unites. + +Consigne orale courte pour Professeur TOP : +Explique qu'une fraction peut etre plus grande que `1`. Dis que dans ce cas, une seule unite ne suffit pas. Demande a l'eleve comment on le voit avec `7/4`. + +Limites : +- Ne generalise pas a toutes les fractions impropres. +- Ne donne pas de calcul nouveau. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `7/4` depasse une unite ou qu'il faut plusieurs unites. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md new file mode 100644 index 0000000..34ec79b --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card1.md @@ -0,0 +1,19 @@ +# Fiche 5 - Card 1 - Meme denominateur + +Cette card compare `3/5` et `4/5`. + +Idee a enseigner : +- Les deux fractions ont le meme denominateur : les parts ont la meme taille. +- `4/5` a une part coloriee de plus que `3/5`. +- Donc `3/5 < 4/5`. + +Consigne orale courte pour Professeur TOP : +Commence par demander si les denominateurs sont identiques. Fais observer que les deux bandes sont partagees en `5`. Explique ensuite que `4` parts prises, c'est plus que `3` parts prises. + +Limites : +- Ne parle pas encore du cas `1/2` et `1/4`. +- Ne compare pas avec des decimaux. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `4/5` est plus grand que `3/5`, ou que les denominateurs sont les memes. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md new file mode 100644 index 0000000..55fd3ef --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card2.md @@ -0,0 +1,20 @@ +# Fiche 5 - Card 2 - Meme numerateur + +Cette card compare `1/2` et `1/4`. + +Idee a enseigner : +- Les deux fractions prennent une seule part. +- Mais une moitie est plus grande qu'un quart. +- Quand on partage la meme unite en plus de parts, chaque part est plus petite. + +Consigne orale courte pour Professeur TOP : +Explique que le numerateur est le meme : on prend `1` part. Puis montre que les parts n'ont pas la meme taille : une part sur `2` est plus grande qu'une part sur `4`. Demande quelle fraction est la plus grande. + +Limites : +- Ne transforme pas en `0,5` ou `0,25`. +- Ne donne pas d'autre comparaison. +- Rappelle que l'unite doit etre la meme. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que `1/2` est plus grand que `1/4`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md new file mode 100644 index 0000000..a0db973 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/05_comparer_fractions_simples/Fiche5Card3.md @@ -0,0 +1,19 @@ +# Fiche 5 - Card 3 - A retenir + +Cette card fixe la regle principale de comparaison. + +Idee a enseigner : +- A denominateur egal, les parts ont la meme taille. +- Le plus grand numerateur donne la plus grande fraction. +- Avant de comparer, il faut verifier l'unite. + +Consigne orale courte pour Professeur TOP : +Resume la regle : si les denominateurs sont egaux, on compare les numerateurs. Demande a l'eleve ce qu'il faut verifier avant de comparer deux fractions. + +Limites : +- Ne donne pas un long exercice. +- Ne parle pas de fractions equivalentes. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut comparer les numerateurs quand les denominateurs sont les memes. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md new file mode 100644 index 0000000..643651d --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card1.md @@ -0,0 +1,20 @@ +# Fiche 6 - Card 1 - Exemple : 7/3 + +Cette card encadre `7/3` entre `2` et `3`. + +Idee a enseigner : +- En tiers, `6/3 = 2`. +- En tiers, `9/3 = 3`. +- Comme `7/3` est entre `6/3` et `9/3`, alors `2 < 7/3 < 3`. + +Consigne orale courte pour Professeur TOP : +Commence par montrer les entiers voisins sous forme de fractions : `6/3 = 2` et `9/3 = 3`. Puis place `7/3` entre les deux. Demande a l'eleve entre quels entiers se trouve `7/3`. + +Limites : +- Ne donne pas d'autre fraction. +- Ne parle pas de division euclidienne. +- Ne saute pas les fractions equivalentes aux entiers voisins. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond que `7/3` est entre `2` et `3`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md new file mode 100644 index 0000000..5584546 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/06_encadrer_fraction_entre_entiers/Fiche6Card2.md @@ -0,0 +1,19 @@ +# Fiche 6 - Card 2 - A retenir + +Cette card rappelle la methode d'encadrement. + +Idee a enseigner : +- On compare la fraction aux fractions qui valent les entiers voisins. +- Il faut garder le meme denominateur. +- L'encadrement s'ecrit avec deux signes `<`. + +Consigne orale courte pour Professeur TOP : +Resume : pour encadrer, je cherche les entiers voisins ecrits avec le meme denominateur. Fais redire l'encadrement affiche : `2 < 7/3 < 3`. + +Limites : +- Ne lance pas un nouvel exemple. +- Ne parle pas de notation decimale. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il relit correctement `2 < 7/3 < 3` ou s'il dit qu'il faut chercher les entiers voisins. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md new file mode 100644 index 0000000..27ac3ba --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card1.md @@ -0,0 +1,20 @@ +# Fiche 7 - Card 1 - Exemple + +Cette card additionne `2/7 + 3/7`. + +Idee a enseigner : +- Les denominateurs sont les memes : les parts ont la meme taille. +- On additionne les numerateurs : `2 + 3 = 5`. +- Le denominateur reste `7`. + +Consigne orale courte pour Professeur TOP : +Fais d'abord verifier que les denominateurs sont tous les deux `7`. Explique ensuite que l'on ajoute les parts coloriees : `2` parts plus `3` parts font `5` parts, donc `5/7`. + +Limites : +- Ne change pas le denominateur. +- Ne simplifie pas la fraction. +- Ne parle pas encore de soustraction. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le resultat est `5/7` ou que le denominateur reste `7`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md new file mode 100644 index 0000000..ca63baa --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card2.md @@ -0,0 +1,19 @@ +# Fiche 7 - Card 2 - La regle + +Cette card donne la regle et un exemple de soustraction. + +Idee a enseigner : +- On garde le denominateur quand les parts ont la meme taille. +- On ajoute ou on retire seulement les numerateurs. +- Exemple affiche : `6/8 - 2/8 = 4/8`. + +Consigne orale courte pour Professeur TOP : +Dis la regle clairement : je garde le denominateur, j'ajoute ou je retire les numerateurs. Lis l'exemple `6/8 - 2/8 = 4/8`, puis demande pourquoi le `8` reste. + +Limites : +- Ne reduis pas `4/8`. +- Ne donne pas de calcul avec denominateurs differents. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le denominateur reste parce que les parts ont la meme taille. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md new file mode 100644 index 0000000..210347c --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/07_additionner_soustraire_fractions_simples/Fiche7Card3.md @@ -0,0 +1,19 @@ +# Fiche 7 - Card 3 - A retenir + +Cette card rappelle la verification indispensable avant le calcul. + +Idee a enseigner : +- Avant de calculer, on verifie les denominateurs. +- S'ils sont identiques, les parts ont la meme taille. +- On calcule alors seulement avec les numerateurs. + +Consigne orale courte pour Professeur TOP : +Demande a l'eleve quelle verification il faut faire avant d'additionner ou de soustraire des fractions. Attends l'idee : les denominateurs doivent etre les memes. + +Limites : +- Ne donne pas d'algorithme pour denominateurs differents. +- Ne propose pas d'exercice nouveau. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit qu'il faut verifier que les denominateurs sont identiques. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md new file mode 100644 index 0000000..168c85a --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card1.md @@ -0,0 +1,20 @@ +# Fiche 8 - Card 1 - Exemple : 3/4 de 20 + +Cette card montre comment trouver `3/4` de `20`. + +Idee a enseigner : +- La quantite `20` est partagee en `4` parts egales. +- Une part vaut `5`. +- On prend `3` parts, donc `15`. + +Consigne orale courte pour Professeur TOP : +Separe bien les deux gestes : d'abord je partage `20` en `4` parts, chaque part vaut `5`; ensuite je prends `3` parts, donc `15`. Demande a l'eleve combien vaut une part. + +Limites : +- Ne change pas la quantite `20`. +- Ne donne pas d'autre fraction. +- Ne presente pas de formule abstraite avant le partage. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il repond qu'une part vaut `5` ou que `3` parts valent `15`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md new file mode 100644 index 0000000..fc39802 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card2.md @@ -0,0 +1,20 @@ +# Fiche 8 - Card 2 - La methode + +Cette card formalise le calcul de `3/4` de `20`. + +Idee a enseigner : +- On divise par le denominateur : `20 / 4 = 5`. +- On multiplie par le numerateur : `5 x 3 = 15`. +- Le denominateur partage, le numerateur dit combien prendre. + +Consigne orale courte pour Professeur TOP : +Lis les deux calculs dans l'ordre : `20 / 4 = 5`, puis `5 x 3 = 15`. Demande a l'eleve quel nombre sert a partager. + +Limites : +- Ne parle pas encore de pourcentage. +- Ne donne pas de probleme texte. +- Reste sur `3/4` de `20`. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit que le `4` sert a partager ou que le resultat est `15`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md new file mode 100644 index 0000000..58acfca --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/08_fraction_d_une_quantite/Fiche8Card3.md @@ -0,0 +1,19 @@ +# Fiche 8 - Card 3 - A retenir + +Cette card rappelle la methode generale pour trouver une fraction d'une quantite. + +Idee a enseigner : +- Pour trouver `3/4` d'une quantite, on divise par `4`. +- Puis on multiplie par `3`. +- Plus generalement : je partage, puis je prends. + +Consigne orale courte pour Professeur TOP : +Resume avec les mots de la card : pour trouver `3/4` d'une quantite, je divise par `4`, puis je multiplie par `3`. Demande a l'eleve de redire les deux gestes : partager puis prendre. + +Limites : +- Ne donne pas de nouvel exemple. +- Ne parle pas de fractions plus complexes. + +Critere pour passer a la card suivante : +L'eleve peut passer a la suite s'il dit `je partage puis je prends`, ou s'il dit `diviser par 4 puis multiplier par 3`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md new file mode 100644 index 0000000..06a860f --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/card_contexts/README.md @@ -0,0 +1,16 @@ +# Contextes dynamiques - CM1 - Fractions + +Ce dossier contient les textes pedagogiques associes aux cards detectees dans les SVG de lecon du sous-theme `01B_fractions`. + +Convention de nommage attendue par l'application : + +- `card_contexts/<nom_du_svg>/Fiche{numero_fiche}Card{numero_card}.md` + +Objectif : + +- guider Professeur TOP pour expliquer uniquement la card affichee ; +- eviter que le modele reparte sur toute la fiche ou sur une autre notion ; +- fournir un critere simple pour avancer a la card suivante. + +Statut Phase 4A : contextes initiaux generes, a relire avant exercices. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md new file mode 100644 index 0000000..fa92eca --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/01_lire_ecrire_fraction_simple/exercices.md @@ -0,0 +1,64 @@ +# Exercices - Lire et ecrire une fraction simple + +## Intention + +Verifier que l'eleve sait lire une fraction, reconnaitre numerateur et denominateur, puis ecrire une fraction dictee. + +## Exercice 1 - Lire les fractions + +Lis les fractions suivantes : + +- `1/2` +- `3/4` +- `5/8` +- `7/10` + +Reponses attendues : + +- `un demi` +- `trois quarts` +- `cinq huitiemes` +- `sept dixiemes` + +## Exercice 2 - Nommer les nombres + +Pour chaque fraction, indique le numerateur et le denominateur : + +- `2/5` +- `4/9` +- `6/7` + +Reponses attendues : + +- `2/5` : numerateur `2`, denominateur `5` +- `4/9` : numerateur `4`, denominateur `9` +- `6/7` : numerateur `6`, denominateur `7` + +## Exercice 3 - Ecrire en chiffres + +Ecris en fraction : + +- deux tiers +- trois cinquiemes +- neuf dixiemes + +Reponses attendues : + +- `2/3` +- `3/5` +- `9/10` + +## Exercice 4 - Expliquer le sens + +Explique ce que veut dire `3/4` avec les mots `unite`, `parts egales` et `parts prises`. + +Reponse attendue : + +- L'unite est partagee en `4` parts egales et on prend `3` parts. + +## Observations pour Professeur TOP + +- Si l'eleve inverse haut et bas, reprendre numerateur puis denominateur avec `3/4`. +- Si l'eleve lit chiffre par chiffre, refaire lire avec les mots usuels : demi, tiers, quarts. +- Si l'eleve oublie l'unite, revenir a la card `L'unite partagee`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md new file mode 100644 index 0000000..c018cd8 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/02_representer_fraction_partage/exercices.md @@ -0,0 +1,56 @@ +# Exercices - Representer une fraction comme partage + +## Intention + +Verifier que l'eleve sait choisir une unite, la partager en parts egales, puis prendre ou colorier les parts demandees. + +## Exercice 1 - Dire la fraction coloriee + +Imagine une bande partagee en parts egales. Quelle fraction est coloriee ? + +- `2` parts coloriees sur `3` +- `4` parts coloriees sur `5` +- `6` parts coloriees sur `10` + +Reponses attendues : + +- `2/3` +- `4/5` +- `6/10` + +## Exercice 2 - Decrire le dessin a faire + +Dis comment representer chaque fraction avec une bande : + +- `1/4` +- `3/6` +- `5/8` + +Reponses attendues : + +- Partager l'unite en `4` parts egales et colorier `1` part. +- Partager l'unite en `6` parts egales et colorier `3` parts. +- Partager l'unite en `8` parts egales et colorier `5` parts. + +## Exercice 3 - Verifier les parts egales + +Une bande est coupee en `4` morceaux, mais les morceaux n'ont pas la meme taille. Peut-on dire que `2` morceaux colories representent forcement `2/4` ? + +Reponse attendue : + +- Non, les parts doivent etre egales. + +## Exercice 4 - Collection + +Dans une collection de `12` jetons, `5` jetons sont rouges. Quelle fraction de la collection est rouge ? + +Reponse attendue : + +- `5/12` + +## Observations pour Professeur TOP + +- Si l'eleve donne seulement le nombre de parts coloriees, faire chercher le total. +- Si l'eleve ne nomme pas l'unite, demander : `quelle est toute la quantite ?` +- Si les parts egales sont oubliees, revenir a la regle : une fraction exige des parts egales. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md new file mode 100644 index 0000000..fd1dff1 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/03_fraction_sur_demi_droite_graduee/exercices.md @@ -0,0 +1,44 @@ +# Exercices - Placer une fraction sur une demi-droite graduee + +## Intention + +Verifier que l'eleve sait reperer l'unite, utiliser le denominateur pour graduer, puis avancer selon le numerateur. + +## Exercice 1 - Reperer l'unite + +Sur une demi-droite, l'intervalle de `0` a `1` est partage en `4` parts egales. Combien vaut chaque petite part ? + +Reponse attendue : + +- Chaque petite part vaut `1/4`. + +## Exercice 2 - Placer une fraction entre 0 et 1 + +Pour placer `3/4`, combien de petites parts faut-il avancer depuis `0` ? + +Reponse attendue : + +- Il faut avancer de `3` petites parts. + +## Exercice 3 - Lire une fraction placee + +L'unite est partagee en `5` parts egales. Un point est place sur la deuxieme petite graduation apres `0`. Quelle fraction indique ce point ? + +Reponse attendue : + +- `2/5` + +## Exercice 4 - Fraction apres 1 + +L'unite est partagee en quarts. Explique pourquoi `5/4` est juste apres `1`. + +Reponse attendue : + +- `4/4` vaut `1`, donc `5/4` est un quart apres `1`. + +## Observations pour Professeur TOP + +- Si l'eleve compte les traits au lieu des intervalles, faire compter les parts entre `0` et `1`. +- Si l'eleve place `5/4` avant `1`, reprendre `4/4 = 1`. +- Si le denominateur est ignore, demander combien de parts egales contient chaque unite. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md new file mode 100644 index 0000000..8810556 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/04_fraction_superieure_a_un/exercices.md @@ -0,0 +1,65 @@ +# Exercices - Comprendre une fraction superieure a 1 + +## Intention + +Verifier que l'eleve reconnait une fraction plus grande que `1` et sait la decomposer en unite complete et reste. + +## Exercice 1 - Reconnaitre + +Entoure les fractions superieures a `1` : + +- `2/5` +- `5/5` +- `7/5` +- `9/4` +- `3/8` + +Reponses attendues : + +- `7/5` +- `9/4` + +Note : `5/5` est egal a `1`, il n'est pas superieur a `1`. + +## Exercice 2 - Completer la decomposition + +Complete : + +- `5/4 = 4/4 + ...` +- `7/3 = 6/3 + ...` +- `9/2 = 8/2 + ...` + +Reponses attendues : + +- `5/4 = 4/4 + 1/4` +- `7/3 = 6/3 + 1/3` +- `9/2 = 8/2 + 1/2` + +## Exercice 3 - Ecrire avec une partie entiere + +Complete : + +- `6/5 = 1 + ...` +- `8/3 = 2 + ...` +- `11/4 = 2 + ...` + +Reponses attendues : + +- `6/5 = 1 + 1/5` +- `8/3 = 2 + 2/3` +- `11/4 = 2 + 3/4` + +## Exercice 4 - Expliquer avec l'unite + +Explique pourquoi `7/4` est plus grand que `1`. + +Reponse attendue : + +- Une unite vaut `4/4`. Dans `7/4`, on a `4/4` et encore `3/4`, donc c'est plus que `1`. + +## Observations pour Professeur TOP + +- Si l'eleve pense que toute fraction est plus petite que `1`, revenir aux bandes multiples. +- Si `denominateur plus grand` devient une regle automatique, faire comparer numerateur et denominateur. +- Si l'eleve oublie le cas egal a `1`, reprendre `5/5 = 1`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md new file mode 100644 index 0000000..c03f7cc --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/05_comparer_fractions_simples/exercices.md @@ -0,0 +1,62 @@ +# Exercices - Comparer des fractions simples + +## Intention + +Verifier que l'eleve compare d'abord l'unite et les denominateurs, puis choisit une strategie adaptee. + +## Exercice 1 - Meme denominateur + +Complete avec `<`, `>` ou `=` : + +- `2/7 ... 5/7` +- `6/8 ... 3/8` +- `4/9 ... 4/9` + +Reponses attendues : + +- `2/7 < 5/7` +- `6/8 > 3/8` +- `4/9 = 4/9` + +## Exercice 2 - Meme numerateur + +Choisis la plus grande fraction : + +- `1/2` ou `1/4` +- `2/3` ou `2/5` +- `3/6` ou `3/10` + +Reponses attendues : + +- `1/2` +- `2/3` +- `3/6` + +## Exercice 3 - Comparer a 1 + +Complete avec `<`, `>` ou `=` : + +- `5/6 ... 1` +- `6/6 ... 1` +- `8/6 ... 1` + +Reponses attendues : + +- `5/6 < 1` +- `6/6 = 1` +- `8/6 > 1` + +## Exercice 4 - Justifier + +Explique pourquoi `3/5 < 4/5`. + +Reponse attendue : + +- Les denominateurs sont les memes, donc les parts ont la meme taille. `4` parts, c'est plus que `3` parts. + +## Observations pour Professeur TOP + +- Si l'eleve compare seulement les denominateurs, revenir a l'unite et a la taille des parts. +- Si l'eleve bloque sur `<` et `>`, accepter une phrase orale avant le symbole. +- Si l'eleve reussit sans justifier, demander quelle strategie il a utilisee. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md new file mode 100644 index 0000000..51ef5d7 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/06_encadrer_fraction_entre_entiers/exercices.md @@ -0,0 +1,60 @@ +# Exercices - Encadrer une fraction entre deux entiers + +## Intention + +Verifier que l'eleve trouve les entiers voisins d'une fraction superieure a `1`, en gardant le meme denominateur. + +## Exercice 1 - Trouver les entiers en fraction + +Complete : + +- Avec des quarts : `1 = .../4` et `2 = .../4` +- Avec des tiers : `2 = .../3` et `3 = .../3` +- Avec des cinquiemes : `2 = .../5` et `3 = .../5` + +Reponses attendues : + +- `1 = 4/4` et `2 = 8/4` +- `2 = 6/3` et `3 = 9/3` +- `2 = 10/5` et `3 = 15/5` + +## Exercice 2 - Encadrer + +Complete : + +- `... < 5/4 < ...` +- `... < 8/3 < ...` +- `... < 11/5 < ...` + +Reponses attendues : + +- `1 < 5/4 < 2` +- `2 < 8/3 < 3` +- `2 < 11/5 < 3` + +## Exercice 3 - Choisir l'encadrement correct + +Quel encadrement est correct pour `13/6` ? + +- `1 < 13/6 < 2` +- `2 < 13/6 < 3` +- `3 < 13/6 < 4` + +Reponse attendue : + +- `2 < 13/6 < 3` + +## Exercice 4 - Expliquer + +Explique pourquoi `7/3` est entre `2` et `3`. + +Reponse attendue : + +- `6/3 = 2` et `9/3 = 3`. Comme `7/3` est entre `6/3` et `9/3`, alors `7/3` est entre `2` et `3`. + +## Observations pour Professeur TOP + +- Si l'eleve encadre par des entiers trop eloignes, faire chercher les entiers consecutifs. +- Si le meme denominateur disparait, revenir a `6/3`, `7/3`, `9/3`. +- Si l'eleve compte bien mais ecrit mal les signes, accepter d'abord une phrase orale. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md new file mode 100644 index 0000000..d2832f2 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/07_additionner_soustraire_fractions_simples/exercices.md @@ -0,0 +1,62 @@ +# Exercices - Additionner ou soustraire des fractions simples + +## Intention + +Verifier que l'eleve calcule avec des fractions de meme denominateur en gardant la taille des parts. + +## Exercice 1 - Additionner + +Calcule : + +- `1/5 + 2/5` +- `2/7 + 3/7` +- `4/10 + 5/10` + +Reponses attendues : + +- `3/5` +- `5/7` +- `9/10` + +## Exercice 2 - Soustraire + +Calcule : + +- `6/8 - 2/8` +- `7/9 - 3/9` +- `10/12 - 4/12` + +Reponses attendues : + +- `4/8` +- `4/9` +- `6/12` + +## Exercice 3 - Depasser 1 + +Calcule puis dis si le resultat depasse `1` : + +- `3/4 + 2/4` +- `5/6 + 1/6` +- `4/7 + 2/7` + +Reponses attendues : + +- `5/4`, depasse `1` +- `6/6`, egal a `1` +- `6/7`, ne depasse pas `1` + +## Exercice 4 - Expliquer la regle + +Pourquoi garde-t-on le denominateur dans `2/7 + 3/7 = 5/7` ? + +Reponse attendue : + +- Parce que les parts ont la meme taille : ce sont toujours des septiemes. + +## Observations pour Professeur TOP + +- Si l'eleve additionne les denominateurs, revenir a la bande partagee en parts egales. +- Si l'eleve simplifie spontanement, accepter mais rappeler que la phase attend la fraction non reduite. +- Si l'eleve oublie de verifier les denominateurs, poser toujours la question avant le calcul. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md new file mode 100644 index 0000000..f481308 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/08_fraction_d_une_quantite/exercices.md @@ -0,0 +1,60 @@ +# Exercices - Determiner une fraction d'une quantite + +## Intention + +Verifier que l'eleve sait partager une quantite selon le denominateur, puis prendre le nombre de parts indique par le numerateur. + +## Exercice 1 - Une part + +Calcule : + +- `1/2` de `18` +- `1/3` de `24` +- `1/5` de `40` + +Reponses attendues : + +- `9` +- `8` +- `8` + +## Exercice 2 - Plusieurs parts + +Calcule : + +- `3/4` de `20` +- `2/5` de `30` +- `3/6` de `42` + +Reponses attendues : + +- `15` +- `12` +- `21` + +## Exercice 3 - Completer les deux etapes + +Complete : + +- `3/4` de `28` : `28 / 4 = ...`, puis `... x 3 = ...` +- `2/3` de `18` : `18 / 3 = ...`, puis `... x 2 = ...` + +Reponses attendues : + +- `28 / 4 = 7`, puis `7 x 3 = 21` +- `18 / 3 = 6`, puis `6 x 2 = 12` + +## Exercice 4 - Probleme court + +Dans une classe de `28` eleves, `3/4` participent a un atelier. Combien d'eleves participent ? + +Reponse attendue : + +- `21` eleves participent. + +## Observations pour Professeur TOP + +- Si l'eleve multiplie avant de partager, revenir aux deux gestes : partager puis prendre. +- Si l'eleve divise par le numerateur, demander quel nombre indique le partage. +- Si l'eleve trouve l'operation mais oublie l'unite, faire reformuler avec la quantite de depart. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md new file mode 100644 index 0000000..b607dc9 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices/README.md @@ -0,0 +1,19 @@ +# Exercices textuels - CM1 - Fractions + +Ce dossier contient les exercices textuels de la Phase 5A pour le sous-theme `01B_fractions`. + +Organisation : + +- un sous-dossier par micro-competence ; +- un fichier `exercices.md` par sous-dossier ; +- des exercices progressifs, avec reponses attendues et observations pedagogiques. + +Statut Phase 5A : exercices initiaux generes, a relire avant production des SVG d'exercices. + +## Principes + +- Une consigne courte par exercice. +- Une difficulte progressive : reconnaissance, application directe, transfert court, verbalisation. +- Pas de piege inutile. +- Les reponses restent simples a verifier oralement ou par saisie texte. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg new file mode 100644 index 0000000..0d2a9b1 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/01_lire_ecrire_fraction_simple.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:54px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:22px;fill:#2d4148}.frac{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:72px;font-weight:800;fill:#074f4b}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.blue{fill:#1d78b5}</style></defs> + <rect class="bg" width="1600" height="900"/> + <rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Exercices - Lire et écrire une fraction</text> + <g transform="translate(110 190)"><rect width="430" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Lis les fractions</text><g class="math-expression"><g transform="translate(70 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">2</text></g></g><g class="math-expression"><g transform="translate(70 235)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">4</text></g></g><g class="math-expression"><g transform="translate(70 325)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">8</text></g></g><g class="math-expression"><g transform="translate(70 415)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="frac">7</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="frac">10</text></g></g><line x1="230" y1="145" x2="375" y2="145" class="blank"/><line x1="230" y1="235" x2="375" y2="235" class="blank"/><line x1="230" y1="325" x2="375" y2="325" class="blank"/><line x1="250" y1="415" x2="375" y2="415" class="blank"/></g> + <g transform="translate(590 190)"><rect width="430" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Haut et bas</text><g class="math-expression"><g transform="translate(58 135)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">5</text></g></g><g class="math-expression"><g transform="translate(58 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">9</text></g></g><g class="math-expression"><g transform="translate(58 375)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="frac">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="frac">7</text></g></g><text x="210" y="120" class="small">Numérateur :</text><line x1="210" y1="155" x2="370" y2="155" class="blank"/><text x="210" y="205" class="small">Dénominateur :</text><line x1="210" y1="240" x2="370" y2="240" class="blank"/><text x="210" y="325" class="small">Recommence pour les autres.</text></g> + <g transform="translate(1070 190)"><rect width="420" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">3. Écris en chiffres</text><text x="45" y="140" class="body">deux tiers</text><line x1="45" y1="180" x2="340" y2="180" class="blank"/><text x="45" y="255" class="body">trois cinquièmes</text><line x1="45" y1="295" x2="340" y2="295" class="blank"/><text x="45" y="370" class="body">neuf dixièmes</text><line x1="45" y1="410" x2="340" y2="410" class="blank"/><text x="45" y="500" class="small">Explique avec unité et parts.</text></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg new file mode 100644 index 0000000..de626e6 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/02_representer_fraction_partage.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:54px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:22px;fill:#2d4148}.line{stroke:#26383d;stroke-width:4}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.green{fill:#2f9246}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Exercices - Représenter une fraction</text> + <g transform="translate(110 190)"><rect width="430" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Quelle fraction ?</text><text x="45" y="115" class="body">2 parts sur 3</text><line x1="45" y1="150" x2="340" y2="150" class="blank"/><text x="45" y="225" class="body">4 parts sur 5</text><line x1="45" y1="260" x2="340" y2="260" class="blank"/><text x="45" y="335" class="body">6 parts sur 10</text><line x1="45" y1="370" x2="340" y2="370" class="blank"/></g> + <g transform="translate(590 190)"><rect width="430" height="560" rx="24" class="panel"/><g class="math-expression"><text x="32" y="58" class="h2">2. Colorie </text><g transform="translate(204.48 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">3</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">6</text></g></g><g transform="translate(50 145)"><rect width="330" height="95" rx="12" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><line x1="55" y1="0" x2="55" y2="95" class="line"/><line x1="110" y1="0" x2="110" y2="95" class="line"/><line x1="165" y1="0" x2="165" y2="95" class="line"/><line x1="220" y1="0" x2="220" y2="95" class="line"/><line x1="275" y1="0" x2="275" y2="95" class="line"/></g><text x="50" y="315" class="body">Puis explique :</text><text x="50" y="365" class="small">Dénominateur =</text><line x1="220" y1="365" x2="365" y2="365" class="blank"/><text x="50" y="430" class="small">Numérateur =</text><line x1="220" y1="430" x2="365" y2="430" class="blank"/></g> + <g transform="translate(1070 190)"><rect width="420" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">3. Collection</text><text x="45" y="112" class="body">12 jetons, 5 rouges</text><g transform="translate(65 170)"><circle cx="0" cy="0" r="18" class="green"/><circle cx="52" cy="0" r="18" class="green"/><circle cx="104" cy="0" r="18" class="green"/><circle cx="156" cy="0" r="18" class="green"/><circle cx="208" cy="0" r="18" class="green"/><circle cx="260" cy="0" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="0" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="52" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="104" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="156" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="208" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/><circle cx="260" cy="65" r="18" fill="#e8f3ee" stroke="#26383d"/></g><text x="45" y="340" class="body">Fraction rouge :</text><line x1="45" y1="390" x2="340" y2="390" class="blank"/><text x="45" y="480" class="small">Les parts doivent etre égales.</text></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg new file mode 100644 index 0000000..c9eb6bc --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/03_fraction_sur_demi_droite_graduee.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:52px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:21px;fill:#2d4148}.axis{stroke:#26383d;stroke-width:5;stroke-linecap:round}.tick{stroke:#26383d;stroke-width:4}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Fraction sur demi-droite</text> + <g transform="translate(115 200)"><rect width="1370" height="260" rx="24" class="soft"/><g class="math-expression"><text x="36" y="58" class="h2">1. Place </text><g transform="translate(177.12 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">3</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g></g><line x1="130" y1="155" x2="640" y2="155" class="axis"/><polygon points="640,155 610,138 610,172" fill="#26383d"/><g transform="translate(130 0)"><line x1="0" y1="125" x2="0" y2="185" class="tick"/><text x="0" y="220" text-anchor="middle" class="body">0</text><line x1="120" y1="135" x2="120" y2="175" class="tick"/><line x1="240" y1="135" x2="240" y2="175" class="tick"/><line x1="360" y1="135" x2="360" y2="175" class="tick"/><line x1="480" y1="125" x2="480" y2="185" class="tick"/><text x="480" y="220" text-anchor="middle" class="body">1</text></g><text x="760" y="125" class="body">Unité partagée en 4 parts.</text><text x="760" y="180" class="body">Avance de combien de parts ?</text><line x1="1090" y1="180" x2="1260" y2="180" class="blank"/></g> + <g transform="translate(115 520)"><rect width="1370" height="230" rx="24" class="panel"/><text x="36" y="58" class="h2">2. Lis le point</text><line x1="130" y1="145" x2="640" y2="145" class="axis"/><polygon points="640,145 610,128 610,162" fill="#26383d"/><g transform="translate(130 0)"><line x1="0" y1="115" x2="0" y2="175" class="tick"/><text x="0" y="210" text-anchor="middle" class="body">0</text><line x1="96" y1="125" x2="96" y2="165" class="tick"/><line x1="192" y1="125" x2="192" y2="165" class="tick"/><circle cx="192" cy="145" r="16" class="orange"/><line x1="288" y1="125" x2="288" y2="165" class="tick"/><line x1="384" y1="125" x2="384" y2="165" class="tick"/><line x1="480" y1="115" x2="480" y2="175" class="tick"/><text x="480" y="210" text-anchor="middle" class="body">1</text></g><text x="760" y="125" class="body">L'unité est en 5 parts.</text><text x="760" y="180" class="body">Le point indique :</text><line x1="980" y1="180" x2="1260" y2="180" class="blank"/></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg new file mode 100644 index 0000000..bfd8b90 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/04_fraction_superieure_a_un.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:52px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:38px;font-weight:800;fill:#074f4b}.line{stroke:#26383d;stroke-width:4}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.green{fill:#2f9246}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Fraction supérieure à 1</text> + <g transform="translate(105 190)"><rect width="455" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Entoure > 1</text><g class="math-expression"><g transform="translate(65 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g></g><g class="math-expression"><g transform="translate(250 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g></g><g class="math-expression"><g transform="translate(65 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g></g><g class="math-expression"><g transform="translate(250 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">9</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g></g><g class="math-expression"><g transform="translate(65 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g></g><text x="55" y="480" class="body">Attention : égal à 1 n'est pas > 1.</text></g> + <g transform="translate(610 190)"><rect width="455" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Complète</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="107.44" y="145" class="num"> = </text><g transform="translate(184.72 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="237.16" y="145" class="num"> +</text></g><line x1="320" y1="145" x2="410" y2="145" class="blank"/><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="107.44" y="255" class="num"> = </text><g transform="translate(184.72 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="237.16" y="255" class="num"> +</text></g><line x1="320" y1="255" x2="410" y2="255" class="blank"/><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">9</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">2</text></g><text x="107.44" y="365" class="num"> = </text><g transform="translate(184.72 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">8</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">2</text></g><text x="237.16" y="365" class="num"> +</text></g><line x1="320" y1="365" x2="410" y2="365" class="blank"/></g> + <g transform="translate(1115 190)"><rect width="380" height="560" rx="24" class="soft"/><g class="math-expression"><text x="32" y="58" class="h2">3. Représente </text><g transform="translate(251.52 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">7</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g></g><g transform="translate(45 120)"><rect width="280" height="70" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="70" height="70" rx="10" class="green"/><rect x="70" width="70" height="70" class="green"/><rect x="140" width="70" height="70" class="green"/><rect x="210" width="70" height="70" class="green"/><line x1="70" y1="0" x2="70" y2="70" class="line"/><line x1="140" y1="0" x2="140" y2="70" class="line"/><line x1="210" y1="0" x2="210" y2="70" class="line"/><rect y="115" width="280" height="70" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><line x1="70" y1="115" x2="70" y2="185" class="line"/><line x1="140" y1="115" x2="140" y2="185" class="line"/><line x1="210" y1="115" x2="210" y2="185" class="line"/></g><text x="45" y="390" class="body">Colorie le reste.</text><line x1="45" y1="455" x2="320" y2="455" class="blank"/></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg new file mode 100644 index 0000000..c65217f --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/05_comparer_fractions_simples.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:52px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:42px;font-weight:800;fill:#074f4b}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.blue{fill:#1d78b5}.line{stroke:#26383d;stroke-width:4}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Comparer des fractions</text> + <g transform="translate(105 190)"><rect width="455" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Complète</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g></g><line x1="170" y1="145" x2="235" y2="145" class="blank"/><g class="math-expression"><g transform="translate(260 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g></g><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g></g><line x1="170" y1="255" x2="235" y2="255" class="blank"/><g class="math-expression"><g transform="translate(260 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g></g><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">9</text></g></g><line x1="170" y1="365" x2="235" y2="365" class="blank"/><g class="math-expression"><g transform="translate(260 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">9</text></g></g></g> + <g transform="translate(610 190)"><rect width="455" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Choisis la plus grande</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">2</text></g><text x="107.44" y="145" class="num"> ou </text><g transform="translate(210.48 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g></g><line x1="55" y1="190" x2="385" y2="190" class="blank"/><g class="math-expression"><g transform="translate(55 280)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="107.44" y="280" class="num"> ou </text><g transform="translate(210.48 280)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g></g><line x1="55" y1="325" x2="385" y2="325" class="blank"/><g class="math-expression"><g transform="translate(55 415)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">6</text></g><text x="107.44" y="415" class="num"> ou </text><g transform="translate(210.48 415)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">10</text></g></g><line x1="55" y1="460" x2="385" y2="460" class="blank"/></g> + <g transform="translate(1115 190)"><rect width="380" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">3. Compare avec 1</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">6</text></g></g><line x1="165" y1="145" x2="230" y2="145" class="blank"/><text x="255" y="145" class="num">1</text><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">6</text></g></g><line x1="165" y1="255" x2="230" y2="255" class="blank"/><text x="255" y="255" class="num">1</text><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">8</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">6</text></g></g><line x1="165" y1="365" x2="230" y2="365" class="blank"/><text x="255" y="365" class="num">1</text><text x="55" y="475" class="body">Justifie un choix.</text></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg new file mode 100644 index 0000000..8560c5f --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/06_encadrer_fraction_entre_entiers.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:52px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:40px;font-weight:800;fill:#074f4b}.axis{stroke:#26383d;stroke-width:5}.tick{stroke:#26383d;stroke-width:4}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Ençadrer une fraction</text> + <g transform="translate(105 190)"><rect width="455" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Entiers en fractions</text><text x="45" y="145" class="num">1 =</text><line x1="130" y1="145" x2="215" y2="145" class="blank"/><text x="235" y="145" class="num">/4</text><text x="45" y="245" class="num">2 =</text><line x1="130" y1="245" x2="215" y2="245" class="blank"/><text x="235" y="245" class="num">/4</text><text x="45" y="365" class="body">Puis recommence en tiers.</text></g> + <g transform="translate(610 190)"><rect width="455" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Complète</text><line x1="55" y1="145" x2="115" y2="145" class="blank"/><g class="math-expression"><text x="130" y="145" class="num">< </text><g transform="translate(181.52 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="233.96" y="145" class="num"> <</text></g><line x1="325" y1="145" x2="395" y2="145" class="blank"/><line x1="55" y1="255" x2="115" y2="255" class="blank"/><g class="math-expression"><text x="130" y="255" class="num">< </text><g transform="translate(181.52 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">8</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="233.96" y="255" class="num"> <</text></g><line x1="325" y1="255" x2="395" y2="255" class="blank"/><line x1="55" y1="365" x2="115" y2="365" class="blank"/><g class="math-expression"><text x="130" y="365" class="num">< </text><g transform="translate(181.52 365)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">11</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">5</text></g><text x="251.44" y="365" class="num"> <</text></g><line x1="345" y1="365" x2="415" y2="365" class="blank"/></g> + <g transform="translate(1115 190)"><rect width="380" height="560" rx="24" class="soft"/><g class="math-expression"><text x="32" y="58" class="h2">3. Place </text><g transform="translate(173.12 58)" class="fraction-g"><text x="15.4" y="-9.52" text-anchor="middle" class="h2">13</text><line x1="0" y1="1.12" x2="30.8" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="15.4" y="16.24" text-anchor="middle" class="h2">6</text></g></g><line x1="45" y1="210" x2="320" y2="210" class="axis"/><g transform="translate(60 0)"><line x1="0" y1="180" x2="0" y2="240" class="tick"/><text x="0" y="275" text-anchor="middle" class="body">1</text><line x1="120" y1="180" x2="120" y2="240" class="tick"/><text x="120" y="275" text-anchor="middle" class="body">2</text><line x1="240" y1="180" x2="240" y2="240" class="tick"/><text x="240" y="275" text-anchor="middle" class="body">3</text></g><text x="45" y="370" class="body">Ençadrement :</text><line x1="45" y1="425" x2="320" y2="425" class="blank"/></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg new file mode 100644 index 0000000..b144581 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/07_additionner_soustraire_fractions_simples.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:50px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:40px;font-weight:800;fill:#074f4b}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.blue{fill:#1d78b5}.line{stroke:#26383d;stroke-width:4}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Additionner et soustraire des fractions</text> + <g transform="translate(105 190)"><rect width="455" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Additionne</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g><text x="107.44" y="145" class="num"> + </text><g transform="translate(184.72 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g><text x="237.16" y="145" class="num"> =</text></g><line x1="320" y1="145" x2="410" y2="145" class="blank"/><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g><text x="107.44" y="255" class="num"> + </text><g transform="translate(184.72 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g><text x="237.16" y="255" class="num"> =</text></g><line x1="320" y1="255" x2="410" y2="255" class="blank"/><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">10</text></g><text x="124.92" y="365" class="num"> + </text><g transform="translate(202.2 365)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">10</text></g><text x="272.12" y="365" class="num"> =</text></g><line x1="360" y1="365" x2="430" y2="365" class="blank"/></g> + <g transform="translate(610 190)"><rect width="455" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Soustrais</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g><text x="107.44" y="145" class="num"> - </text><g transform="translate(184.72 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g><text x="237.16" y="145" class="num"> =</text></g><line x1="320" y1="145" x2="410" y2="145" class="blank"/><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">9</text></g><text x="107.44" y="255" class="num"> - </text><g transform="translate(184.72 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">9</text></g><text x="237.16" y="255" class="num"> =</text></g><line x1="320" y1="255" x2="410" y2="255" class="blank"/><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">10</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">12</text></g><text x="142.4" y="365" class="num"> - </text><g transform="translate(219.68 365)" class="fraction-g"><text x="25.3" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="50.6" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="25.3" y="26.68" text-anchor="middle" class="num">12</text></g><text x="289.6" y="365" class="num"> =</text></g><line x1="370" y1="365" x2="430" y2="365" class="blank"/></g> + <g transform="translate(1115 190)"><rect width="380" height="560" rx="24" class="soft"/><g class="math-expression"><text x="32" y="58" class="h2">3. Dessine </text><g transform="translate(204.48 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">2</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">7</text></g><text x="238.48" y="58" class="h2"> + </text><g transform="translate(285.52 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">3</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">7</text></g></g><g transform="translate(45 135)"><rect width="280" height="70" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="40" height="70" rx="10" class="orange"/><rect x="40" width="40" height="70" class="orange"/><rect x="80" width="40" height="70" class="blue"/><rect x="120" width="40" height="70" class="blue"/><rect x="160" width="40" height="70" class="blue"/><line x1="40" y1="0" x2="40" y2="70" class="line"/><line x1="80" y1="0" x2="80" y2="70" class="line"/><line x1="120" y1="0" x2="120" y2="70" class="line"/><line x1="160" y1="0" x2="160" y2="70" class="line"/><line x1="200" y1="0" x2="200" y2="70" class="line"/><line x1="240" y1="0" x2="240" y2="70" class="line"/></g><text x="45" y="300" class="body">Résultat :</text><line x1="45" y1="350" x2="320" y2="350" class="blank"/><text x="45" y="450" class="body">Le dénominateur reste :</text><line x1="45" y1="500" x2="320" y2="500" class="blank"/></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg new file mode 100644 index 0000000..7e97b3b --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/08_fraction_d_une_quantite.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#d9e7e1;stroke-width:3}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:3}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:52px;font-weight:800;fill:#074f4b}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:25px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:38px;font-weight:800;fill:#074f4b}.blank{stroke:#7fa79d;stroke-width:3;stroke-dasharray:10 10}.orange{fill:#e78232}.line{stroke:#26383d;stroke-width:4}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/><text x="800" y="116" text-anchor="middle" class="title">Exercices - Fraction d'une quantité</text> + <g transform="translate(105 190)"><rect width="455" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">1. Une part</text><g class="math-expression"><g transform="translate(55 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">2</text></g><text x="107.44" y="145" class="num"> de 18 =</text></g><line x1="300" y1="145" x2="410" y2="145" class="blank"/><g class="math-expression"><g transform="translate(55 255)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="107.44" y="255" class="num"> de 24 =</text></g><line x1="300" y1="255" x2="410" y2="255" class="blank"/><g class="math-expression"><g transform="translate(55 365)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g><text x="107.44" y="365" class="num"> de 40 =</text></g><line x1="300" y1="365" x2="410" y2="365" class="blank"/></g> + <g transform="translate(610 190)"><rect width="455" height="560" rx="24" class="panel"/><text x="32" y="58" class="h2">2. Partage puis prends</text><g class="math-expression"><g transform="translate(55 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="107.44" y="130" class="num"> de 20</text></g><text x="55" y="205" class="body">20 ÷ 4 =</text><line x1="190" y1="205" x2="350" y2="205" class="blank"/><text x="55" y="285" class="body">Puis x 3 =</text><line x1="205" y1="285" x2="350" y2="285" class="blank"/><g transform="translate(55 375)"><rect width="330" height="70" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><line x1="82.5" y1="0" x2="82.5" y2="70" class="line"/><line x1="165" y1="0" x2="165" y2="70" class="line"/><line x1="247.5" y1="0" x2="247.5" y2="70" class="line"/></g></g> + <g transform="translate(1115 190)"><rect width="380" height="560" rx="24" class="soft"/><text x="32" y="58" class="h2">3. Problème</text><text x="45" y="120" class="body">28 élèves.</text><g class="math-expression"><g transform="translate(45 165)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">3</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">4</text></g><text x="79" y="165" class="body"> participent.</text></g><text x="45" y="240" class="body">Combien ?</text><line x1="45" y1="300" x2="320" y2="300" class="blank"/><text x="45" y="405" class="body">Deux gestes :</text><text x="45" y="455" class="body">1. partager</text><text x="45" y="505" class="body">2. prendre</text></g> +</svg> + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md new file mode 100644 index 0000000..659954e --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/exercices_svg/README.md @@ -0,0 +1,13 @@ +# SVG exercices - CM1 - Fractions + +Ce dossier contient les planches SVG d'exercices de la Phase 6A pour le sous-theme `01B_fractions`. + +Organisation : + +- une planche SVG par micro-competence ; +- consignes courtes ; +- zones de reponse visibles ; +- pas de corrige dans le visuel. + +Les corriges restent dans les fichiers `exercices/*/exercices.md`. + diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg new file mode 100644 index 0000000..3fd606e --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/01_lire_ecrire_fraction_simple.svg @@ -0,0 +1,44 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs> + <style> + .bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.frac{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:96px;font-weight:800;fill:#074f4b}.orange{fill:#e78232}.blue{fill:#1d78b5}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round} + </style> + </defs> + <rect class="bg" width="1600" height="900"/> + <rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Lire et écrire une fraction</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Maths CM1 - Numérateur, dénominateur, unité</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(110 245)"> + <rect width="455" height="300" rx="24" class="soft"/> + <text x="34" y="58" class="h2">La fraction</text> + <text x="228" y="150" text-anchor="middle" class="frac">3</text> + <line x1="182" y1="178" x2="274" y2="178" class="line"/> + <text x="228" y="270" text-anchor="middle" class="frac">4</text> + </g> + <g transform="translate(625 245)"> + <rect width="360" height="300" rx="24" class="panel"/> + <text x="30" y="58" class="h2">Ce que ça dit</text> + <circle cx="55" cy="112" r="15" class="orange"/><text x="84" y="120" class="body">3 parts prises</text> + <circle cx="55" cy="168" r="15" class="blue"/><text x="84" y="176" class="body">4 parts égales</text> + <g class="math-expression"><g transform="translate(30 235)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">3</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">4</text></g><text x="64" y="235" class="body"> se lit :</text></g> + <text x="30" y="272" class="body">trois quarts</text> + </g> + <g transform="translate(1040 245)"> + <rect width="430" height="300" rx="24" class="panel"/> + <text x="30" y="58" class="h2">L'unité partagée</text> + <g transform="translate(45 110)"> + <rect x="0" y="0" width="320" height="90" rx="14" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/> + <rect x="0" y="0" width="80" height="90" rx="14" class="orange"/> + <rect x="80" y="0" width="80" height="90" class="orange"/> + <rect x="160" y="0" width="80" height="90" class="orange"/> + <line x1="80" y1="0" x2="80" y2="90" class="line"/><line x1="160" y1="0" x2="160" y2="90" class="line"/><line x1="240" y1="0" x2="240" y2="90" class="line"/> + </g> + <text x="45" y="248" class="small">L'unité est coupée en 4 parts égales.</text> + </g> + <g transform="translate(170 615)"> + <rect width="1260" height="150" rx="24" class="panel"/> + <text x="36" y="55" class="h2">À retenir</text> + <text x="36" y="100" class="body">Le dénominateur indique le partage. Le numérateur indique les parts prises.</text> + </g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg new file mode 100644 index 0000000..08063c5 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/02_representer_fraction_partage.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.orange{fill:#e78232}.blue{fill:#1d78b5}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Représenter une fraction</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Je partage l'unité en parts égales, puis je colorie</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(110 245)"><rect width="420" height="330" rx="24" class="panel"/><g class="math-expression"><text x="34" y="58" class="h2">Bande : </text><g transform="translate(159.44 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">3</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">5</text></g></g> + <g transform="translate(45 132)"><rect width="320" height="92" rx="12" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="64" height="92" rx="12" class="orange"/><rect x="64" width="64" height="92" class="orange"/><rect x="128" width="64" height="92" class="orange"/><line x1="64" y1="0" x2="64" y2="92" class="line"/><line x1="128" y1="0" x2="128" y2="92" class="line"/><line x1="192" y1="0" x2="192" y2="92" class="line"/><line x1="256" y1="0" x2="256" y2="92" class="line"/></g> + <text x="45" y="285" class="small">5 parts égales, 3 parts coloriées</text></g> + <g transform="translate(590 245)"><rect width="420" height="330" rx="24" class="soft"/><g class="math-expression"><text x="34" y="58" class="h2">Disque : </text><g transform="translate(175.12 58)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">1</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g></g> + <circle cx="210" cy="178" r="90" fill="#f7fbf9" stroke="#26383d" stroke-width="4"/><path d="M210 178 L210 88 A90 90 0 0 1 300 178 Z" class="blue"/><line x1="210" y1="88" x2="210" y2="268" class="line"/><line x1="120" y1="178" x2="300" y2="178" class="line"/> + <text x="70" y="285" class="small">4 parts égales, 1 part coloriée</text></g> + <g transform="translate(1070 245)"><rect width="420" height="330" rx="24" class="panel"/><g class="math-expression"><text x="34" y="58" class="h2">Collection : </text><g transform="translate(237.84 58)" class="fraction-g"><text x="15.4" y="-9.52" text-anchor="middle" class="h2">6</text><line x1="0" y1="1.12" x2="30.8" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="15.4" y="16.24" text-anchor="middle" class="h2">10</text></g></g> + <g transform="translate(70 112)"><circle cx="0" cy="0" r="20" class="green"/><circle cx="55" cy="0" r="20" class="green"/><circle cx="110" cy="0" r="20" class="green"/><circle cx="165" cy="0" r="20" class="green"/><circle cx="220" cy="0" r="20" class="green"/><circle cx="275" cy="0" r="20" class="green"/><circle cx="0" cy="70" r="20" fill="#e8f3ee" stroke="#26383d"/><circle cx="55" cy="70" r="20" fill="#e8f3ee" stroke="#26383d"/><circle cx="110" cy="70" r="20" fill="#e8f3ee" stroke="#26383d"/><circle cx="165" cy="70" r="20" fill="#e8f3ee" stroke="#26383d"/></g> + <text x="58" y="285" class="small">10 objets, 6 sont choisis</text></g> + <g transform="translate(170 645)"><rect width="1260" height="110" rx="24" class="panel"/><text x="36" y="48" class="h2">À retenir</text><text x="36" y="86" class="body">Une fraction n'a de sens que si l'unité et les parts égales sont claires.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg new file mode 100644 index 0000000..c3acebd --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/03_fraction_sur_demi_droite_graduee.svg @@ -0,0 +1,19 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.orange{fill:#e78232}.blue{fill:#1d78b5}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}.tick{stroke:#26383d;stroke-width:3}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Placer une fraction sur une demi-droite</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Je partage chaque unité selon le dénominateur</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(125 255)"><rect width="1350" height="340" rx="24" class="soft"/><g class="math-expression"><text x="36" y="60" class="h2">Exemple : placer </text><g transform="translate(302.56 60)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">5</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g></g> + <line x1="100" y1="205" x2="1180" y2="205" class="line"/><path d="M1180 205 L1158 194 L1158 216 Z" fill="#26383d"/> + <g transform="translate(130 0)"> + <line x1="0" y1="170" x2="0" y2="240" class="tick"/><text x="0" y="275" text-anchor="middle" class="body">0</text> + <line x1="250" y1="170" x2="250" y2="240" class="tick"/><text x="250" y="275" text-anchor="middle" class="body">1</text> + <line x1="500" y1="170" x2="500" y2="240" class="tick"/><text x="500" y="275" text-anchor="middle" class="body">2</text> + <line x1="62.5" y1="184" x2="62.5" y2="226" class="tick"/><line x1="125" y1="184" x2="125" y2="226" class="tick"/><line x1="187.5" y1="184" x2="187.5" y2="226" class="tick"/><line x1="312.5" y1="184" x2="312.5" y2="226" class="tick"/><line x1="375" y1="184" x2="375" y2="226" class="tick"/><line x1="437.5" y1="184" x2="437.5" y2="226" class="tick"/> + <circle cx="312.5" cy="205" r="16" class="orange"/><g class="math-expression"><g transform="translate(295.5 150)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">5</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">4</text></g></g> + </g> + <text x="820" y="150" class="body">Dénominateur 4 :</text><text x="820" y="190" class="body">chaque unité a 4 parts.</text><g class="math-expression"><g transform="translate(820 245)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">5</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">4</text></g><text x="854" y="245" class="body"> est juste après 1.</text></g> + </g> + <g transform="translate(170 650)"><rect width="1260" height="110" rx="24" class="panel"/><text x="36" y="48" class="h2">À retenir</text><text x="36" y="86" class="body">L'intervalle de 0 à 1 est l'unité. Je le partage en parts égales.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg new file mode 100644 index 0000000..61e328f --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/04_fraction_superieure_a_un.svg @@ -0,0 +1,15 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:54px;font-weight:800;fill:#074f4b}.orange{fill:#e78232}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Fraction supérieure à 1</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Quand le numérateur depasse le dénominateur</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(120 245)"><rect width="630" height="360" rx="24" class="soft"/><g class="math-expression"><text x="34" y="60" class="h2">Exemple : </text><g transform="translate(190.8 60)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">7</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g></g> + <g transform="translate(70 130)"><rect width="400" height="80" rx="12" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="100" height="80" rx="12" class="green"/><rect x="100" width="100" height="80" class="green"/><rect x="200" width="100" height="80" class="green"/><rect x="300" width="100" height="80" class="green"/><line x1="100" y1="0" x2="100" y2="80" class="line"/><line x1="200" y1="0" x2="200" y2="80" class="line"/><line x1="300" y1="0" x2="300" y2="80" class="line"/></g> + <g transform="translate(70 245)"><rect width="400" height="80" rx="12" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="100" height="80" rx="12" class="orange"/><rect x="100" width="100" height="80" class="orange"/><rect x="200" width="100" height="80" class="orange"/><line x1="100" y1="0" x2="100" y2="80" class="line"/><line x1="200" y1="0" x2="200" y2="80" class="line"/><line x1="300" y1="0" x2="300" y2="80" class="line"/></g> + </g> + <g transform="translate(815 245)"><rect width="635" height="360" rx="24" class="panel"/><text x="36" y="60" class="h2">Je décompose</text> + <g class="math-expression"><g transform="translate(70 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="122.44" y="145" class="num"> = </text><g transform="translate(199.72 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="252.16" y="145" class="num"> + </text><g transform="translate(329.44 145)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g></g><g class="math-expression"><g transform="translate(70 215)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g><text x="122.44" y="215" class="num"> = 1 + </text><g transform="translate(302.76 215)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g></g><text x="70" y="285" class="body">La première unité est complète.</text><text x="70" y="325" class="body">Il reste encore trois quarts.</text> + </g> + <g transform="translate(170 660)"><rect width="1260" height="105" rx="24" class="panel"/><text x="36" y="47" class="h2">À retenir</text><text x="36" y="84" class="body">Une fraction peut etre plus grande que 1 : il faut alors utiliser plusieurs unités.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg new file mode 100644 index 0000000..2180e60 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/05_comparer_fractions_simples.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:64px;font-weight:800;fill:#074f4b}.orange{fill:#e78232}.blue{fill:#1d78b5}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Comparer des fractions simples</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Même unité, parts égales, puis je compare</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(120 245)"><rect width="620" height="360" rx="24" class="soft"/><text x="34" y="60" class="h2">Même dénominateur</text> + <g class="math-expression"><g transform="translate(70 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g><text x="122.44" y="130" class="num"> < </text><g transform="translate(199.72 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">5</text></g></g> + <g transform="translate(75 175)"><rect width="430" height="58" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="86" height="58" rx="10" class="orange"/><rect x="86" width="86" height="58" class="orange"/><rect x="172" width="86" height="58" class="orange"/><line x1="86" y1="0" x2="86" y2="58" class="line"/><line x1="172" y1="0" x2="172" y2="58" class="line"/><line x1="258" y1="0" x2="258" y2="58" class="line"/><line x1="344" y1="0" x2="344" y2="58" class="line"/></g> + <g transform="translate(75 265)"><rect width="430" height="58" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="86" height="58" rx="10" class="blue"/><rect x="86" width="86" height="58" class="blue"/><rect x="172" width="86" height="58" class="blue"/><rect x="258" width="86" height="58" class="blue"/><line x1="86" y1="0" x2="86" y2="58" class="line"/><line x1="172" y1="0" x2="172" y2="58" class="line"/><line x1="258" y1="0" x2="258" y2="58" class="line"/><line x1="344" y1="0" x2="344" y2="58" class="line"/></g> + </g> + <g transform="translate(815 245)"><rect width="635" height="360" rx="24" class="panel"/><text x="36" y="60" class="h2">Même numérateur</text> + <g class="math-expression"><g transform="translate(70 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">2</text></g><text x="122.44" y="130" class="num"> > </text><g transform="translate(199.72 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">1</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">4</text></g></g><text x="70" y="195" class="body">Quand on partage en plus de parts,</text><text x="70" y="232" class="body">chaque part est plus petite.</text><text x="70" y="300" class="body">Toujours comparer la meme unité.</text> + </g> + <g transform="translate(170 660)"><rect width="1260" height="105" rx="24" class="panel"/><text x="36" y="47" class="h2">À retenir</text><text x="36" y="84" class="body">A dénominateur égal, le plus grand numérateur donne la plus grande fraction.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg new file mode 100644 index 0000000..64ec1e5 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/06_encadrer_fraction_entre_entiers.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:54px;font-weight:800;fill:#074f4b}.orange{fill:#e78232}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}.tick{stroke:#26383d;stroke-width:3}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Ençadrer une fraction</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Je cherche entre quels entiers elle se trouve</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(125 245)"><rect width="1350" height="360" rx="24" class="soft"/><g class="math-expression"><text x="36" y="60" class="h2">Exemple : </text><g transform="translate(192.8 60)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">7</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">3</text></g></g> + <g class="math-expression"><g transform="translate(790 125)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="842.44" y="125" class="num"> = 2</text></g><g class="math-expression"><g transform="translate(790 195)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">9</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="842.44" y="195" class="num"> = 3</text></g><g class="math-expression"><text x="790" y="270" class="num">2 < </text><g transform="translate(893.04 270)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">7</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">3</text></g><text x="945.48" y="270" class="num"> < 3</text></g> + <line x1="100" y1="230" x2="670" y2="230" class="line"/><path d="M670 230 L648 219 L648 241 Z" fill="#26383d"/> + <g transform="translate(120 0)"><line x1="0" y1="195" x2="0" y2="265" class="tick"/><text x="0" y="300" text-anchor="middle" class="body">0</text><line x1="150" y1="195" x2="150" y2="265" class="tick"/><text x="150" y="300" text-anchor="middle" class="body">1</text><line x1="300" y1="195" x2="300" y2="265" class="tick"/><text x="300" y="300" text-anchor="middle" class="body">2</text><line x1="450" y1="195" x2="450" y2="265" class="tick"/><text x="450" y="300" text-anchor="middle" class="body">3</text><line x1="350" y1="210" x2="350" y2="250" class="tick"/><circle cx="350" cy="230" r="15" class="orange"/><g class="math-expression"><g transform="translate(333 175)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">7</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">3</text></g></g></g> + </g> + <g transform="translate(170 660)"><rect width="1260" height="105" rx="24" class="panel"/><text x="36" y="47" class="h2">À retenir</text><text x="36" y="84" class="body">Je compare la fraction aux fractions qui valent les entiers voisins.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg new file mode 100644 index 0000000..50a4e0c --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/07_additionner_soustraire_fractions_simples.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.orange{fill:#e78232}.blue{fill:#1d78b5}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Additionner des fractions simples</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Si les dénominateurs sont les mêmes, les parts ont la meme taille</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(120 245)"><rect width="640" height="360" rx="24" class="soft"/><text x="34" y="60" class="h2">Exemple</text><g class="math-expression"><g transform="translate(80 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g><text x="132.44" y="130" class="num"> + </text><g transform="translate(209.72 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">3</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g><text x="262.16" y="130" class="num"> = </text><g transform="translate(339.44 130)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">5</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">7</text></g></g> + <g transform="translate(70 210)"><rect width="490" height="70" rx="10" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="70" height="70" rx="10" class="orange"/><rect x="70" width="70" height="70" class="orange"/><rect x="140" width="70" height="70" class="blue"/><rect x="210" width="70" height="70" class="blue"/><rect x="280" width="70" height="70" class="blue"/><line x1="70" y1="0" x2="70" y2="70" class="line"/><line x1="140" y1="0" x2="140" y2="70" class="line"/><line x1="210" y1="0" x2="210" y2="70" class="line"/><line x1="280" y1="0" x2="280" y2="70" class="line"/><line x1="350" y1="0" x2="350" y2="70" class="line"/><line x1="420" y1="0" x2="420" y2="70" class="line"/></g> + </g> + <g transform="translate(825 245)"><rect width="625" height="360" rx="24" class="panel"/><text x="36" y="60" class="h2">La règle</text><text x="65" y="135" class="body">Je garde le dénominateur.</text><text x="65" y="180" class="body">J'ajoute ou je retire</text><text x="65" y="218" class="body">seulement les numérateurs.</text><g class="math-expression"><g transform="translate(65 290)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">6</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g><text x="117.44" y="290" class="num"> - </text><g transform="translate(194.72 290)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">2</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g><text x="247.16" y="290" class="num"> = </text><g transform="translate(324.44 290)" class="fraction-g"><text x="14" y="-15.64" text-anchor="middle" class="num">4</text><line x1="0" y1="1.84" x2="28" y2="1.84" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="26.68" text-anchor="middle" class="num">8</text></g></g></g> + <g transform="translate(170 660)"><rect width="1260" height="105" rx="24" class="panel"/><text x="36" y="47" class="h2">À retenir</text><text x="36" y="84" class="body">Avant de çalculer, je vérifie que les dénominateurs sont identiques.</text></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg new file mode 100644 index 0000000..e278c59 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/08_fraction_d_une_quantite.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900"> + <defs><style>.bg{fill:#f6f5ef}.panel{fill:#fff;stroke:#e2ebe6;stroke-width:2;filter:drop-shadow(0 10px 24px rgba(22,42,45,.10))}.soft{fill:#eef7f4;stroke:#c9dfd8;stroke-width:2}.title{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.subtitle{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:26px;font-weight:700;fill:#1e3540}.h2{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:30px;font-weight:800;fill:#074f4b}.body{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:24px;fill:#1d3038}.num{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:58px;font-weight:800;fill:#074f4b}.small{font-family:"Trebuchet MS",Verdana,sans-serif;font-size:19px;fill:#2d4148}.orange{fill:#e78232}.green{fill:#2f9246}.line{stroke:#26383d;stroke-width:4;stroke-linecap:round}</style></defs> + <rect class="bg" width="1600" height="900"/><rect x="56" y="42" width="1488" height="816" rx="34" class="panel"/> + <text x="800" y="116" text-anchor="middle" class="title">Trouver une fraction d'une quantité</text> + <text x="800" y="160" text-anchor="middle" class="subtitle">Je partage, puis je prends les parts demandées</text> + <line x1="430" y1="194" x2="1170" y2="194" stroke="#dbe8e3" stroke-width="4"/> + <g transform="translate(120 245)"><rect width="640" height="360" rx="24" class="soft"/><g class="math-expression"><text x="34" y="60" class="h2">Exemple : </text><g transform="translate(190.8 60)" class="fraction-g"><text x="14" y="-9.52" text-anchor="middle" class="h2">3</text><line x1="0" y1="1.12" x2="28" y2="1.12" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="16.24" text-anchor="middle" class="h2">4</text></g><text x="224.8" y="60" class="h2"> de 20</text></g> + <g transform="translate(80 125)"><rect width="440" height="90" rx="12" fill="#f7fbf9" stroke="#26383d" stroke-width="3"/><rect width="110" height="90" rx="12" class="orange"/><rect x="110" width="110" height="90" class="orange"/><rect x="220" width="110" height="90" class="orange"/><line x1="110" y1="0" x2="110" y2="90" class="line"/><line x1="220" y1="0" x2="220" y2="90" class="line"/><line x1="330" y1="0" x2="330" y2="90" class="line"/></g> + <text x="80" y="270" class="body">20 partage en 4 parts : chaque part vaut 5.</text><text x="80" y="315" class="body">Je prends 3 parts : 15.</text> + </g> + <g transform="translate(825 245)"><rect width="625" height="360" rx="24" class="panel"/><text x="36" y="60" class="h2">La méthode</text><text x="70" y="130" class="num">20 ÷ 4 = 5</text><text x="70" y="205" class="num">5 x 3 = 15</text><text x="70" y="285" class="body">Le dénominateur partage.</text><text x="70" y="323" class="body">Le numérateur dit combien prendre.</text></g> + <g transform="translate(170 660)"><rect width="1260" height="105" rx="24" class="panel"/><text x="36" y="47" class="h2">À retenir</text><g class="math-expression"><text x="36" y="84" class="body">Pour trouver </text><g transform="translate(210.72 84)" class="fraction-g"><text x="14" y="-8.16" text-anchor="middle" class="body">3</text><line x1="0" y1="0.96" x2="28" y2="0.96" stroke="#074f4b" stroke-width="4" stroke-linecap="round"/><text x="14" y="13.92" text-anchor="middle" class="body">4</text></g><text x="244.72" y="84" class="body"> d'une quantité : je divise par 4, puis je multiplie par 3.</text></g></g> +</svg> diff --git a/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/README.md b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/README.md new file mode 100644 index 0000000..ac78529 --- /dev/null +++ b/backend/contenus_pedagogiques/cycle_3/mathematiques/cm1/01_nombres_calcul_resolution/01B_fractions/svg/README.md @@ -0,0 +1,12 @@ +# SVG - CM1 - Fractions + +Ce dossier contient les fiches SVG de lecon du sous-theme `01B_fractions`. + +Regles : + +- une fiche SVG = une micro-competence ; +- format `1600 x 900` ; +- pas de professeur integre ; +- texte court et lisible ; +- schemas mathematiques simples ; +- aucune superposition texte/schema. diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..b91be6e --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1716 @@ +{ + "name": "prof-virtuel-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "prof-virtuel-frontend", + "version": "0.1.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.4", + "vite": "^5.4.14" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz", + "integrity": "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.349", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.349.tgz", + "integrity": "sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 3be15a8..123014d 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -94,6 +94,89 @@ function ProgressCard({ item }) { ) } +function flattenProgramTree(node, depth = 0, rows = []) { + if (!node) return rows + rows.push({ node, depth }) + ;(node.children || []).forEach((child) => flattenProgramTree(child, depth + 1, rows)) + return rows +} + +function ProgramReviewPanel({ selectedNode, reviewForm, onReviewChange, onSaveReview }) { + if (!selectedNode) { + return ( + <section className="admin-empty"> + <h2>Programme</h2> + <p className="muted">Choisis un élément de l’arborescence pour le relire, le valider ou laisser un commentaire.</p> + </section> + ) + } + + const status = selectedNode.status || {} + const review = selectedNode.review || {} + return ( + <section className="admin-program-review"> + <div className="admin-log-detail-head"> + <div> + <span className="stage-label">{selectedNode.type}</span> + <h2>{selectedNode.label}</h2> + <p className="muted">{selectedNode.path || selectedNode.key}</p> + </div> + {review.status && <span className={`review-pill ${review.status}`}>{review.status}</span>} + </div> + + {Object.keys(status).length > 0 && ( + <div className="program-status-grid"> + <span>Micro-fiches: {status.micro_fiches ?? 0}</span> + <span>SVG leçon: {status.lesson_svg ?? 0}</span> + <span>Cards: {status.cards ?? 0}</span> + <span>Contextes: {status.contexts ?? 0}</span> + <span>Exercices: {status.text_exercises ?? 0}</span> + <span>SVG exercices: {status.exercise_svg ?? 0}</span> + </div> + )} + + {selectedNode.url && ( + <div className="program-node-preview"> + <img src={selectedNode.url} alt={selectedNode.label} /> + </div> + )} + + {review.comment && ( + <div className="admin-review-note"> + <strong>Dernier commentaire</strong> + <p>{review.comment}</p> + <span>{review.reviewer} · {review.updated_at}</span> + </div> + )} + + <form className="admin-review-form" onSubmit={onSaveReview}> + <label> + <span>Statut de validation</span> + <select + value={reviewForm.status} + onChange={(event) => onReviewChange({ ...reviewForm, status: event.target.value })} + > + <option value="validated">Validé</option> + <option value="needs_changes">À modifier</option> + <option value="blocked">Bloqué</option> + <option value="draft">Brouillon</option> + </select> + </label> + <label> + <span>Commentaire visible par Codex</span> + <textarea + value={reviewForm.comment} + onChange={(event) => onReviewChange({ ...reviewForm, comment: event.target.value })} + placeholder="Note ce qui dépasse, ce qui est incorrect, ou ce qui doit être régénéré." + rows={5} + /> + </label> + <button type="submit">Enregistrer la revue</button> + </form> + </section> + ) +} + function getSupportedRecordingMimeType() { if (typeof MediaRecorder === 'undefined') return '' const candidates = [ @@ -210,6 +293,9 @@ function TutorApp({ currentUser, onLogout }) { const [selectedVoiceProfileId, setSelectedVoiceProfileId] = useState('') const [programLessons, setProgramLessons] = useState([]) const [programStatus, setProgramStatus] = useState(null) + const [programTree, setProgramTree] = useState(null) + const [selectedProgramNodeKey, setSelectedProgramNodeKey] = useState('') + const [programReviewForm, setProgramReviewForm] = useState({ status: 'needs_changes', comment: '' }) const [studentProgram, setStudentProgram] = useState(null) const [activeAssetIndex, setActiveAssetIndex] = useState(0) const [activeSectionIndex, setActiveSectionIndex] = useState(0) @@ -265,6 +351,11 @@ function TutorApp({ currentUser, onLogout }) { }, [currentFocusSkill, progress]) const lessonPercent = lessonFocus ? Math.round(lessonFocus.mastery_score) : averageScore + const programRows = useMemo(() => flattenProgramTree(programTree).filter((row) => row.node.type !== 'root'), [programTree]) + const selectedProgramNode = useMemo( + () => programRows.find((row) => row.node.key === selectedProgramNodeKey)?.node || null, + [programRows, selectedProgramNodeKey] + ) const exerciseLabel = { 'not-started': 'Pas encore lance', @@ -275,8 +366,21 @@ function TutorApp({ currentUser, onLogout }) { useEffect(() => { loadStudents() + if (!isStudentUser) { + loadProgramTree() + loadProgramStatus() + } }, [currentUser]) + useEffect(() => { + if (selectedProgramNode) { + setProgramReviewForm({ + status: selectedProgramNode.review?.status || 'needs_changes', + comment: selectedProgramNode.review?.comment || '', + }) + } + }, [selectedProgramNodeKey, selectedProgramNode?.review?.updated_at]) + function pushAudioDebug(message) { if (!DEBUG_AUDIO) return const timestamp = new Date().toLocaleTimeString('fr-FR', { hour12: false }) @@ -648,6 +752,36 @@ function TutorApp({ currentUser, onLogout }) { } } + async function loadProgramTree() { + if (isStudentUser) return + try { + const data = await apiFetch('/admin/program/tree') + setProgramTree(data) + setSelectedProgramNodeKey((current) => current || data.children?.[0]?.key || '') + } catch (error) { + setErrorMessage(error.message || 'Impossible de charger l’arborescence du programme.') + } + } + + async function saveProgramReview(event) { + event.preventDefault() + if (!selectedProgramNode) return + try { + await apiFetch('/admin/program/review', { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + node_key: selectedProgramNode.key, + status: programReviewForm.status, + comment: programReviewForm.comment, + }), + }) + await loadProgramTree() + } catch (error) { + setErrorMessage(error.message || 'Impossible d’enregistrer la revue du programme.') + } + } + async function loadStudentProgram(studentId) { try { const data = await apiFetch(`/students/${studentId}/program`) @@ -1644,6 +1778,38 @@ function TutorApp({ currentUser, onLogout }) { <span>{currentUser.username} · {currentUser.role}</span> </header> + <section className="admin-program-browser"> + <div className="program-tree-panel"> + <div className="admin-log-detail-head"> + <h2>Arborescence du programme</h2> + <button type="button" className="secondary-button" onClick={loadProgramTree}> + Rafraîchir + </button> + </div> + <div className="program-tree-list"> + {programRows.map(({ node, depth }) => ( + <button + key={node.key} + type="button" + className={`program-tree-row ${selectedProgramNodeKey === node.key ? 'active' : ''}`} + style={{ paddingLeft: `${0.65 + depth * 1.05}rem` }} + onClick={() => setSelectedProgramNodeKey(node.key)} + > + <span>{node.label}</span> + <em>{node.type}</em> + {node.review?.status && <strong>{node.review.status}</strong>} + </button> + ))} + </div> + </div> + <ProgramReviewPanel + selectedNode={selectedProgramNode} + reviewForm={programReviewForm} + onReviewChange={setProgramReviewForm} + onSaveReview={saveProgramReview} + /> + </section> + {selectedStudent ? ( <section className="admin-detail"> <div className="admin-student-card"> diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 72b777f..130c20a 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -172,6 +172,129 @@ button:disabled { opacity: 0.5; cursor: not-allowed; } flex-direction: column; gap: 1rem; } +.admin-program-browser { + display: grid; + grid-template-columns: minmax(280px, 0.9fr) minmax(360px, 1.4fr); + gap: 1rem; + min-height: 520px; +} +.program-tree-panel, +.admin-program-review { + display: flex; + flex-direction: column; + gap: 1rem; + min-height: 0; + border: 1px solid #e5e7eb; + border-radius: 16px; + background: #f8fafc; + padding: 1rem; +} +.program-tree-list { + display: flex; + flex-direction: column; + gap: 0.35rem; + min-height: 0; + overflow-y: auto; +} +.program-tree-row { + display: grid; + grid-template-columns: minmax(0, 1fr) auto auto; + align-items: center; + gap: 0.5rem; + width: 100%; + border: 1px solid #e5e7eb; + border-radius: 10px; + background: white; + color: #14213d; + padding: 0.55rem 0.65rem; + text-align: left; +} +.program-tree-row.active { + border-color: #2563eb; + background: #eff6ff; +} +.program-tree-row span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.program-tree-row em, +.program-tree-row strong, +.review-pill { + border-radius: 999px; + padding: 0.16rem 0.45rem; + background: #e2e8f0; + color: #475569; + font-size: 0.75rem; + font-style: normal; + font-weight: 800; + white-space: nowrap; +} +.program-tree-row strong, +.review-pill.validated { + background: #dcfce7; + color: #166534; +} +.review-pill.needs_changes { + background: #ffedd5; + color: #9a3412; +} +.review-pill.blocked { + background: #fee2e2; + color: #991b1b; +} +.program-status-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.5rem; +} +.program-status-grid span, +.admin-review-note { + border: 1px solid #e5e7eb; + border-radius: 10px; + background: white; + padding: 0.65rem; +} +.program-node-preview { + min-height: 260px; + border: 1px solid #e5e7eb; + border-radius: 12px; + background: white; + padding: 0.75rem; +} +.program-node-preview img { + width: 100%; + max-height: 420px; + object-fit: contain; + display: block; +} +.admin-review-note p { + margin: 0.35rem 0; + line-height: 1.45; +} +.admin-review-note span { + color: #64748b; + font-size: 0.85rem; +} +.admin-review-form { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.admin-review-form label { + display: flex; + flex-direction: column; + gap: 0.35rem; + font-weight: 700; +} +.admin-review-form textarea { + min-height: 120px; + resize: vertical; + border: 1px solid #cfd7e6; + border-radius: 12px; + padding: 0.8rem 1rem; + font: inherit; +} .admin-asset-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); @@ -683,7 +806,8 @@ button:disabled { opacity: 0.5; cursor: not-allowed; } } .admin-header, - .admin-detail { + .admin-detail, + .admin-program-browser { grid-template-columns: 1fr; }