diff --git a/public/js/pediatricScheduleData.js b/public/js/pediatricScheduleData.js index 3866972..1b7db2d 100644 --- a/public/js/pediatricScheduleData.js +++ b/public/js/pediatricScheduleData.js @@ -1916,6 +1916,165 @@ const GROWTH_REFERENCE = { } }; +// ─── REFLEXES (AAP Bright Futures / Nelson Textbook of Pediatrics) ────────── +// Primitive reflexes are brainstem-mediated. Their presence at the expected +// age confirms intact CNS function; their timely disappearance reflects +// normal cortical maturation. Persistence, asymmetry, or re-emergence is a +// red flag for neurologic evaluation. +const REFLEXES_REFERENCE = { + newborn: { + intro: "All primitive reflexes should be present, symmetric, and easily elicited. Absent or markedly asymmetric responses suggest brachial plexus injury, stroke, hypotonia, or other CNS pathology.", + reflexes: [ + { name: "Rooting", status: "Present", note: "Stroking the cheek turns the head toward the touch and opens the mouth. Aids latch. Fades 3–4 mo." }, + { name: "Sucking", status: "Present", note: "Anything placed in the mouth triggers rhythmic sucking. Becomes voluntary by ~4 mo." }, + { name: "Moro (startle)", status: "Present", note: "Sudden head drop or loud noise → symmetric arm extension then flexion, often with a cry. Asymmetry = brachial plexus injury / clavicle fracture / hemiparesis. Fades 4–6 mo." }, + { name: "Palmar grasp", status: "Present", note: "Pressure on the palm closes the fingers. Fades 4–6 mo; persistence interferes with voluntary reach." }, + { name: "Plantar grasp", status: "Present", note: "Pressure at the ball of the foot curls the toes down. Fades 9–12 mo." }, + { name: "Stepping", status: "Present", note: "Held upright with feet on a surface → reciprocal stepping movements. Fades by ~2 mo." }, + { name: "Galant", status: "Present", note: "Stroking paravertebrally on one side → trunk curves toward the stroked side. Fades 4–6 mo." }, + { name: "Tonic neck (fencing)", status: "Emerging", note: "Head turned to one side → arm/leg extend on that side, flex on the opposite. Becomes most prominent at 1–2 mo, fades by 4–6 mo. An obligate, fixed response is abnormal." }, + { name: "Tongue protrusion (tongue thrust)", status: "Present", note: "Touch to the lips/tongue or a solid in the mouth causes the tongue to push forward. Protects from choking before swallowing is mature; its disappearance at 4–6 mo is the key signal that purees can begin. Persistence in older kids causes dental open bite, lisps, and messy eating." }, + { name: "Babinski", status: "Up-going (normal)", note: "Stroking the lateral sole → big toe dorsiflexes, toes fan. Normal up to ~12–24 mo. A positive Babinski after age 2 is an upper-motor-neuron sign." } + ] + }, + "1mo": { + intro: "All primitive reflexes remain fully present and symmetric.", + reflexes: [ + { name: "Rooting / Sucking", status: "Present", note: "Strong and reliable; feeding should be well-coordinated." }, + { name: "Moro", status: "Present", note: "Full symmetric response. Asymmetry still warrants eval (brachial plexus, clavicle fracture, hemiparesis)." }, + { name: "Palmar / Plantar grasp", status: "Present", note: "Strong; the baby may lift slightly off the surface when pulling up on your fingers." }, + { name: "Tonic neck", status: "Present", note: "Becoming more visible; should not be obligate." }, + { name: "Galant, Stepping", status: "Present", note: "Still easily elicited." }, + { name: "Tongue thrust", status: "Present", note: "Still fully present — do not start solids." }, + { name: "Babinski", status: "Up-going (normal)", note: "Normal at this age." } + ] + }, + "2mo": { + intro: "Primitive reflexes still strong; social smile and visual tracking emerging alongside.", + reflexes: [ + { name: "Moro", status: "Present", note: "Still easily triggered. Should peak around this age then begin to wane." }, + { name: "Tonic neck", status: "Peak", note: "Most visible at 1–2 mo. Should not be obligate or prolonged." }, + { name: "Rooting / Sucking / Palmar / Plantar", status: "Present", note: "All remain strong." }, + { name: "Stepping", status: "Fading", note: "Typically gone by 2 mo." }, + { name: "Tongue thrust", status: "Present", note: "Solids still contraindicated." }, + { name: "Babinski", status: "Up-going (normal)", note: "Normal at this age." } + ] + }, + "4mo": { + intro: "Transition visit — primitive reflexes are beginning to integrate as cortical control takes over. Readiness for solids depends partly on loss of the tongue-thrust reflex.", + reflexes: [ + { name: "Moro", status: "Fading", note: "Noticeably weaker than at 2 mo. Persistence past 6 mo is abnormal." }, + { name: "Rooting", status: "Fading", note: "Becoming voluntary." }, + { name: "Palmar grasp", status: "Fading", note: "Weaker; voluntary release begins." }, + { name: "Tonic neck", status: "Fading", note: "Should be diminishing; obligate response is abnormal." }, + { name: "Galant, Stepping", status: "Absent", note: "Should be gone by now." }, + { name: "Tongue thrust", status: "Fading / Gone", note: "Disappearance (4–6 mo) is the readiness sign for pureed solids. If a spoon still gets pushed out, wait." }, + { name: "Landau", status: "Emerging", note: "Held prone in the air, baby extends head, spine, and legs. Integrates by 1–2 y." }, + { name: "Babinski", status: "Up-going (normal)", note: "Normal at this age." } + ] + }, + "6mo": { + intro: "Most primitive reflexes should now be integrated. Protective (parachute) reflexes begin emerging — these persist for life.", + reflexes: [ + { name: "Moro, Rooting, Tonic neck, Galant", status: "Absent / Integrated", note: "Persistence at 6 mo warrants neurologic evaluation." }, + { name: "Tongue thrust", status: "Absent", note: "Should be gone — prerequisite for safe spoon-feeding of solids." }, + { name: "Palmar grasp", status: "Integrated", note: "Replaced by voluntary raking grasp." }, + { name: "Plantar grasp", status: "Present", note: "Still present; fades 9–12 mo." }, + { name: "Parachute", status: "Emerging (6–9 mo)", note: "Held prone and tilted head-down, arms extend protectively. Persists for life — absence is concerning." }, + { name: "Landau", status: "Present", note: "Full response by ~6 mo." }, + { name: "Babinski", status: "Up-going (normal)", note: "Normal at this age." } + ] + }, + "9mo": { + intro: "Primitive reflexes should be absent. Protective reflexes present and reliable.", + reflexes: [ + { name: "All primitive reflexes (Moro, grasp, rooting, tonic neck, Galant)", status: "Absent", note: "Persistence is a red flag for CP, hypoxic injury, or genetic/metabolic disease." }, + { name: "Plantar grasp", status: "Fading", note: "Usually gone by 9–12 mo — allows independent standing." }, + { name: "Parachute", status: "Present", note: "Should be fully present and symmetric." }, + { name: "Protective extension (sideways)", status: "Present", note: "Arm extends to catch self when tipped — needed for safe sitting." }, + { name: "Babinski", status: "Up-going (may still be normal)", note: "Still acceptable; expect resolution by ~2 y." } + ] + }, + "12mo": { + intro: "Protective and postural reflexes drive standing and cruising. Any lingering primitive reflex is abnormal.", + reflexes: [ + { name: "Primitive reflexes", status: "Absent", note: "Residual Moro, grasp, or tonic neck at 1 y warrants neurologic eval." }, + { name: "Plantar grasp", status: "Absent", note: "Should be gone — needed for weight-bearing and first steps." }, + { name: "Parachute", status: "Present (lifelong)", note: "Symmetric protective arm extension." }, + { name: "Protective extension (forward/sideways/backward)", status: "Present", note: "All directions present by ~12 mo; essential for safe walking." }, + { name: "Babinski", status: "Up-going still acceptable", note: "Normal until ~2 y. Asymmetry is always abnormal." } + ] + }, + "15mo": { + intro: "Postural reflexes mature alongside walking.", + reflexes: [ + { name: "Primitive reflexes", status: "Absent", note: "Any re-emergence or persistence warrants evaluation." }, + { name: "Parachute / Protective extension", status: "Present", note: "Symmetric in all directions." }, + { name: "Babinski", status: "Up-going still acceptable", note: "Transitioning toward down-going over the next 6–12 mo." }, + { name: "Deep tendon reflexes (patellar, biceps, Achilles)", status: "Present (2+)", note: "Become easier to elicit as tone normalizes. Symmetric and brisk but not clonic." } + ] + }, + "18mo": { + intro: "Near-adult reflex pattern; Babinski response nearing transition.", + reflexes: [ + { name: "Primitive reflexes", status: "Absent", note: "Persistence is abnormal." }, + { name: "Parachute / Protective extension", status: "Present", note: "Fully developed." }, + { name: "Babinski", status: "Transitioning", note: "May still be up-going but should be down-going (normal plantar flexion) by age 2." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Biceps, patellar, Achilles. Asymmetry suggests cord, root, or peripheral nerve pathology." } + ] + }, + "24mo": { + intro: "Adult-pattern reflex exam expected from age 2.", + reflexes: [ + { name: "Babinski (plantar response)", status: "Down-going (normal)", note: "After age 2, an up-going toe is an upper-motor-neuron sign (stroke, CP, spinal cord lesion, demyelination)." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Biceps, triceps, brachioradialis, patellar, Achilles. Hyperreflexia or clonus → UMN lesion; hyporeflexia → LMN / neuropathy / myopathy." }, + { name: "Parachute / Protective extension", status: "Present (lifelong)", note: "Absence would be abnormal." }, + { name: "Primitive reflexes", status: "Absent", note: "Any re-emergence is abnormal." } + ] + }, + "30mo": { + intro: "Adult-pattern exam.", + reflexes: [ + { name: "Plantar response", status: "Down-going", note: "Up-going Babinski after age 2 is abnormal." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Biceps, patellar, Achilles. Asymmetry, clonus, or hyperreflexia warrants workup." }, + { name: "Protective / postural reflexes", status: "Present", note: "Intact balance reactions support running, climbing, jumping." } + ] + }, + "3y_to_5y": { + intro: "Standard adult-pattern neurologic reflex exam.", + reflexes: [ + { name: "Plantar response", status: "Down-going", note: "Positive Babinski is always abnormal at this age." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Biceps, triceps, brachioradialis, patellar, Achilles. Grade 0–4; asymmetry is the most clinically meaningful finding." }, + { name: "Gait-related reflexes", status: "Intact", note: "Smooth tandem walk, heel-toe, hopping on one foot by age 4–5 — integrate cerebellar and corticospinal function." } + ] + }, + "6y_to_10y": { + intro: "Focused adult-pattern exam — any primitive reflex (snout, grasp, glabellar) re-emerging is a frontal release sign and abnormal.", + reflexes: [ + { name: "Plantar response", status: "Down-going", note: "Up-going = UMN lesion." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Screen for asymmetry, hyperreflexia (MS, cord lesion), or loss (neuropathy, myopathy — e.g., Duchenne's). Loss of Achilles reflex can be an early sign of Charcot-Marie-Tooth." }, + { name: "Abdominal reflexes", status: "Present", note: "Stroking each quadrant contracts the umbilicus toward it. Loss is an early clue to UMN/cord pathology or scoliosis with cord involvement." }, + { name: "Cremasteric reflex (males)", status: "Present", note: "Stroking medial thigh elevates the ipsilateral testis. Absent in testicular torsion." } + ] + }, + "11y_to_14y": { + intro: "Adult neurologic exam. Sports-participation exams should include a reflex screen.", + reflexes: [ + { name: "Plantar response", status: "Down-going", note: "Up-going is always abnormal." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Hyperreflexia/clonus in a teen → think MS, myelopathy, spinal cord tumor, B12 deficiency. Hyporeflexia → Guillain-Barré, neuropathy, hypothyroidism." }, + { name: "Abdominal / cremasteric", status: "Present", note: "Same significance as in younger children." } + ] + }, + "15y_to_21y": { + intro: "Full adult neurologic exam.", + reflexes: [ + { name: "Plantar response", status: "Down-going", note: "Positive Babinski = UMN lesion (stroke, MS, cord pathology)." }, + { name: "Deep tendon reflexes", status: "2+ symmetric", note: "Include biceps, triceps, brachioradialis, patellar, Achilles. Asymmetry or pathologic spread is the main flag." }, + { name: "Primitive / frontal release signs (grasp, snout, palmomental, glabellar)", status: "Absent", note: "Presence suggests frontal lobe pathology, neurodegenerative disease, or severe TBI — rare but important in post-concussion / substance-use contexts." } + ] + } +}; + // ─── BMI / WEIGHT CLASSIFICATION (AAP 2023 CPG + CDC Extended BMI) ────────── // Source: AAP Clinical Practice Guideline for Evaluation and Treatment of // Children and Adolescents with Obesity (Pediatrics 2023;151(2):e2022060640) @@ -1955,6 +2114,7 @@ if (typeof module !== "undefined" && module.exports) { DYSLIPIDEMIA_SCHEDULE, NEWBORN_SCREENING, GROWTH_REFERENCE, + REFLEXES_REFERENCE, BMI_CLASSIFICATION, }; } diff --git a/public/js/wellVisit.js b/public/js/wellVisit.js index 8b505da..a485306 100644 --- a/public/js/wellVisit.js +++ b/public/js/wellVisit.js @@ -229,6 +229,41 @@ return key ? GROWTH_REFERENCE[key] : null; } + // ─── Map visit ID to REFLEXES_REFERENCE key ─────────────────────────────── + function getReflexDataForVisit(visitId) { + if (typeof REFLEXES_REFERENCE === 'undefined') return null; + if (REFLEXES_REFERENCE[visitId]) return REFLEXES_REFERENCE[visitId]; + var mapping = { + 'newborn': 'newborn', '3-5d': 'newborn', + '1mo': '1mo', '2mo': '2mo', '4mo': '4mo', '6mo': '6mo', '9mo': '9mo', + '12mo': '12mo', '15mo': '15mo', '18mo': '18mo', + '24mo': '24mo', '30mo': '30mo', + '3y': '3y_to_5y', '4y': '3y_to_5y', '5y': '3y_to_5y', + '6y': '6y_to_10y', '7y': '6y_to_10y', '8y': '6y_to_10y', '9y': '6y_to_10y', '10y': '6y_to_10y', + '11y': '11y_to_14y', '12y': '11y_to_14y', '13y': '11y_to_14y', '14y': '11y_to_14y', + '15y': '15y_to_21y', '16y': '15y_to_21y', '17y': '15y_to_21y', '18y': '15y_to_21y', + '19y': '15y_to_21y', '20y': '15y_to_21y', '21y': '15y_to_21y' + }; + var key = mapping[visitId]; + return key ? REFLEXES_REFERENCE[key] : null; + } + + // ─── Color a reflex status chip ─────────────────────────────────────────── + function reflexStatusColor(status) { + var s = (status || '').toLowerCase(); + if (s.indexOf('absent / integrated') !== -1 || s === 'absent' || s.indexOf('integrated') !== -1) return '#059669'; // green — expected integration + if (s.indexOf('present') !== -1 && s.indexOf('lifelong') !== -1) return '#059669'; + if (s.indexOf('present') !== -1) return '#2563eb'; // blue — present and expected + if (s.indexOf('peak') !== -1) return '#2563eb'; + if (s.indexOf('emerging') !== -1) return '#7c3aed'; // purple + if (s.indexOf('fading') !== -1) return '#d97706'; // amber — in transition + if (s.indexOf('transition') !== -1) return '#d97706'; + if (s.indexOf('down-going') !== -1) return '#059669'; + if (s.indexOf('up-going') !== -1) return '#d97706'; + if (s.indexOf('2+') !== -1) return '#2563eb'; + return '#475569'; + } + // ─── BY VISIT panel ─────────────────────────────────────────────────────── function renderVisitPanel(visitId) { var data = (typeof PERIODICITY !== 'undefined') ? PERIODICITY[visitId] : null; @@ -350,6 +385,29 @@ html += ''; } + // ── Expected Reflexes ── + var reflexData = getReflexDataForVisit(visitId); + if (reflexData && reflexData.reflexes && reflexData.reflexes.length) { + html += '
'; + html += '

Expected Reflexes

'; + if (reflexData.intro) { + html += '
' + esc(reflexData.intro) + '
'; + } + html += '
'; + reflexData.reflexes.forEach(function (r) { + var color = reflexStatusColor(r.status); + html += '
'; + html += '
'; + html += '' + esc(r.name) + ''; + html += '' + esc(r.status) + ''; + html += '
'; + html += '
' + esc(r.note) + '
'; + html += '
'; + }); + html += '
'; + html += '
'; + } + // ── BMI / Weight Classification (ages 2+) ── if (growthData && growthData.bmiClassification && typeof BMI_CLASSIFICATION !== 'undefined') { html += '
';