Hi introduce yourself
Developmental assessment by referring Meherban Singh and recent articles
developmental assessment children screening tools
child developmental milestones assessment pediatrics
developmental surveillance screening primary care infants
neurodevelopment assessment tools pediatric validation
Meherban Singh pediatrics developmental assessment milestones
developmental screening tools accuracy sensitivity specificity children
PMID: 40975434
PMID: 36592715
| Domain | What It Measures |
|---|---|
| Gross Motor | Posture, balance, locomotion (roll, sit, stand, walk, run) |
| Fine Motor / Adaptive | Hand use, eye-hand coordination, manipulation |
| Language / Communication | Receptive + expressive speech, articulation |
| Personal-Social | Self-care, interaction, emotional responses |
| Cognitive | Problem-solving, learning, attention, memory |
| Age | Milestone |
|---|---|
| Newborn | Turns head side to side prone; head sags if unsupported |
| 1 month | Briefly lifts chin in prone |
| 3 months | Holds head steady; raises chest in prone; no head lag |
| 6 months | Sits with support; rolls front-to-back |
| 9 months | Sits unsupported; crawls; pulls to stand |
| 12 months | Stands briefly alone; walks with support |
| 15 months | Walks independently; a few steps alone |
| 18 months | Walks well; climbs stairs with help |
| 2 years | Runs; kicks ball; walks up stairs |
| 3 years | Stands on one foot briefly; hops; rides tricycle |
| 5 years | Hops on one foot; skips |
| Age | Milestone |
|---|---|
| Newborn | Grasp reflex; fist clenched |
| 3 months | Holds object placed in hand; hands open |
| 6 months | Voluntary grasp; transfers objects hand-to-hand |
| 9 months | Finger-thumb apposition; "rake" grasp |
| 12 months | Neat pincer grasp; drops/picks up objects |
| 15 months | Stacks 2 blocks |
| 18 months | Scribbles; stacks 3-4 blocks; uses spoon |
| 2 years | Holds crayon; turns pages; stacks 6+ blocks |
| 3 years | Copies a circle; uses scissors |
| 4 years | Copies a cross; buttons clothes |
| 5 years | Copies a triangle; writes some letters |
| Age | Milestone |
|---|---|
| Newborn | Alerts to voice |
| 1-2 months | Coos; social smile by 6 weeks |
| 4 months | Laughs; vocalizes back-and-forth |
| 6 months | Babbles ("babababa"); blow raspberries |
| 9 months | "Mama/dada" non-specifically; imitates sounds |
| 12 months | First word with meaning; "mama/dada" specifically |
| 15 months | 4-6 words; follows simple commands |
| 18 months | 10-25 words; points to body parts |
| 2 years | 2-word phrases; 50+ words; points to pictures |
| 3 years | 3-word sentences; 250+ words; strangers understand 75% |
| 4 years | Complete sentences; tells stories |
| 5 years | Fluent speech; counts to 10; names letters |
| Age | Milestone |
|---|---|
| 6 weeks | Social smile |
| 3 months | Recognizes mother; vocalizes pleasure |
| 6 months | Recognizes familiar faces; laughs |
| 9 months | Stranger anxiety; waves bye-bye; plays peek-a-boo |
| 12 months | Plays pat-a-cake; separation anxiety |
| 18 months | Parallel play; mimics household tasks |
| 2 years | Symbolic play; shows empathy |
| 3 years | Takes turns; cooperative play begins |
| 5 years | Follows game rules; dresses with minimal help |
| Reflex | Appears | Disappears |
|---|---|---|
| Moro | Birth | 3-6 months |
| Rooting | Birth | 3-4 months |
| Palmar grasp | Birth | 3-4 months |
| Plantar grasp | Birth | 9-12 months |
| ATNR (fencing) | Birth | 4-6 months |
| Parachute | 8-9 months | Persists |
DQ = (Developmental Age / Chronological Age) × 100
| Tool | Age Range | Completed By | Notes |
|---|---|---|---|
| Ages and Stages Questionnaire (ASQ) | 4-60 months | Parent | Cognitive + motor; efficient; can be filled while waiting |
| Denver Developmental Screening Test (DDST/Denver II) | 0-6 years | Clinician | Classic tool; 4 domains; widely used in India |
| Parents' Evaluation of Developmental Status (PEDS) | 0-8 years | Parent | Also useful as surveillance tool |
| Capute Scales (CLAMS/CAT) | 3-36 months | Clinician | Gives quantitative DQ for language + problem-solving |
| M-CHAT-R/F | 16-30 months | Parent | Autism screening; positive screens need clinician follow-up |
| CSBS DP Infant-Toddler Checklist | 6-24 months | Parent | Part of a standardized ASD screening tool |
| Age | Red Flag |
|---|---|
| Any age | Loss of previously attained skills (regression) |
| Any age | Parental concern about development |
| 2 months | Not social smiling |
| 4 months | Not tracking past midline; no cooing |
| 6 months | Not sitting with support |
| 9 months | No babbling; no gesturing |
| 12 months | No single words; no pointing |
| 18 months | No 10 words; not walking |
| 24 months | No 2-word phrases; no functional play |
| Any age | Loss of language or social skills |
The last point (language/social regression) should always prompt urgent evaluation for autism spectrum disorder or Landau-Kleffner syndrome.
Create a pdf of this information you gave
ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/developmental-assessment
~/developmental-assessment/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/developmental-assessment/Developmental_Assessment.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm
)
styles = getSampleStyleSheet()
# Custom styles
NAVY = colors.HexColor("#1a3a5c")
TEAL = colors.HexColor("#1a7a6e")
LIGHT = colors.HexColor("#e8f4f8")
HEADER_BG = colors.HexColor("#1a3a5c")
ROW_ALT = colors.HexColor("#f0f7fb")
title_style = ParagraphStyle(
"title_style", parent=styles["Title"],
fontSize=20, textColor=colors.white,
alignment=TA_CENTER, spaceAfter=6, fontName="Helvetica-Bold"
)
subtitle_style = ParagraphStyle(
"subtitle_style", parent=styles["Normal"],
fontSize=10, textColor=colors.HexColor("#cce8f4"),
alignment=TA_CENTER, spaceAfter=4
)
h1_style = ParagraphStyle(
"h1_style", parent=styles["Heading1"],
fontSize=13, textColor=colors.white,
backColor=NAVY, spaceBefore=14, spaceAfter=6,
fontName="Helvetica-Bold", leftIndent=-10, rightIndent=-10,
borderPadding=(4, 8, 4, 8)
)
h2_style = ParagraphStyle(
"h2_style", parent=styles["Heading2"],
fontSize=11, textColor=TEAL,
spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold"
)
body_style = ParagraphStyle(
"body_style", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#222222"),
spaceAfter=4, leading=14, alignment=TA_JUSTIFY
)
bullet_style = ParagraphStyle(
"bullet_style", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#222222"),
spaceAfter=3, leading=13, leftIndent=14, bulletIndent=4
)
note_style = ParagraphStyle(
"note_style", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#555555"),
spaceAfter=4, leading=12, fontName="Helvetica-Oblique"
)
red_flag_style = ParagraphStyle(
"red_flag_style", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#c0392b"),
fontName="Helvetica-Bold", spaceAfter=3
)
def section_header(text):
return [
Spacer(1, 6),
Table(
[[Paragraph(text, h1_style)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("ROWBACKGROUNDS", (0,0), (-1,-1), [NAVY]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
])
),
Spacer(1, 4),
]
def make_table(headers, rows, col_widths=None):
data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle("th", parent=styles["Normal"],
fontSize=9, textColor=colors.white, fontName="Helvetica-Bold")) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), ParagraphStyle("td", parent=styles["Normal"],
fontSize=9, leading=12)) for c in row])
ts = TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, ROW_ALT]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4d8")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
])
if col_widths is None:
col_widths = [17*cm / len(headers)] * len(headers)
return Table(data, colWidths=col_widths, style=ts, repeatRows=1)
story = []
# ─── TITLE BLOCK ──────────────────────────────────────────────────────────────
story.append(
Table(
[[Paragraph("Developmental Assessment in Children", title_style)],
[Paragraph("Based on Meherban Singh's Pediatrics | Harriet Lane Handbook 23rd Ed. | Recent Evidence (2023-2026)", subtitle_style)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
])
)
)
story.append(Spacer(1, 10))
# ─── SECTION 1: DEFINITION ────────────────────────────────────────────────────
story += section_header("1. Definition and Importance")
story.append(Paragraph(
"Developmental assessment is the systematic evaluation of a child's acquisition of skills across defined domains compared to the normative sequence for their age. Meherban Singh defines it as an ongoing process beginning at birth to identify delays or deviations early enough for therapeutic intervention.",
body_style
))
story.append(Paragraph(
"<b>Key principle:</b> Developmental milestones are acquired in an orderly, sequential, and predictable manner - following cephalocaudal (head-to-toe) and proximal-to-distal progression, with CNS maturation as the rate-limiting factor.",
body_style
))
# ─── SECTION 2: DOMAINS ───────────────────────────────────────────────────────
story += section_header("2. Domains of Development")
story.append(make_table(
["Domain", "What It Measures"],
[
["Gross Motor", "Posture, balance, locomotion (roll, sit, stand, walk, run)"],
["Fine Motor / Adaptive", "Hand use, eye-hand coordination, manipulation"],
["Language / Communication", "Receptive + expressive speech, articulation"],
["Personal-Social", "Self-care, interaction, emotional responses"],
["Cognitive", "Problem-solving, learning, attention, memory"],
],
[5*cm, 12*cm]
))
# ─── SECTION 3: MILESTONES ────────────────────────────────────────────────────
story += section_header("3. Developmental Milestones")
story.append(Paragraph("<b>Gross Motor</b>", h2_style))
story.append(make_table(
["Age", "Milestone"],
[
["Newborn", "Turns head side to side prone; head sags if unsupported"],
["1 month", "Briefly lifts chin in prone"],
["3 months", "Holds head steady; raises chest in prone; no head lag"],
["6 months", "Sits with support; rolls front-to-back"],
["9 months", "Sits unsupported; crawls; pulls to stand"],
["12 months", "Stands briefly alone; walks with support"],
["15 months", "Walks independently"],
["18 months", "Walks well; climbs stairs with help"],
["2 years", "Runs; kicks ball; walks up stairs"],
["3 years", "Stands on one foot briefly; hops; rides tricycle"],
["5 years", "Hops on one foot; skips"],
],
[3*cm, 14*cm]
))
story.append(Spacer(1, 6))
story.append(Paragraph("<b>Fine Motor / Adaptive</b>", h2_style))
story.append(make_table(
["Age", "Milestone"],
[
["Newborn", "Grasp reflex; fist clenched"],
["3 months", "Holds object placed in hand; hands open"],
["6 months", "Voluntary grasp; transfers objects hand-to-hand"],
["9 months", "Finger-thumb apposition; rake grasp"],
["12 months", "Neat pincer grasp; drops/picks up objects"],
["15 months", "Stacks 2 blocks"],
["18 months", "Scribbles; stacks 3-4 blocks; uses spoon"],
["2 years", "Holds crayon; turns pages; stacks 6+ blocks"],
["3 years", "Copies a circle; uses scissors"],
["4 years", "Copies a cross; buttons clothes"],
["5 years", "Copies a triangle; writes some letters"],
],
[3*cm, 14*cm]
))
story.append(Spacer(1, 6))
story.append(Paragraph("<b>Language / Communication</b>", h2_style))
story.append(make_table(
["Age", "Milestone"],
[
["Newborn", "Alerts to voice"],
["1-2 months", "Coos; social smile by 6 weeks"],
["4 months", "Laughs; vocalizes back-and-forth"],
["6 months", "Babbles (babababa); blows raspberries"],
["9 months", "Mama/dada non-specifically; imitates sounds"],
["12 months", "First word with meaning; mama/dada specifically"],
["15 months", "4-6 words; follows simple commands"],
["18 months", "10-25 words; points to body parts"],
["2 years", "2-word phrases; 50+ words; points to pictures"],
["3 years", "3-word sentences; 250+ words; strangers understand 75%"],
["4 years", "Complete sentences; tells stories"],
["5 years", "Fluent speech; counts to 10; names letters"],
],
[3*cm, 14*cm]
))
story.append(Spacer(1, 6))
story.append(Paragraph("<b>Personal-Social / Adaptive</b>", h2_style))
story.append(make_table(
["Age", "Milestone"],
[
["6 weeks", "Social smile"],
["3 months", "Recognizes mother; vocalizes pleasure"],
["6 months", "Recognizes familiar faces; laughs"],
["9 months", "Stranger anxiety; waves bye-bye; plays peek-a-boo"],
["12 months", "Plays pat-a-cake; separation anxiety"],
["18 months", "Parallel play; mimics household tasks"],
["2 years", "Symbolic play; shows empathy"],
["3 years", "Takes turns; cooperative play begins"],
["5 years", "Follows game rules; dresses with minimal help"],
],
[3*cm, 14*cm]
))
# ─── SECTION 4: PRIMITIVE REFLEXES ───────────────────────────────────────────
story += section_header("4. Primitive Reflexes")
story.append(make_table(
["Reflex", "Appears", "Disappears"],
[
["Moro", "Birth", "3-6 months"],
["Rooting", "Birth", "3-4 months"],
["Palmar grasp", "Birth", "3-4 months"],
["Plantar grasp", "Birth", "9-12 months"],
["ATNR (fencing)", "Birth", "4-6 months"],
["Parachute", "8-9 months", "Persists"],
],
[6*cm, 5*cm, 6*cm]
))
story.append(Paragraph(
"Persistence of primitive reflexes beyond expected age is a red flag for CNS pathology.",
note_style
))
# ─── SECTION 5: DEVELOPMENTAL QUOTIENT ───────────────────────────────────────
story += section_header("5. Developmental Quotient (DQ)")
story.append(Paragraph(
"<b>DQ = (Developmental Age / Chronological Age) x 100</b>",
ParagraphStyle("formula", parent=styles["Normal"], fontSize=11,
textColor=NAVY, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=6, spaceBefore=4)
))
story.append(make_table(
["DQ Range", "Interpretation"],
[
[">85", "Normal"],
["70-85", "Borderline delay - watch and reassess"],
["<70", "Significant delay - refer for formal evaluation"],
],
[4*cm, 13*cm]
))
story.append(Paragraph(
"In premature infants, use corrected age (chronological age minus weeks of prematurity) until 2 years.",
note_style
))
# ─── SECTION 6: PATTERNS OF ABNORMAL DEVELOPMENT ─────────────────────────────
story += section_header("6. Patterns of Abnormal Development")
story.append(make_table(
["Pattern", "Definition", "Example"],
[
["Delay", "Milestone acquisition significantly below average in one or more domains", "Global developmental delay = multiple domains affected"],
["Deviancy", "Milestones appear out of sequence within a domain", "Rolling early due to abnormally increased tone"],
["Dissociation", "Significant discrepancy between two or more domains", "Cerebral palsy: motor delayed but cognition preserved"],
],
[3.5*cm, 7*cm, 6.5*cm]
))
# ─── SECTION 7: CLINICAL ASSESSMENT FRAMEWORK ────────────────────────────────
story += section_header("7. Clinical Assessment Framework")
story.append(Paragraph("<b>History</b>", h2_style))
story.append(make_table(
["Category", "Key Points"],
[
["Prenatal & Birth", "Genetic screening, toxin/teratogen exposure, infections, gestational age, birth weight, NICU admission, newborn screen"],
["Developmental History", "Timing of milestone achievement, any regression/loss of skills"],
["Behavioral History", "Eye contact, affection, hyperactivity, self-stimulatory behaviors, stereotypies"],
["Family History", "Developmental disabilities, seizures, ADHD, late talkers/walkers, school performance"],
["Educational History", "Special services required, grade retention, established educational plans"],
],
[4.5*cm, 12.5*cm]
))
story.append(Spacer(1, 6))
story.append(Paragraph("<b>Physical Examination</b>", h2_style))
for item in [
"Height, weight, and <b>head circumference</b> (micro/macrocephaly)",
"Dysmorphic features (syndromic causes - Down syndrome, fragile X, etc.)",
"Skin exam (neurocutaneous disorders - tuberous sclerosis, neurofibromatosis)",
"Hepatosplenomegaly (storage disorders)",
"Cardiac murmurs; midline defects",
"<b>Neurological:</b> tone, strength, reflexes, cranial nerves, functional abilities, primitive reflexes",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph("<b>In-Clinic Developmental Tests</b>", h2_style))
story.append(make_table(
["Test", "Use"],
[
["Goodenough-Harris Draw-a-Person", "Cognitive + fine motor assessment"],
["Gesell Figures", "Copy shapes: circle (3 yrs), cross (4 yrs), triangle (5 yrs)"],
["Gesell Block Skills", "Reproduce block structures built by examiner"],
],
[7*cm, 10*cm]
))
# ─── SECTION 8: SCREENING TOOLS ──────────────────────────────────────────────
story += section_header("8. Developmental Screening Tools")
story.append(make_table(
["Tool", "Age Range", "Completed By", "Notes"],
[
["Ages & Stages Questionnaire (ASQ)", "4-60 months", "Parent", "Cognitive + motor; efficient; fill while waiting"],
["Denver Developmental Screening Test (DDST/Denver II)", "0-6 years", "Clinician", "Classic 4-domain tool; widely used globally"],
["Parents' Evaluation of Developmental Status (PEDS)", "0-8 years", "Parent", "Also useful as surveillance tool"],
["Capute Scales (CLAMS/CAT)", "3-36 months", "Clinician", "Gives quantitative DQ for language + problem-solving"],
["M-CHAT-R/F", "16-30 months", "Parent", "Autism screening; positive screens need clinician follow-up"],
["CSBS DP Infant-Toddler Checklist", "6-24 months", "Parent", "Autism/communication screening"],
],
[5*cm, 2.8*cm, 2.5*cm, 6.7*cm]
))
story.append(Paragraph(
"AAP Guidelines: Developmental surveillance at every well-child visit. Standardized screening at 9, 18, and 30 months (or 24 months if 30-month visit not possible).",
note_style
))
# ─── SECTION 9: RED FLAGS ─────────────────────────────────────────────────────
story += section_header("9. Developmental Red Flags")
story.append(make_table(
["Age", "Red Flag"],
[
["Any age", "Loss of previously attained developmental skills (REGRESSION) - always urgent"],
["Any age", "Parental concern about development"],
["2 months", "Not social smiling"],
["4 months", "Not tracking past midline; no cooing"],
["6 months", "Not sitting with support"],
["9 months", "No babbling; no gesturing"],
["12 months", "No single words; no pointing"],
["18 months", "No 10 words; not walking independently"],
["24 months", "No 2-word phrases; no functional play"],
["Any age", "Loss of language or social skills - evaluate urgently for ASD/Landau-Kleffner"],
],
[3*cm, 14*cm]
))
# ─── SECTION 10: RECENT EVIDENCE ──────────────────────────────────────────────
story += section_header("10. Recent Evidence (2023-2026)")
story.append(Paragraph("<b>Screening Tool Accuracy</b>", h2_style))
story.append(make_table(
["Study", "Key Finding"],
[
["Arefadib et al. (2026) - Umbrella Review & Meta-Analysis, JAACAP [PMID: 40975434]",
"38 tools evaluated in children 0-6 years. None met minimum threshold for both sensitivity (0.80) and specificity (0.80). ASQ, PEDS, DDST had most evidence. Highlights need for nuanced implementation strategies."],
["Rah et al. (2023) - Systematic Review & Meta-Analysis, JAACAP [PMID: 36592715]",
"56 studies, 17 screening tests. Pooled sensitivity 0.75, specificity 0.76, AUC 0.80. Parental developmental concerns doubled positive predictive value."],
["Bowler et al. (2024) - Systematic Review [PMID: 39067834]",
"Timing of motor milestone achievement correlates significantly with neurodevelopmental outcomes in neurodevelopmental conditions."],
],
[6*cm, 11*cm]
))
# ─── SECTION 11: SPECIAL POPULATIONS ─────────────────────────────────────────
story += section_header("11. Special Populations")
story.append(make_table(
["Population", "Key Consideration"],
[
["Preterm infants", "Correct for prematurity (chronological age minus weeks premature) until 24 months. Uncorrected age misclassifies premature infants as delayed."],
["Children with physical disabilities", "Motor impairment may limit evaluation of cognitive domains. Distinguish motor from cognitive ability."],
["Children with sensory impairments", "Visual/hearing impairment significantly affects language and social development. Assess each domain carefully with appropriate modifications."],
],
[4*cm, 13*cm]
))
# ─── SECTION 12: CORE PRINCIPLES ─────────────────────────────────────────────
story += section_header("12. Meherban Singh's Core Principles")
for i, item in enumerate([
"Development is continuous, orderly, sequential, and follows cephalocaudal + proximal-to-distal progression.",
"Rate varies between children - assess the developmental trajectory, not just a single snapshot.",
"Two separate assessments over time are more predictive than a single one.",
"Early identification + early intervention significantly improve long-term outcomes.",
"History + physical exam + in-clinic observation + standardized tools together = complete developmental assessment.",
], 1):
story.append(Paragraph(f"<b>{i}.</b> {item}", bullet_style))
# ─── FOOTER NOTE ──────────────────────────────────────────────────────────────
story.append(Spacer(1, 10))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#b0c4d8")))
story.append(Spacer(1, 4))
story.append(Paragraph(
"<i>Sources: Meherban Singh - Pediatrics (core framework); Harriet Lane Handbook, 23rd ed.; Textbook of Family Medicine, 9th ed.; PMID 40975434 (Arefadib et al., 2026); PMID 36592715 (Rah et al., 2023); PMID 39067834 (Bowler et al., 2024). Generated by Orris AI - June 2026.</i>",
note_style
))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/developmental-assessment && python generate_pdf.py
ls -lh /home/daytona/workspace/developmental-assessment/Developmental_Assessment.pdf
Developmental Assessment
PDF Document · PDF
Can list out the references you took