summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.py7
-rw-r--r--configuration.py2
-rw-r--r--data/FAQ_data.txt55
-rw-r--r--static/outilspage.js38
-rw-r--r--templates/index.html15
5 files changed, 75 insertions, 42 deletions
diff --git a/app.py b/app.py
index 26c8a2b..5875435 100644
--- a/app.py
+++ b/app.py
@@ -56,8 +56,9 @@ def courbe_image(ext):
56 liste_err = initialise_erreurs() 56 liste_err = initialise_erreurs()
57 data = flask.request.form 57 data = flask.request.form
58 enfants_add = [] # Enfants additionnels 58 enfants_add = [] # Enfants additionnels
59 for i in range(2, 11): 59 i=2
60 if 'fichier_donnees_'+str(i) in flask.request.files: # UUn enfant à ajouter 60 while "couleur_donnees_"+str(i) in data: # Tant qu'il y a des données de ce type
61 if 'fichier_donnees_'+str(i) in flask.request.files: # Un enfant à ajouter
61 fichier = flask.request.files["fichier_donnees_"+str(i)] 62 fichier = flask.request.files["fichier_donnees_"+str(i)]
62 chaine = fichier.read() # On récupère la chaîne 63 chaine = fichier.read() # On récupère la chaîne
63 if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable 64 if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable
@@ -75,7 +76,7 @@ def courbe_image(ext):
75 coul2 = couleurs.rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err) 76 coul2 = couleurs.rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err)
76 enfant2 = donnees.eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2) 77 enfant2 = donnees.eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2)
77 enfants_add.append(enfant2) 78 enfants_add.append(enfant2)
78 79 i+=1
79 80
80 # récupérer les données du formulaire proprement 81 # récupérer les données du formulaire proprement
81 config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err) 82 config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err)
diff --git a/configuration.py b/configuration.py
index f7dc1f3..0fc8f20 100644
--- a/configuration.py
+++ b/configuration.py
@@ -21,6 +21,7 @@ CONFIG["extradata"] = ["calculextradata", "calculextratemps"]
21# Sous forme "item: description" 21# Sous forme "item: description"
22CONFIG["liste_symboles"] = {"o": "&#x25CF;", "^": "&#x25B2;", "v": "&#x25BC;", "<": "&#x25C0;", ">": "&#x25B6;", "s": "&#x25A0;", "p": "&#11039;", "P": "&#x2795;", "x": "&times;", "D": "&#x25C6;", '$\u2665$':"&#x2665;", '$\u2217$':"&#x2217;" } 22CONFIG["liste_symboles"] = {"o": "&#x25CF;", "^": "&#x25B2;", "v": "&#x25BC;", "<": "&#x25C0;", ">": "&#x25B6;", "s": "&#x25A0;", "p": "&#11039;", "P": "&#x2795;", "x": "&times;", "D": "&#x25C6;", '$\u2665$':"&#x2665;", '$\u2217$':"&#x2217;" }
23 23
24CONFIG["nb_fichiers_enfants_add"] = 3 # Nombre d'enfants additionnels au départ
24 25
25# fichiers 26# fichiers
26 27
@@ -139,6 +140,7 @@ DEFAUT["agecorrige"] = "oui"
139DEFAUT["liste_reperes"] = [] 140DEFAUT["liste_reperes"] = []
140DEFAUT["nb_reperes_mini"] = 3 # Nombre minimum de lignes de repères 141DEFAUT["nb_reperes_mini"] = 3 # Nombre minimum de lignes de repères
141 142
143
142# initialiser la config 144# initialiser la config
143def config_init(): 145def config_init():
144 c = DEFAUT.copy() 146 c = DEFAUT.copy()
diff --git a/data/FAQ_data.txt b/data/FAQ_data.txt
index d7e41c7..cbc3a56 100644
--- a/data/FAQ_data.txt
+++ b/data/FAQ_data.txt
@@ -2,11 +2,44 @@
2 2
3"Utilisation","Comment sauvegarder mes données pour une prochaine fois ?","L'outil ne propose pas de sauvegarde en ligne, car il ne garde aucune donnée personnelle. Vous pouvez télécharger vos propres données (dans un format adapté) en cliquant sur «&nbsp;Télécharger les données&nbsp;». Enregistrez ce fichier quelque part. Pour les réutiliser, utilisez la partie ""Importer le fichier de données"" puis ""Charger les données"" : les champs seront alors pré-remplis et vous pourrez les modifier ou ajouter des données (par exemple une visite médicale récente avec de nouvelles données de poids ou de taille)." 3"Utilisation","Comment sauvegarder mes données pour une prochaine fois ?","L'outil ne propose pas de sauvegarde en ligne, car il ne garde aucune donnée personnelle. Vous pouvez télécharger vos propres données (dans un format adapté) en cliquant sur «&nbsp;Télécharger les données&nbsp;». Enregistrez ce fichier quelque part. Pour les réutiliser, utilisez la partie ""Importer le fichier de données"" puis ""Charger les données"" : les champs seront alors pré-remplis et vous pourrez les modifier ou ajouter des données (par exemple une visite médicale récente avec de nouvelles données de poids ou de taille)."
4 4
5
5"Utilisation","Je ne comprends pas comment saisir les données !","Pour chaque donnée, vous avez le choix entre donner son âge, ou donner la date de la pesée/mesure. Si vous choisissez la date, il faut que vous ayez rempli la date de naissance (sinon l'outil ne peut pas calculer l'âge !). Pour l'âge, vous pouvez indiquer en années, mois, semaines, jours, et mélanger plusieurs unités. Par exemple 2m3j pour «&nbsp;2 mois 3 jours&nbsp;». Ne remplissez qu'un des deux champs : âge ou date. Puis saisissez le poids et/ou la taille dans la colonne de droite. Vous pouvez avoir pour un même âge plusieurs données (taille ET poids) ou n'avoir que l'un des deux.<br> 6"Utilisation","Je ne comprends pas comment saisir les données !","Pour chaque donnée, vous avez le choix entre donner son âge, ou donner la date de la pesée/mesure. Si vous choisissez la date, il faut que vous ayez rempli la date de naissance (sinon l'outil ne peut pas calculer l'âge !). Pour l'âge, vous pouvez indiquer en années, mois, semaines, jours, et mélanger plusieurs unités. Par exemple 2m3j pour «&nbsp;2 mois 3 jours&nbsp;». Ne remplissez qu'un des deux champs : âge ou date. Puis saisissez le poids et/ou la taille dans la colonne de droite. Vous pouvez avoir pour un même âge plusieurs données (taille ET poids) ou n'avoir que l'un des deux.<br>
6Si vous manquez de lignes, vous pouvez cliquer sur ""Ajouter des lignes"" pour avoir plus de champs de données. Il n'y a pas de problème à laisser des champs vides, ils seront simplement ignorés." 7Si vous manquez de lignes, vous pouvez cliquer sur ""Ajouter des lignes"" pour avoir plus de champs de données. Il n'y a pas de problème à laisser des champs vides, ils seront simplement ignorés."
7 8
9
8"Utilisation","Une erreur s'affiche en haut de ma courbe, je ne comprends pas.","Si le message d'erreur n'est pas clair pour vous, c'est qu'il est probablement dû à un souci interne. Si vous le pouvez, contactez l'administratrice, en citant le message d'erreur et en donnant les données qui ont amené à cette erreur (fichier de données, ou données saisies). Merci d'avance ! :)" 10"Utilisation","Une erreur s'affiche en haut de ma courbe, je ne comprends pas.","Si le message d'erreur n'est pas clair pour vous, c'est qu'il est probablement dû à un souci interne. Si vous le pouvez, contactez l'administratrice, en citant le message d'erreur et en donnant les données qui ont amené à cette erreur (fichier de données, ou données saisies). Merci d'avance ! :)"
9 11
12"Utilisation - préférences du graphique","Pourquoi tracer des courbes vides ?","Cela peut servir à tracer une courbe de référence à imprimer pour tracer la courbe à la main. Cette option est désactivée par défaut."
13
14"Utilisation - préférences du graphique","C'est quoi la différence entre la courbe percentiles et moyenne/écarts-types ?","Ce sont deux manières de comparer son enfant à la «&nbsp;référence&nbsp;». Si vous ne savez pas la différence entre une moyenne et une médiane, retenez juste que ce sont des calculs un peu différents, mais cela ne change pas l'allure de la courbe, si votre enfant «&nbsp;suit&nbsp;» un couloir sur un type de courbe ce sera pareil sur l'autre. Vous pouvez au pire choisir celle que vous préférez. ;)
15<br>Pour les curieuses et les curieux :
16<ul>
17<li>Médiane et percentiles : si votre enfant est (par exemple) au 30e percentile, cela signifie qu'il est dans la 30e «&nbsp;tranche&nbsp;» sur 100 tranches. Autrement dit 29% des enfants sont plus légers que lui, et 70% sont plus lourds. Cela donne une idée de où il se situe par rapport aux autres. <a href=""https://fr.wikipedia.org/wiki/Centile"">Plus d'infos (maths)</a></li>
18<li>Moyenne et écart-types : la moyenne est obtenue en faisant la somme et en divisant par le nombre d'enfants. L'écart-type (noté &sigma;) est une sorte d'«&nbsp;écart moyen&nbsp;» à la moyenne. On regarde donc généralement la moyenne, la moyenne + 1&sigma;, moyenne +2&sigma;, moyenne -1 &sigma;, etc. <a href=""https://fr.wikipedia.org/wiki/%C3%89cart_type"">Plus d'infos (maths)</a></li>
19</ul>
20Si la répartition des données est «&nbsp;bonne&nbsp;» (on parle de gaussienne entre matheuses et matheux), alors la moyenne correspond à la médiane, la moyenne + 1&sigma; correspond environ au 84e percentile, la moyenne -1&sigma; correspond au 16e percentile. Pour ces données, il semble que ce soit assez proche d'une gaussienne."
21
22"Utilisation - préférences du graphique","Que signifie même échelle d'âge sur tous les graphiques&nbsp;?","Si, par exemple, vous avez des données de poids qui vont jusqu'à 2 ans et des données de taille qui vont jusqu'à 6 mois, alors chaque graphique (taille et poids) aura son échelle différente. Mais si vous cochez la case, alors tous seront sur une échelle similaire (c'est-à-dire jusqu'à 2 ans et un peu plus). Si vous saisissez un âge maximum du graphique, c'est cette limite maximum qui sera appliquée sur tous les graphiques."
23
24"Utilisation - préférences du graphique","C'est quoi la grille améliorée ?","La grille non-améliorée est plus simple et a peu de repères, la grille améliorée en a nettement plus."
25
26"Utilisation - préférences du graphique","Que sont les repères sur les courbes ?","Si vous souhaitez tracer un trait vertical sur les courbes, avec une annotation, par exemple un événement particulier que vous souhaitez mettre en valeur sur la courbe (début de diversification, apprentissage de la marche, maladie, ...). Vous pouvez en ajouter autant que vous voulez. Si vous souhaitez imprimer une courbe sans ces repères, mais sans les supprimer, il suffit de décocher le «&nbsp;Tracer&nbsp;». Ainsi les repères seront quand même enregistrés (pour une prochaine fois) mais non tracés."
27
28"Utilisation - extrapolation","C'est quoi l'extrapolation ?","À partir des données saisies, on peut calculer, en supposant que l'enfant continue à suivre une courbe, quelle sera sa taille, son poids, etc à un certain âge. On peut choisir sur combien de données on veut extrapoler. Par défaut, c'est une seule valeur : on calcule alors sur quelle ""courbe"" on se situe et on trace à partir de là, mais on peut choisir d'extrapoler à partir de plus de données (par exemple les 3 dernières valeurs, ou toutes les valeurs. Si on coche la case adaptée, la courbe sera tracée en pointillés."
29
30"Utilisation - extrapolation","Mon enfant est hors des clous, et je n'arrive pas à avoir l'extrapolation !","Une solution possible est de passer en courbe des moyennes/écarts-types. Les données OMS pour les percentiles vont un peu moins loin."
31
32"Utilisation - extrapolation","Quels calculs peut-on faire ?","On peut faire des calculs dans deux sens : calculer le poids (ou la taille, ou autre) à un âge donné, ou l'inverse, à quel âge l'enfant aura tel poids (ou taille, etc). Les résultats s'afficheront en bas des courbes. On peut demander plusieurs calculs de ce genre, ils s'ajouteront à ceux déjà présents. Ces calculs ne sont pas sauvegardés par contre."
33
34"Utilisation - extrapolation","Mais ça marche comment l'extrapolation en détail, dis dis ?","Mathophobes s'asbtenir !<br>
35Pour chaque donnée concernée (utilisée pour l'extrapolation), on calcule entre quelles courbes OMS on se situe. Il y a plus de courbes dans les données de l'OMS que de courbes tracées donc c'est plus précis que le graphique ne le laisse voir. <br>
36Si on trouve que la donnée se situe entre les courbes 5 et 6 (par exemple), on calcule alors le barycentre par rapport aux courbes 5 et 6 : par exemple la donnée est à 20% de la courbe 5 et à 80% de la courbe 6 (donc plutôt proche de la courbe 6). Les données extrapolées seront donc basées sur 20% de la courbe 5 et 80% de la courbe 6.<br>
37S'il y a plusieurs données, alors on cherche dans quel intervalle de courbes elles se situent (par exemple toutes les données sont entre les courbes 3 et 6), puis on calcule la moyenne des barycentres par rapport aux courbes 3 et 6, et on obtient les valeurs suivantes en se basant sur cette moyenne.
38<br>(Si vous avez un meilleur algo je prends, en attendant, ce truc marche)"
39
40"Utilisation - courbes multiples","C'est quoi les courbes multiples&nbsp;?","Vous pouvez souhaiter tracer sur une même courbe de poids (par exemple) l'évolution du poids de deux (ou plus) enfants, du même âge ou d'âges différents. Pour cela, il faut avoir déjà sous forme de fichier les données des enfants additionnels. Seuls le nom de l'enfant et ses données sont extraites, les paramètres du graphiques seront ceux définis plus haut (donc pour l'enfant «&nbsp;principal&nbsp;»). C'est pourquoi vous pouvez choisir un symbole et une couleur pour chacun des graphiques additionnels. Par contre ces paramètres ne sont pas sauvegardés (seuls ceux de l'enfant «&nbsp;principal&nbsp;» le sont)."
41
42
10"Courbe","À quoi sert ce site ?","Il sert à tracer les courbes de croissance des bébés et jeunes enfants en fonction de leur âge, comme sur le carnet de santé, et la compare aux courbes de références de l'Organisation Mondiale de la Santé. Ces courbes sont a priori prévues pour des enfants nés à terme en bonne santé. Pour un enfant prématuré ou à situation particulière, référez vous à un.e professionnel.le de santé." 43"Courbe","À quoi sert ce site ?","Il sert à tracer les courbes de croissance des bébés et jeunes enfants en fonction de leur âge, comme sur le carnet de santé, et la compare aux courbes de références de l'Organisation Mondiale de la Santé. Ces courbes sont a priori prévues pour des enfants nés à terme en bonne santé. Pour un enfant prématuré ou à situation particulière, référez vous à un.e professionnel.le de santé."
11 44
12"Courbe","Pourquoi des courbes OMS et pas des courbes françaises ?","Les particularités de ces données sont les suivantes : bébés et enfants choisis dans différents pays du monde (et non dans un seul pays), dans des familles raisonnablement aisées (pour éviter les problèmes liés à la malnutrition), et des bébés allaités. Plus d'infos <a href=""https://www.who.int/childgrowth/standards/technical_report/en/"">ici</a> (en anglais). Les courbes du carnet de santé français récent (si vous avez celles datant d'avant 2018, elles sont un peu anciennes par contre) sont basées sur un échantillon assez large de bébés français, allaités ou non (et donc peu allaités en proportion). Il y a quelques différences entre les bébés allaités et non allaités, surtout dans les 6-8 premiers mois : si votre bébé est allaité, cela vaut le coup de regarder ce que donne la courbe OMS par rapport à celle du carnet." 45"Courbe","Pourquoi des courbes OMS et pas des courbes françaises ?","Les particularités de ces données sont les suivantes : bébés et enfants choisis dans différents pays du monde (et non dans un seul pays), dans des familles raisonnablement aisées (pour éviter les problèmes liés à la malnutrition), et des bébés allaités. Plus d'infos <a href=""https://www.who.int/childgrowth/standards/technical_report/en/"">ici</a> (en anglais). Les courbes du carnet de santé français récent (si vous avez celles datant d'avant 2018, elles sont un peu anciennes par contre) sont basées sur un échantillon assez large de bébés français, allaités ou non (et donc peu allaités en proportion). Il y a quelques différences entre les bébés allaités et non allaités, surtout dans les 6-8 premiers mois : si votre bébé est allaité, cela vaut le coup de regarder ce que donne la courbe OMS par rapport à celle du carnet."
@@ -19,17 +52,9 @@ Si vous manquez de lignes, vous pouvez cliquer sur ""Ajouter des lignes"" pour a
19"Courbe","Que faire pour un enfant prématuré ?","Si votre enfant est né prématurément (c'est-à-dire avant 37 semaines d'aménorrhée), on a dû vous fournir des courbes de référence pour le début de sa vie. Ensuite, une fois que l'enfant a atteint son ""terme"", il est possible d'utiliser les courbes de références normales <em>en âge corrigé</em>. C'est possible dans cet outil, il suffit d'indiquer de ""combien"" l'enfant est prématuré. Puis on peut cocher ou pas « afficher en âge corrigé » : l'affichage des courbes sera le même (courbes de référence décalées pour correspondre à l'âge corrigé), mais dans un des cas l'affichage des âge sera l'âge corrigé, dans l'autre l'âge réel de l'enfant.<br> 52"Courbe","Que faire pour un enfant prématuré ?","Si votre enfant est né prématurément (c'est-à-dire avant 37 semaines d'aménorrhée), on a dû vous fournir des courbes de référence pour le début de sa vie. Ensuite, une fois que l'enfant a atteint son ""terme"", il est possible d'utiliser les courbes de références normales <em>en âge corrigé</em>. C'est possible dans cet outil, il suffit d'indiquer de ""combien"" l'enfant est prématuré. Puis on peut cocher ou pas « afficher en âge corrigé » : l'affichage des courbes sera le même (courbes de référence décalées pour correspondre à l'âge corrigé), mais dans un des cas l'affichage des âge sera l'âge corrigé, dans l'autre l'âge réel de l'enfant.<br>
20Dans tous les cas, gardez en tête que la courbe de référence peut ne pas être pertinente, et en cas de doute référez-vous au/à la professionnel(le) de santé qui suit votre enfant." 53Dans tous les cas, gardez en tête que la courbe de référence peut ne pas être pertinente, et en cas de doute référez-vous au/à la professionnel(le) de santé qui suit votre enfant."
21 54
22"Courbe","Pourquoi une courbe de «&nbsp;neutre&nbsp;» ? Et c'est quoi ?","Pourquoi pas ? C'est simplement une courbe moyennée des courbes garçon/fille. Ce n'est absolument pas une vraie référence, mais ça ne coûtait rien d'essayer. Je n'ai aucune connaissance dans les données de croissance des enfants intersexes, et s'il existe pour ces enfants des courbes de référence, peut-être que celle-ci aurait du sens, peut-être pas. Elle permet accessoirement de générer une courbe «&nbsp;acceptable&nbsp;» même si on n'a pas spécifié sexe masculin/féminin. Au pire vous pouvez considérer que c'est une «&nbsp;courbe jouet&nbsp;»." 55"Courbe","Pourquoi une courbe de «&nbsp;neutre&nbsp;» ? Et c'est quoi ?","C'est simplement une courbe moyennée des courbes garçon/fille. Ce n'est absolument pas une vraie référence, mais ça ne coûtait rien d'essayer. Elle peut servir de référence acceptable pour deux courbes d'enfants de sexe différent. Je n'ai aucune connaissance dans les données de croissance des enfants intersexes, et s'il existe pour ces enfants des courbes de référence, peut-être que celle-ci aurait du sens, peut-être pas. Vous pouvez considérer que c'est une «&nbsp;courbe jouet&nbsp;»."
23 56
24 57
25"Courbe","C'est quoi la différence entre la courbe percentiles et moyenne/écarts-types ?","Ce sont deux manières de comparer son enfant à la «&nbsp;référence&nbsp;». Si vous ne savez pas la différence entre une moyenne et une médiane, retenez juste que ce sont des calculs un peu différents, mais cela ne change pas l'allure de la courbe, si votre enfant «&nbsp;suit&nbsp;» un couloir sur un type de courbe ce sera pareil sur l'autre. Vous pouvez au pire choisir celle que vous préférez. ;)
26<br>Pour les curieuses et les curieux :
27<ul>
28<li>Médiane et percentiles : si votre enfant est (par exemple) au 30e percentile, cela signifie qu'il est dans la 30e «&nbsp;tranche&nbsp;» sur 100 tranches. Autrement dit 29% des enfants sont plus légers que lui, et 70% sont plus lourds. Cela donne une idée de où il se situe par rapport aux autres. <a href=""https://fr.wikipedia.org/wiki/Centile"">Plus d'infos (maths)</a></li>
29<li>Moyenne et écart-types : la moyenne est obtenue en faisant la somme et en divisant par le nombre d'enfants. L'écart-type (noté &sigma;) est une sorte d'«&nbsp;écart moyen&nbsp;» à la moyenne. On regarde donc généralement la moyenne, la moyenne + 1&sigma;, moyenne +2&sigma;, moyenne -1 &sigma;, etc. <a href=""https://fr.wikipedia.org/wiki/%C3%89cart_type"">Plus d'infos (maths)</a></li>
30</ul>
31Si la répartition des données est «&nbsp;bonne&nbsp;» (on parle de gaussienne entre matheuses et matheux), alors la moyenne correspond à la médiane, la moyenne + 1&sigma; correspond environ au 84e percentile, la moyenne -1&sigma; correspond au 16e percentile. Pour ces données, il semble que ce soit assez proche d'une gaussienne."
32
33"Courbe de poids","Mon enfant doit-il être dans la moyenne ?","Il y a des petits bébés, des gros bébés, des bébés moyens. En général, un bébé en bonne santé ""suit"" un couloir de courbe, que ce soit la courbe des «&nbsp;bébés crevettes&nbsp;» ou des «&nbsp;bébés dodus&nbsp;». Un changement de couloir (poids en baisse le plus souvent) peut éventuellement être signe d'un problème. Ou pas. Dans tous les cas, référez vous à des professionnels de santé et/ou de la petite enfance." 58"Courbe de poids","Mon enfant doit-il être dans la moyenne ?","Il y a des petits bébés, des gros bébés, des bébés moyens. En général, un bébé en bonne santé ""suit"" un couloir de courbe, que ce soit la courbe des «&nbsp;bébés crevettes&nbsp;» ou des «&nbsp;bébés dodus&nbsp;». Un changement de couloir (poids en baisse le plus souvent) peut éventuellement être signe d'un problème. Ou pas. Dans tous les cas, référez vous à des professionnels de santé et/ou de la petite enfance."
34 59
35"Courbe de poids","Pourquoi faire des courbes de référence différenciées selon le sexe ?","Il se trouve que l'évolution de poids diffère selon ce critère. S'il s'agissait d'une simple différence de poids en moyenne, une courbe mixte serait adaptée (puisqu'on s'intéresse à l'allure de la courbe et non au poids absolu), mais les courbes sont légèrement différentes.<br> 60"Courbe de poids","Pourquoi faire des courbes de référence différenciées selon le sexe ?","Il se trouve que l'évolution de poids diffère selon ce critère. S'il s'agissait d'une simple différence de poids en moyenne, une courbe mixte serait adaptée (puisqu'on s'intéresse à l'allure de la courbe et non au poids absolu), mais les courbes sont légèrement différentes.<br>
@@ -37,18 +62,6 @@ Vous trouverez <a href=""static/courbe_oms_gf_1an.png"">ici</a> et <a href=""sta
37 62
38"Courbe de taille","Pourquoi une cassure à 2 ans pour la taille ?","Quand on mesure un enfant, il y a environ 1cm de différence entre la mesure allongée (pour les bébés) et la mesure debout (pour les enfants). Dans ses données, l'OMS a choisi de mesurer les enfants de moins de deux ans allongés, et ensuite debout. Donc à partir de 2 ans on observe une petite cassure, qui est simplement due au fait qu'on a mesuré à partir de là les enfants debout (et non, ils n'ont pas rétréci !). Si votre enfant a été mesuré debout avant 2 ans, ou allongé après, vous pouvez ajuster d'environ 1cm pour comparer aux courbes de référence." 63"Courbe de taille","Pourquoi une cassure à 2 ans pour la taille ?","Quand on mesure un enfant, il y a environ 1cm de différence entre la mesure allongée (pour les bébés) et la mesure debout (pour les enfants). Dans ses données, l'OMS a choisi de mesurer les enfants de moins de deux ans allongés, et ensuite debout. Donc à partir de 2 ans on observe une petite cassure, qui est simplement due au fait qu'on a mesuré à partir de là les enfants debout (et non, ils n'ont pas rétréci !). Si votre enfant a été mesuré debout avant 2 ans, ou allongé après, vous pouvez ajuster d'environ 1cm pour comparer aux courbes de référence."
39 64
40"Utilisation avancée","C'est quoi l'extrapolation ?","À partir des données saisies, on peut calculer, en supposant que l'enfant continue à suivre une courbe, quelle sera sa taille, son poids, etc à un certain âge. On peut choisir sur combien de données on veut extrapoler. Par défaut, c'est une seule valeur : on calcule alors sur quelle ""courbe"" on se situe et on trace à partir de là, mais on peut choisir d'extrapoler à partir de plus de données (par exemple les 3 dernières valeurs, ou toutes les valeurs. Si on coche la case adaptée, la courbe sera tracée en pointillés."
41
42"Utilisation avancée","Mon enfant est hors des clous, et je n'arrive pas à avoir l'extrapolation !","Une solution possible est de passer en courbe des moyennes/écarts-types. Les données OMS pour les percentiles vont un peu moins loin."
43
44"Utilisation avancée","Quels calculs peut-on faire ?","On peut faire des calculs dans deux sens : calculer le poids (ou la taille, ou autre) à un âge donné, ou l'inverse, à quel âge l'enfant aura tel poids (ou taille, etc). Les résultats s'afficheront en bas des courbes. On peut demander plusieurs calculs de ce genre, ils s'ajouteront à ceux déjà présents. Ces calculs ne sont pas sauvegardés par contre."
45
46"Utilisation avancée","Mais ça marche comment l'extrapolation en détail, dis dis ?","Mathophobes s'asbtenir !<br>
47Pour chaque donnée concernée (utilisée pour l'extrapolation), on calcule entre quelles courbes OMS on se situe. Il y a plus de courbes dans les données de l'OMS que de courbes tracées donc c'est plus précis que le graphique ne le laisse voir. <br>
48Si on trouve que la donnée se situe entre les courbes 5 et 6 (par exemple), on calcule alors le barycentre par rapport aux courbes 5 et 6 : par exemple la donnée est à 20% de la courbe 5 et à 80% de la courbe 6 (donc plutôt proche de la courbe 6). Les données extrapolées seront donc basées sur 20% de la courbe 5 et 80% de la courbe 6.<br>
49S'il y a plusieurs données, alors on cherche dans quel intervalle de courbes elles se situent (par exemple toutes les données sont entre les courbes 3 et 6), puis on calcule la moyenne des barycentres par rapport aux courbes 3 et 6, et on obtient les valeurs suivantes en se basant sur cette moyenne.
50<br>(Si vous avez un meilleur algo je prends, en attendant, ce truc marche)"
51
52 65
53 66
54"Divers","Pourquoi cet outil ?","Tout a commencé sur le <a href=""https://forum.lllfrance.org/"">forum de La Leche League</a>, où de nombreuses mamans (et parfois quelques papas) viennent poser des questions sur l'allaitement. Souvent, se pose la question de la prise de poids du bébé, qui est un bon indicateur de si le bébé reçoit assez de lait. Le poids dans l'absolu étant peu pertinent, il est utile de «&nbsp;tracer&nbsp;» la courbe de poids. Il n'existe actuellement que peu d'outils qui permettent de le faire (l'OMS en fournit un qui ne fonctionne que sous windows), en voici un." 67"Divers","Pourquoi cet outil ?","Tout a commencé sur le <a href=""https://forum.lllfrance.org/"">forum de La Leche League</a>, où de nombreuses mamans (et parfois quelques papas) viennent poser des questions sur l'allaitement. Souvent, se pose la question de la prise de poids du bébé, qui est un bon indicateur de si le bébé reçoit assez de lait. Le poids dans l'absolu étant peu pertinent, il est utile de «&nbsp;tracer&nbsp;» la courbe de poids. Il n'existe actuellement que peu d'outils qui permettent de le faire (l'OMS en fournit un qui ne fonctionne que sous windows), en voici un."
diff --git a/static/outilspage.js b/static/outilspage.js
index 5d1fc41..7c995f1 100644
--- a/static/outilspage.js
+++ b/static/outilspage.js
@@ -145,16 +145,36 @@ function change_mode_dates(mode)
145 } 145 }
146} 146}
147 147
148function revele_enfants() 148function ajoute_enfants()
149{ 149{
150 // révèle tous les champs pour enfants additionnels 150 var eltul = document.getElementById("liste_enfants_add") ;
151 var listelt = document.getElementsByClassName("enfants_cache_def") ; 151 var nblignes = eltul.childElementCount ;
152 for(i=0; i<listelt.length; i++) { 152 var elt1 = eltul.children[0] ;
153 listelt[i].style.display = "block" ; 153 //alert(elt1.innerHTML) ;
154 } 154 var texte = elt1.innerHTML ;
155 // Enlève le bouton pour les afficher 155 // Il faut remplacer les nblignes 2 par des nblignes +2
156 var bouton = document.getElementById("reveleenfants") ; 156 texte = texte.replace("fichier_donnees_"+(2), "fichier_donnees_"+(nblignes +2)) ;
157 bouton.style.display = "none" ; 157 texte = texte.replace("fichier_donnees_"+(2), "fichier_donnees_"+(nblignes +2)) ;
158 texte = texte.replace("fichier_donnees_"+(2), "fichier_donnees_"+(nblignes +2)) ;
159 texte = texte.replace("symbole_donnees_"+(2), "symbole_donnees_"+(nblignes +2)) ;
160 texte = texte.replace("couleur_donnees_"+(2), "couleur_donnees_"+(nblignes +2)) ;
161
162 // Enlever le "selected"
163 texte = texte.replace("selected", "") ;
164
165 var elt2 = document.createElement("li") ;
166 elt2.innerHTML = texte ;
167
168 // remettre le "selected" au bon endroit
169 var options = elt2.getElementsByTagName("option") ;
170 // Trouver le nblignes-ième élément
171 var numero = (nblignes +1) % options.length ;
172 //Sélectionner l'élément en question
173 var monoption = options[numero] ;
174 monoption.setAttribute("selected", true) ;
175
176 eltul.appendChild(elt2) ;
177
158} 178}
159 179
160function vide_champ(nom) 180function vide_champ(nom)
diff --git a/templates/index.html b/templates/index.html
index abd1a13..9477dd9 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -102,9 +102,9 @@
102 <option value="{{ unite }}"{% if valform.unite == unite %} selected {% endif %} >{{ unite }}</option> 102 <option value="{{ unite }}"{% if valform.unite == unite %} selected {% endif %} >{{ unite }}</option>
103 {% endfor %} 103 {% endfor %}
104 </select></label></li> 104 </select></label></li>
105 <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" class="data" name="maxi" value="{{ valform.maxi }}"></li> 105 <li><label>Âge maximum du graphique (facultatif) </label><input type="text" class="data" name="maxi" value="{{ valform.maxi }}"></li>
106 106
107 <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li> 107 <li><label>Même échelle d'âge sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li>
108 <li><label>Grille améliorée&nbsp;:</label><input type="checkbox" name="grilleamelio" {% if valform.grilleamelio == 'oui' %} checked{% endif %}></li> 108 <li><label>Grille améliorée&nbsp;:</label><input type="checkbox" name="grilleamelio" {% if valform.grilleamelio == 'oui' %} checked{% endif %}></li>
109 109
110 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" class="data" name="largeur" value="{{ valform.largeur }}"> 110 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" class="data" name="largeur" value="{{ valform.largeur }}">
@@ -181,19 +181,16 @@
181 181
182<div id="multi"> 182<div id="multi">
183 <p>Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici. Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant «&nbsp;principal&nbsp;».</p> 183 <p>Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici. Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant «&nbsp;principal&nbsp;».</p>
184 <ul> 184 <ul id="liste_enfants_add">{% for numero_enfant in range(2, CONFIG.nb_fichiers_enfants_add+2) %}
185 {% for numero_enfant in (2, 3, 4, 5, 6, 7, 8, 9, 10) %} 185 <li><input type="file" name="fichier_donnees_{{ numero_enfant }}" id="fichier_donnees_{{ numero_enfant }}"> <span class="bouton petit" onclick="vide_champ('fichier_donnees_{{ numero_enfant }}')">Enlever ce fichier</span> |
186 <li {% if numero_enfant>4 %} class="enfants_cache_def"{% endif %}><input type="file" name="fichier_donnees_{{ numero_enfant }}" id="fichier_donnees_{{ numero_enfant }}"> <span class="bouton petit" onclick="vide_champ('fichier_donnees_{{ numero_enfant }}')">Enlever ce fichier</span> |
187 Symbole&nbsp;: <select name="symbole_donnees_{{ numero_enfant }}"> 186 Symbole&nbsp;: <select name="symbole_donnees_{{ numero_enfant }}">
188 {% for symb in CONFIG.liste_symboles %} 187 {% for symb in CONFIG.liste_symboles %}
189 <option value="{{ symb }}" {% if numero_enfant == loop.index %} selected{% endif %}>{{ CONFIG.liste_symboles[symb] | safe}}</option> 188 <option value="{{ symb }}" {% if numero_enfant == loop.index %} selected{% endif %}>{{ CONFIG.liste_symboles[symb] | safe}}</option>
190 {% endfor %} 189 {% endfor %}
191 </select> | 190 </select> |
192 Couleur&nbsp;: <input type="color" name="couleur_donnees_{{ numero_enfant }}" value="{{ valform.couleurs.cadretxt }}"> 191 Couleur&nbsp;: <input type="color" name="couleur_donnees_{{ numero_enfant }}" value="{{ valform.couleurs.cadretxt }}"></li>{% endfor %}
193 </li>
194 {% endfor %}
195 </ul> 192 </ul>
196 <p class="bouton" onclick="revele_enfants()" id="reveleenfants">Plus d'enfants O_o</p> 193 <p class="bouton" onclick="ajoute_enfants()" id="reveleenfants">Plus d'enfants O_o</p>
197</div> 194</div>
198 195
199 196