@jjlmoya/utils-babies 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/package.json +69 -0
  2. package/src/category/i18n/en.ts +48 -0
  3. package/src/category/i18n/es.ts +48 -0
  4. package/src/category/i18n/fr.ts +48 -0
  5. package/src/category/index.ts +24 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +30 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +19 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/seo_length.test.ts +23 -0
  21. package/src/tests/tool_validation.test.ts +17 -0
  22. package/src/tool/baby-feeding-calculator/bibliography.astro +7 -0
  23. package/src/tool/baby-feeding-calculator/component.astro +210 -0
  24. package/src/tool/baby-feeding-calculator/i18n/en.ts +162 -0
  25. package/src/tool/baby-feeding-calculator/i18n/es.ts +162 -0
  26. package/src/tool/baby-feeding-calculator/i18n/fr.ts +162 -0
  27. package/src/tool/baby-feeding-calculator/index.ts +47 -0
  28. package/src/tool/baby-feeding-calculator/logic.ts +85 -0
  29. package/src/tool/baby-feeding-calculator/seo.astro +58 -0
  30. package/src/tool/baby-feeding-calculator/style.css +329 -0
  31. package/src/tool/baby-percentile-calculator/bibliography.astro +7 -0
  32. package/src/tool/baby-percentile-calculator/component.astro +388 -0
  33. package/src/tool/baby-percentile-calculator/i18n/en.ts +244 -0
  34. package/src/tool/baby-percentile-calculator/i18n/es.ts +244 -0
  35. package/src/tool/baby-percentile-calculator/i18n/fr.ts +244 -0
  36. package/src/tool/baby-percentile-calculator/index.ts +54 -0
  37. package/src/tool/baby-percentile-calculator/lmsData.ts +80 -0
  38. package/src/tool/baby-percentile-calculator/logic.ts +85 -0
  39. package/src/tool/baby-percentile-calculator/seo.astro +36 -0
  40. package/src/tool/baby-percentile-calculator/style.css +393 -0
  41. package/src/tool/baby-size-converter/bibliography.astro +7 -0
  42. package/src/tool/baby-size-converter/component.astro +289 -0
  43. package/src/tool/baby-size-converter/data.json +11 -0
  44. package/src/tool/baby-size-converter/i18n/en.ts +203 -0
  45. package/src/tool/baby-size-converter/i18n/es.ts +203 -0
  46. package/src/tool/baby-size-converter/i18n/fr.ts +203 -0
  47. package/src/tool/baby-size-converter/index.ts +53 -0
  48. package/src/tool/baby-size-converter/logic.ts +44 -0
  49. package/src/tool/baby-size-converter/seo.astro +36 -0
  50. package/src/tool/baby-size-converter/style.css +394 -0
  51. package/src/tool/fertile-days-estimator/bibliography.astro +7 -0
  52. package/src/tool/fertile-days-estimator/component.astro +265 -0
  53. package/src/tool/fertile-days-estimator/i18n/en.ts +258 -0
  54. package/src/tool/fertile-days-estimator/i18n/es.ts +262 -0
  55. package/src/tool/fertile-days-estimator/i18n/fr.ts +258 -0
  56. package/src/tool/fertile-days-estimator/index.ts +47 -0
  57. package/src/tool/fertile-days-estimator/logic.ts +58 -0
  58. package/src/tool/fertile-days-estimator/seo.astro +36 -0
  59. package/src/tool/fertile-days-estimator/style.css +419 -0
  60. package/src/tool/pregnancy-calculator/bibliography.astro +7 -0
  61. package/src/tool/pregnancy-calculator/calculator.ts +41 -0
  62. package/src/tool/pregnancy-calculator/component.astro +432 -0
  63. package/src/tool/pregnancy-calculator/i18n/en.ts +315 -0
  64. package/src/tool/pregnancy-calculator/i18n/es.ts +319 -0
  65. package/src/tool/pregnancy-calculator/i18n/fr.ts +315 -0
  66. package/src/tool/pregnancy-calculator/index.ts +55 -0
  67. package/src/tool/pregnancy-calculator/milestones.ts +153 -0
  68. package/src/tool/pregnancy-calculator/seo.astro +36 -0
  69. package/src/tool/pregnancy-calculator/store.ts +60 -0
  70. package/src/tool/pregnancy-calculator/style.css +807 -0
  71. package/src/tool/vaccination-calendar/bibliography.astro +7 -0
  72. package/src/tool/vaccination-calendar/component.astro +286 -0
  73. package/src/tool/vaccination-calendar/i18n/en.ts +170 -0
  74. package/src/tool/vaccination-calendar/i18n/es.ts +174 -0
  75. package/src/tool/vaccination-calendar/i18n/fr.ts +170 -0
  76. package/src/tool/vaccination-calendar/index.ts +47 -0
  77. package/src/tool/vaccination-calendar/logic.ts +59 -0
  78. package/src/tool/vaccination-calendar/seo.astro +36 -0
  79. package/src/tool/vaccination-calendar/style.css +316 -0
  80. package/src/tool/vaccination-calendar/vaccinationData.ts +21 -0
  81. package/src/tools.ts +17 -0
  82. package/src/types.ts +72 -0
@@ -0,0 +1,244 @@
1
+ import type { BabyPercentileCalculatorLocaleContent } from '../index';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+
4
+ const slug = 'percentil-peso-talla-bebe';
5
+ const title = 'Calculadora de Percentiles OMS para Bebés';
6
+ const description = 'Calcula el percentil de peso, talla e IMC de tu bebé según las tablas OMS (0-5 años).';
7
+ const faq = [
8
+ {
9
+ question: '¿Qué significa el percentil 50?',
10
+ answer: 'El percentil 50 indica que el bebé se encuentra exactamente en la mediana, es decir, la mitad de los bebés de su misma edad y sexo pesan o miden más, y la otra mitad menos. No significa que sea el valor ideal, sino el valor central de la distribución.',
11
+ },
12
+ {
13
+ question: '¿Un percentil bajo es señal de problema?',
14
+ answer: 'No necesariamente. Un percentil bajo (por ejemplo, P10) puede ser perfectamente normal si se mantiene estable a lo largo del tiempo. Lo importante es la tendencia de crecimiento, no un valor aislado. Siempre consulta a tu pediatra.',
15
+ },
16
+ {
17
+ question: '¿Qué tablas de crecimiento utiliza esta calculadora?',
18
+ answer: 'Esta calculadora utiliza los estándares de crecimiento de la Organización Mundial de la Salud (OMS) para niños de 0 a 5 años, basados en el Multicentre Growth Reference Study (MGRS).',
19
+ },
20
+ {
21
+ question: '¿Qué es el IMC en bebés?',
22
+ answer: 'El Índice de Masa Corporal (IMC) en bebés es la relación entre el peso y la talla al cuadrado. Los percentiles de IMC para bebés difieren de los de adultos y deben interpretarse con las tablas específicas para cada edad y sexo.',
23
+ },
24
+ {
25
+ question: '¿Con qué frecuencia debo medir a mi bebé?',
26
+ answer: 'En los primeros meses, el pediatra suele controlar el crecimiento en cada visita. En casa puedes registrar el peso y la talla mensualmente para observar la tendencia de crecimiento.',
27
+ },
28
+ ];
29
+ const howTo = [
30
+ {
31
+ name: 'Selecciona el sexo del bebé',
32
+ text: 'Elige entre niño o niña para aplicar las tablas OMS correspondientes.',
33
+ },
34
+ {
35
+ name: 'Introduce la edad',
36
+ text: 'Usa el deslizador o las flechas para indicar la edad en meses (0-60 meses).',
37
+ },
38
+ {
39
+ name: 'Introduce peso y talla',
40
+ text: 'Escribe el peso en kilogramos y la talla en centímetros.',
41
+ },
42
+ {
43
+ name: 'Consulta los percentiles',
44
+ text: 'Los percentiles de peso, talla e IMC se calculan automáticamente según las tablas OMS.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faq.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howTo.map((step) => ({
64
+ '@type': 'HowToStep',
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilitiesApplication',
76
+ operatingSystem: 'Web',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
+ inLanguage: 'es',
79
+ };
80
+
81
+ export const content: BabyPercentileCalculatorLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ labelMeasurements: 'Datos de la Medición',
87
+ labelSex: 'Sexo del bebé',
88
+ sexBoy: 'Niño',
89
+ sexGirl: 'Niña',
90
+ unitMonths: 'Solo meses',
91
+ unitYearsMonths: 'Años + meses',
92
+ labelWeight: 'Peso (kg)',
93
+ labelHeight: 'Talla (cm)',
94
+ btnAddHistory: 'Añadir a mi historial',
95
+ btnClearHistory: 'Limpiar datos',
96
+ labelDashboard: 'Dashboard de Crecimiento',
97
+ labelWeight2: 'Peso',
98
+ labelHeight2: 'Talla',
99
+ labelBMI: 'IMC',
100
+ labelCalculating: 'Calculando...',
101
+ disclaimer: 'Los percentiles son solo una herramienta estadística. Consulta siempre a tu pediatra para interpretar los resultados.',
102
+ labelLowRange: 'Rango bajo',
103
+ labelLowNormal: 'Habitual bajo',
104
+ labelNormal: 'Normalidad',
105
+ labelHighNormal: 'Habitual alto',
106
+ labelHighRange: 'Rango alto',
107
+ alertOutOfRange: 'Valor fuera de los rangos P3-P97. Consulta con tu pediatra.',
108
+ labelMonths: 'Meses',
109
+ faqTitle: 'Preguntas frecuentes',
110
+ bibliographyTitle: 'Referencias',
111
+ },
112
+ seo: [
113
+ {
114
+ type: 'title',
115
+ text: 'Calculadora de Percentiles OMS: Guía para entender el crecimiento de tu bebé',
116
+ level: 2,
117
+ },
118
+ {
119
+ type: 'summary',
120
+ title: '5 claves para interpretar los percentiles de tu bebé',
121
+ items: [
122
+ 'Ningún percentil aislado define la salud de tu bebé: lo importante es la tendencia a lo largo del tiempo.',
123
+ 'Los percentiles entre P3 y P97 se consideran dentro del rango de normalidad estadística.',
124
+ 'El IMC en bebés sigue curvas propias y no debe compararse con los valores de referencia para adultos.',
125
+ 'Las curvas OMS están basadas en bebés criados en condiciones óptimas, incluyendo lactancia materna exclusiva durante los primeros meses.',
126
+ 'Comparte siempre los registros de crecimiento con tu pediatra para una interpretación clínica adecuada.',
127
+ ],
128
+ },
129
+ {
130
+ type: 'title',
131
+ text: 'Cómo medir correctamente a tu bebé',
132
+ level: 3,
133
+ },
134
+ {
135
+ type: 'list',
136
+ items: [
137
+ 'Pesa al bebé sin ropa y en la misma báscula siempre que sea posible.',
138
+ 'Mide la longitud en posición horizontal hasta los 24 meses.',
139
+ 'A partir de los 2 años, mide la talla en posición vertical.',
140
+ 'Realiza las mediciones a la misma hora del día para mayor consistencia.',
141
+ ],
142
+ },
143
+ {
144
+ type: 'tip',
145
+ html: 'Un percentil por debajo de P3 no implica automáticamente un problema de salud. Lo más importante es observar si la curva de crecimiento mantiene su tendencia a lo largo del tiempo.',
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'Interpretación de los percentiles',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'table',
154
+ headers: ['Percentil', 'Interpretación', 'Acción recomendada'],
155
+ rows: [
156
+ ['P97 o superior', 'Rango alto', 'Comentar con el pediatra en la próxima visita'],
157
+ ['P85 a P97', 'Habitual alto', 'Seguimiento normal'],
158
+ ['P15 a P85', 'Normalidad', 'Sin acción especial necesaria'],
159
+ ['P3 a P15', 'Habitual bajo', 'Seguimiento normal'],
160
+ ['P3 o inferior', 'Rango bajo', 'Consultar con el pediatra'],
161
+ ],
162
+ },
163
+ {
164
+ type: 'title',
165
+ text: 'OMS vs Curvas de Orbegozo',
166
+ level: 3,
167
+ },
168
+ {
169
+ type: 'comparative',
170
+ columns: 2,
171
+ items: [
172
+ {
173
+ title: 'Curvas OMS',
174
+ description: 'Estándar internacional basado en bebés de 6 países criados en condiciones óptimas.',
175
+ points: [
176
+ 'Estándar internacional validado',
177
+ 'Basado en bebés de 6 países y condiciones óptimas',
178
+ 'Actualizadas y con soporte científico actual',
179
+ 'Puede no reflejar variaciones genéticas locales',
180
+ ],
181
+ },
182
+ {
183
+ title: 'Curvas de Orbegozo',
184
+ description: 'Curvas adaptadas a la población española, muy usadas en décadas anteriores.',
185
+ points: [
186
+ 'Adaptadas a la población española',
187
+ 'Muy usadas en España en décadas anteriores',
188
+ 'Basadas en población de referencia más antigua',
189
+ 'Menor adopción internacional',
190
+ ],
191
+ },
192
+ ],
193
+ },
194
+ {
195
+ type: 'stats',
196
+ columns: 3,
197
+ items: [
198
+ { value: 'OMS 0-5 años', label: 'Estándar de referencia' },
199
+ { value: 'Curva de tendencia', label: 'Variable clave' },
200
+ { value: 'Parámetros LMS', label: 'Precisión técnica' },
201
+ ],
202
+ },
203
+ {
204
+ type: 'glossary',
205
+ items: [
206
+ {
207
+ term: 'Z-Score',
208
+ definition: 'Número de desviaciones estándar que un valor se aleja de la media de la población de referencia. Un Z-Score de 0 equivale al percentil 50.',
209
+ },
210
+ {
211
+ term: 'Armonía',
212
+ definition: 'Proporción adecuada entre peso y talla. Un bebé puede tener un percentil bajo de peso pero ser armónico si su talla también es baja en la misma proporción.',
213
+ },
214
+ {
215
+ term: 'Antropometría',
216
+ definition: 'Conjunto de mediciones corporales (peso, talla, perímetro cefálico, IMC) utilizadas para evaluar el crecimiento y estado nutricional.',
217
+ },
218
+ {
219
+ term: 'Parámetros LMS',
220
+ definition: 'Método estadístico (L=Box-Cox, M=mediana, S=coeficiente de variación) utilizado por la OMS para construir las tablas de percentiles y transformar cualquier medición en un Z-Score.',
221
+ },
222
+ ],
223
+ },
224
+ ],
225
+ faqTitle: "Preguntas frecuentes",
226
+ faq,
227
+ bibliographyTitle: "Referencias",
228
+ bibliography: [
229
+ {
230
+ name: 'WHO Child Growth Standards: Methods and development',
231
+ url: 'https://www.who.int/publications/i/item/924154693X',
232
+ },
233
+ {
234
+ name: 'WHO Child Growth Standards: Length/height-for-age, weight-for-age, weight-for-length, weight-for-height and body mass index-for-age',
235
+ url: 'https://www.who.int/tools/child-growth-standards/standards',
236
+ },
237
+ {
238
+ name: 'Comparison of the WHO Child Growth Standards and the CDC 2000 Growth Charts - de Onis M et al.',
239
+ url: 'https://doi.org/10.1093/jn/137.1.144S',
240
+ },
241
+ ],
242
+ howTo,
243
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
244
+ };
@@ -0,0 +1,244 @@
1
+ import type { BabyPercentileCalculatorLocaleContent } from '../index';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+
4
+ const slug = 'percentile-poids-taille-bebe';
5
+ const title = 'Calculateur de Percentiles OMS pour Bébés';
6
+ const description = 'Calculez le percentile de poids, taille et IMC de votre bébé selon les courbes OMS (0-5 ans).';
7
+ const faq = [
8
+ {
9
+ question: 'Que signifie le 50e percentile ?',
10
+ answer: 'Le 50e percentile indique que le bébé se trouve exactement à la médiane : la moitié des bébés du même âge et sexe pèse ou mesure plus, et l\'autre moitié moins. Cela ne signifie pas que c\'est la valeur idéale, mais simplement la valeur centrale de la distribution.',
11
+ },
12
+ {
13
+ question: 'Un percentile bas est-il signe de problème ?',
14
+ answer: 'Pas nécessairement. Un percentile bas (par exemple P10) peut être tout à fait normal s\'il reste stable dans le temps. C\'est la tendance de croissance qui importe, et non une valeur isolée. Consultez toujours votre pédiatre.',
15
+ },
16
+ {
17
+ question: 'Quelles courbes de croissance cette calculatrice utilise-t-elle ?',
18
+ answer: 'Cette calculatrice utilise les normes de croissance de l\'Organisation Mondiale de la Santé (OMS) pour les enfants de 0 à 5 ans, basées sur l\'étude MGRS (Multicentre Growth Reference Study).',
19
+ },
20
+ {
21
+ question: 'Qu\'est-ce que l\'IMC chez les bébés ?',
22
+ answer: 'L\'Indice de Masse Corporelle (IMC) chez les bébés est le rapport entre le poids et le carré de la taille. Les percentiles d\'IMC pour bébés diffèrent de ceux des adultes et doivent être interprétés à l\'aide de courbes spécifiques par âge et sexe.',
23
+ },
24
+ {
25
+ question: 'À quelle fréquence dois-je mesurer mon bébé ?',
26
+ answer: 'Dans les premiers mois, le pédiatre surveille généralement la croissance à chaque visite. À la maison, vous pouvez enregistrer le poids et la taille mensuellement pour observer la tendance de croissance.',
27
+ },
28
+ ];
29
+ const howTo = [
30
+ {
31
+ name: "Sélectionnez le sexe du bébé",
32
+ text: "Choisissez garçon ou fille pour appliquer les courbes OMS correspondantes.",
33
+ },
34
+ {
35
+ name: "Saisissez l'âge",
36
+ text: "Utilisez le curseur ou les flèches pour indiquer l'âge en mois (0-60 mois).",
37
+ },
38
+ {
39
+ name: "Saisissez poids et taille",
40
+ text: "Entrez le poids en kilogrammes et la taille en centimètres.",
41
+ },
42
+ {
43
+ name: "Consultez les percentiles",
44
+ text: "Les percentiles de poids, taille et IMC sont calculés automatiquement selon les courbes OMS.",
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faq.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howTo.map((step) => ({
64
+ '@type': 'HowToStep',
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilitiesApplication',
76
+ operatingSystem: 'Web',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
+ inLanguage: 'fr',
79
+ };
80
+
81
+ export const content: BabyPercentileCalculatorLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ labelMeasurements: 'Données de Mesure',
87
+ labelSex: 'Sexe du bébé',
88
+ sexBoy: 'Garçon',
89
+ sexGirl: 'Fille',
90
+ unitMonths: 'Mois seulement',
91
+ unitYearsMonths: 'Années + mois',
92
+ labelWeight: 'Poids (kg)',
93
+ labelHeight: 'Taille (cm)',
94
+ btnAddHistory: 'Ajouter à l\'historique',
95
+ btnClearHistory: 'Effacer les données',
96
+ labelDashboard: 'Tableau de bord de croissance',
97
+ labelWeight2: 'Poids',
98
+ labelHeight2: 'Taille',
99
+ labelBMI: 'IMC',
100
+ labelCalculating: 'Calcul en cours...',
101
+ disclaimer: 'Les percentiles sont uniquement un outil statistique. Consultez toujours votre pédiatre pour interpréter les résultats.',
102
+ labelLowRange: 'Plage basse',
103
+ labelLowNormal: 'Bas habituel',
104
+ labelNormal: 'Normalité',
105
+ labelHighNormal: 'Haut habituel',
106
+ labelHighRange: 'Plage haute',
107
+ alertOutOfRange: 'Valeur hors des plages P3-P97. Consultez votre pédiatre.',
108
+ labelMonths: 'Mois',
109
+ faqTitle: 'Questions fréquentes',
110
+ bibliographyTitle: 'Références',
111
+ },
112
+ seo: [
113
+ {
114
+ type: 'title',
115
+ text: "Calculateur de Percentiles OMS : Guide pour comprendre la croissance de votre bébé",
116
+ level: 2,
117
+ },
118
+ {
119
+ type: 'summary',
120
+ title: "5 points essentiels pour interpréter les percentiles de votre bébé",
121
+ items: [
122
+ "Aucun percentile isolé ne définit la santé de votre bébé : c'est la tendance dans le temps qui compte.",
123
+ "Les percentiles entre P3 et P97 sont considérés dans la plage de normalité statistique.",
124
+ "L'IMC du nourrisson suit ses propres courbes et ne doit pas être comparé aux valeurs de référence adultes.",
125
+ "Les courbes OMS sont basées sur des bébés élevés dans des conditions optimales, dont l'allaitement exclusif les premiers mois.",
126
+ "Partagez toujours les données de croissance avec votre pédiatre pour une interprétation clinique appropriée.",
127
+ ],
128
+ },
129
+ {
130
+ type: 'title',
131
+ text: "Comment mesurer correctement votre bébé",
132
+ level: 3,
133
+ },
134
+ {
135
+ type: 'list',
136
+ items: [
137
+ "Pesez le bébé sans vêtements et sur la même balance autant que possible.",
138
+ "Mesurez la longueur en position allongée jusqu'à 24 mois.",
139
+ "À partir de 2 ans, mesurez la taille en position debout.",
140
+ "Effectuez les mesures à la même heure de la journée pour plus de cohérence.",
141
+ ],
142
+ },
143
+ {
144
+ type: 'tip',
145
+ html: "Un percentile inférieur à P3 n'indique pas automatiquement un problème de santé. L'essentiel est d'observer si la courbe de croissance maintient sa tendance dans le temps.",
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: "Interprétation des percentiles",
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'table',
154
+ headers: ["Percentile", "Interprétation", "Action recommandée"],
155
+ rows: [
156
+ ["P97 ou plus", "Plage haute", "En parler au pédiatre lors de la prochaine visite"],
157
+ ["P85 à P97", "Haut habituel", "Suivi normal"],
158
+ ["P15 à P85", "Normalité", "Aucune action particulière"],
159
+ ["P3 à P15", "Bas habituel", "Suivi normal"],
160
+ ["P3 ou moins", "Plage basse", "Consulter le pédiatre"],
161
+ ],
162
+ },
163
+ {
164
+ type: 'title',
165
+ text: "OMS vs Courbes d'Orbegozo",
166
+ level: 3,
167
+ },
168
+ {
169
+ type: 'comparative',
170
+ columns: 2,
171
+ items: [
172
+ {
173
+ title: "Courbes OMS",
174
+ description: "Standard international basé sur des bébés de 6 pays élevés dans des conditions optimales.",
175
+ points: [
176
+ "Standard international validé",
177
+ "Basé sur des bébés de 6 pays en conditions optimales",
178
+ "À jour avec le soutien scientifique actuel",
179
+ "Peut ne pas refléter les variations génétiques locales",
180
+ ],
181
+ },
182
+ {
183
+ title: "Courbes d'Orbegozo",
184
+ description: "Courbes adaptées à la population espagnole, très utilisées dans les décennies passées.",
185
+ points: [
186
+ "Adaptées à la population espagnole",
187
+ "Très utilisées en Espagne par le passé",
188
+ "Basées sur une population de référence plus ancienne",
189
+ "Adoption internationale limitée",
190
+ ],
191
+ },
192
+ ],
193
+ },
194
+ {
195
+ type: 'stats',
196
+ columns: 3,
197
+ items: [
198
+ { value: "OMS 0-5 ans", label: "Standard de référence" },
199
+ { value: "Courbe de tendance", label: "Variable clé" },
200
+ { value: "Paramètres LMS", label: "Précision technique" },
201
+ ],
202
+ },
203
+ {
204
+ type: 'glossary',
205
+ items: [
206
+ {
207
+ term: "Z-Score",
208
+ definition: "Nombre d'écarts-types séparant une valeur de la moyenne de la population de référence. Un Z-Score de 0 est équivalent au 50e percentile.",
209
+ },
210
+ {
211
+ term: "Harmonie",
212
+ definition: "Proportion adéquate entre poids et taille. Un bébé peut avoir un faible percentile de poids tout en étant harmonieux si sa taille est également faible dans la même proportion.",
213
+ },
214
+ {
215
+ term: "Anthropométrie",
216
+ definition: "Ensemble des mesures corporelles (poids, taille, périmètre crânien, IMC) utilisées pour évaluer la croissance et l'état nutritionnel.",
217
+ },
218
+ {
219
+ term: "Paramètres LMS",
220
+ definition: "Méthode statistique (L=Box-Cox, M=médiane, S=coefficient de variation) utilisée par l'OMS pour construire les tableaux de percentiles et convertir toute mesure en Z-Score.",
221
+ },
222
+ ],
223
+ },
224
+ ],
225
+ faqTitle: "Questions fréquentes",
226
+ faq,
227
+ bibliographyTitle: "Références",
228
+ bibliography: [
229
+ {
230
+ name: "WHO Child Growth Standards: Methods and development",
231
+ url: "https://www.who.int/publications/i/item/924154693X",
232
+ },
233
+ {
234
+ name: "WHO Child Growth Standards: Length/height-for-age, weight-for-age, weight-for-length, weight-for-height and body mass index-for-age",
235
+ url: "https://www.who.int/tools/child-growth-standards/standards",
236
+ },
237
+ {
238
+ name: "Comparison of the WHO Child Growth Standards and the CDC 2000 Growth Charts - de Onis M et al.",
239
+ url: "https://doi.org/10.1093/jn/137.1.144S",
240
+ },
241
+ ],
242
+ howTo,
243
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
244
+ };
@@ -0,0 +1,54 @@
1
+ import type { BabiesToolEntry, ToolDefinition, ToolLocaleContent } from '../../types';
2
+ import BabyPercentileCalculatorComponent from './component.astro';
3
+ import BabyPercentileCalculatorSEO from './seo.astro';
4
+ import BabyPercentileCalculatorBibliography from './bibliography.astro';
5
+
6
+ export interface BabyPercentileCalculatorUI {
7
+ [key: string]: string;
8
+ labelMeasurements: string;
9
+ labelSex: string;
10
+ sexBoy: string;
11
+ sexGirl: string;
12
+ unitMonths: string;
13
+ unitYearsMonths: string;
14
+ labelWeight: string;
15
+ labelHeight: string;
16
+ btnAddHistory: string;
17
+ btnClearHistory: string;
18
+ labelDashboard: string;
19
+ labelWeight2: string;
20
+ labelHeight2: string;
21
+ labelBMI: string;
22
+ labelCalculating: string;
23
+ disclaimer: string;
24
+ labelLowRange: string;
25
+ labelLowNormal: string;
26
+ labelNormal: string;
27
+ labelHighNormal: string;
28
+ labelHighRange: string;
29
+ alertOutOfRange: string;
30
+ labelMonths: string;
31
+ faqTitle: string;
32
+ bibliographyTitle: string;
33
+ }
34
+
35
+ export type BabyPercentileCalculatorLocaleContent = ToolLocaleContent<BabyPercentileCalculatorUI>;
36
+
37
+ export const babyPercentileCalculator: BabiesToolEntry<BabyPercentileCalculatorUI> = {
38
+ id: 'baby-percentile-calculator',
39
+ icons: { bg: 'mdi:chart-bell-curve', fg: 'mdi:chart-bell-curve-cumulative' },
40
+ i18n: {
41
+ es: () => import('./i18n/es').then((m) => m.content),
42
+ en: () => import('./i18n/en').then((m) => m.content),
43
+ fr: () => import('./i18n/fr').then((m) => m.content),
44
+ },
45
+ };
46
+
47
+ export { BabyPercentileCalculatorComponent, BabyPercentileCalculatorSEO, BabyPercentileCalculatorBibliography };
48
+
49
+ export const BABY_PERCENTILE_CALCULATOR_TOOL: ToolDefinition = {
50
+ entry: babyPercentileCalculator,
51
+ Component: BabyPercentileCalculatorComponent,
52
+ SEOComponent: BabyPercentileCalculatorSEO,
53
+ BibliographyComponent: BabyPercentileCalculatorBibliography,
54
+ };
@@ -0,0 +1,80 @@
1
+ interface LMSData {
2
+ L: number;
3
+ M: number;
4
+ S: number;
5
+ }
6
+
7
+ export type TableSet = Record<number, LMSData>;
8
+
9
+ export interface GenderData {
10
+ weight: TableSet;
11
+ height: TableSet;
12
+ bmi: TableSet;
13
+ }
14
+
15
+ export const boys: GenderData = {
16
+ weight: {
17
+ 0: { L: 0.3487, M: 3.3464, S: 0.14602 },
18
+ 3: { L: 0.053, M: 6.3912, S: 0.11899 },
19
+ 6: { L: -0.0939, M: 7.8978, S: 0.11218 },
20
+ 12: { L: -0.2285, M: 9.6483, S: 0.10955 },
21
+ 24: { L: -0.3204, M: 12.152, S: 0.11299 },
22
+ 36: { L: -0.3475, M: 14.2858, S: 0.1172 },
23
+ 48: { L: -0.3667, M: 16.32, S: 0.12188 },
24
+ 60: { L: -0.3807, M: 18.28, S: 0.12643 }
25
+ },
26
+ height: {
27
+ 0: { L: 1.0, M: 49.88, S: 0.03795 },
28
+ 6: { L: 1.0, M: 67.6, S: 0.03544 },
29
+ 12: { L: 1.0, M: 75.7, S: 0.03478 },
30
+ 24: { L: 1.0, M: 87.8, S: 0.03487 },
31
+ 60: { L: 1.0, M: 110.0, S: 0.0377 }
32
+ },
33
+ bmi: {
34
+ 0: { L: -1.025, M: 13.409, S: 0.0911 },
35
+ 6: { L: -1.821, M: 17.311, S: 0.0827 },
36
+ 12: { L: -1.988, M: 16.837, S: 0.0818 },
37
+ 24: { L: -2.008, M: 15.772, S: 0.0815 },
38
+ 60: { L: -1.968, M: 15.11, S: 0.083 }
39
+ }
40
+ };
41
+
42
+ export const girls: GenderData = {
43
+ weight: {
44
+ 0: { L: 0.1704, M: 3.2322, S: 0.14171 },
45
+ 6: { L: -0.1601, M: 7.298, S: 0.11863 },
46
+ 12: { L: -0.3259, M: 8.948, S: 0.11812 },
47
+ 60: { L: -0.5235, M: 18.232, S: 0.13845 }
48
+ },
49
+ height: {
50
+ 0: { L: 1.0, M: 49.15, S: 0.03816 },
51
+ 12: { L: 1.0, M: 74.0, S: 0.03603 },
52
+ 60: { L: 1.0, M: 109.4, S: 0.04018 }
53
+ },
54
+ bmi: {
55
+ 0: { L: -0.63, M: 13.31, S: 0.090 },
56
+ 12: { L: -1.5, M: 16.35, S: 0.085 },
57
+ 60: { L: -1.9, M: 15.2, S: 0.087 }
58
+ }
59
+ };
60
+
61
+ export function interpolateLMS(month: number, data: TableSet): LMSData {
62
+ const keys = Object.keys(data).map(Number).sort((a, b) => a - b);
63
+ if (month <= keys[0]!) return data[keys[0]!]!;
64
+ if (month >= keys[keys.length - 1]!) return data[keys[keys.length - 1]!]!;
65
+ for (let i = 0; i < keys.length - 1; i++) {
66
+ const t1 = keys[i]!;
67
+ const t2 = keys[i + 1]!;
68
+ if (month >= t1 && month <= t2) {
69
+ const p = (month - t1) / (t2 - t1);
70
+ const l1 = data[t1]!;
71
+ const l2 = data[t2]!;
72
+ return {
73
+ L: l1.L + p * (l2.L - l1.L),
74
+ M: l1.M + p * (l2.M - l1.M),
75
+ S: l1.S + p * (l2.S - l1.S)
76
+ };
77
+ }
78
+ }
79
+ return data[keys[0]!]!;
80
+ }