Growth and development of children

| Domain | Description |
|---|---|
| Gross Motor | Large muscle movements - rolling, crawling, standing, walking |
| Fine Motor | Hand and finger control - grasping, pincer grip, drawing |
| Language | Receptive (understanding) and expressive (speaking) communication |
| Personal-Social | Interaction with people, self-care, emotional responses |
| Cognitive | Problem-solving, memory, learning |
| Age | Gross Motor | Fine Motor/Reflex | Language | Social/Cognitive |
|---|---|---|---|---|
| Birth | Flexed arms; head sags; body sags in ventral suspension | Moro, stepping, placing, grasp reflexes present | Alerts to voice | Fixates on face/light |
| 1 month | Lifts chin briefly prone; head lag | Tonic neck reflex | Range of cries | Begins to smile; watches people |
| 2 months | Head in plane with body | Stepping reflex fades | Cooing | Social smile well established |
| 4 months | Head erect; rolls partially; bears weight on arms | Grasps objects; brings to mouth | Vowel sounds ("ah", "oh") | Laughs aloud |
| 6 months | Sits with rounded back; rolls over; pivots | Moro reflex fades | Babbles vowel sounds | Recognizes familiar faces |
| 9 months | Sits erect; crawls; pulls to stand; walks holding both hands | Transfers objects hand-to-hand; inferior pincer grasp | Polysyllabic babble ("bababa") | Stranger anxiety; imitates actions |
| 12 months | Stands alone; takes first steps; walks holding one hand | Pincer grasp (thumb + forefinger); pokes with forefinger | "Mama/dada" with meaning; 1-2 words | Plays peek-a-boo; waves bye-bye |
| Age | Gross Motor | Fine Motor | Language | Social/Cognitive |
|---|---|---|---|---|
| 15 months | Walks alone; crawls up stairs | Builds 2-block tower; scribbles | 4-6 words; points to wants | Follows simple commands |
| 18 months | Runs stiffly; sits on small chair; walks up stairs with railing | Tower of 4 cubes; copies a line | Points to body parts; ~10 words; follows one-step commands | Parallel play; hugs parent |
| 24 months | Runs well; jumps in place; kicks ball; walks stairs one at a time | Tower of 7 blocks; imitates circular stroke | 2-word phrases; 50+ words; uses pronouns (I, me) | Symbolic play begins; increasing independence |
| 36 months | Rides tricycle; climbs well; alternates feet on stairs | Copies circle; uses scissors | 3-word sentences; ~900 word vocabulary; asks "why?" | Parallel to associative play; aware of gender |
| Age | Gross Motor | Fine Motor | Language | Social/Cognitive |
|---|---|---|---|---|
| 4 years | Hops on one foot; catches ball; skips | Copies cross (+); draws person with 4 parts | ~1,500 words; tells stories; asks many questions | Cooperative play; imaginative play; Erikson's "Initiative vs. Guilt" stage |
| 5 years | Skips well; balance on one foot ≥10 sec | Copies square; draws person with 6+ parts | ~2,000 words; uses complete sentences; can count to 10 | Ready for school; understands rules; sense of right/wrong |
| Theorist | Theory | Core Idea |
|---|---|---|
| Jean Piaget | Cognitive development | 4 stages: Sensorimotor → Preoperational → Concrete Operational → Formal Operational |
| Erik Erikson | Psychosocial development | 8 stages of life, each with a developmental conflict (e.g., Trust vs. Mistrust in infancy) |
| Sigmund Freud | Psychosexual development | Oral → Anal → Phallic → Latency → Genital stages |
| Lev Vygotsky | Sociocultural theory | Social interaction and language drive cognitive development; Zone of Proximal Development |
| John Bowlby | Attachment theory | Secure attachment to caregiver is foundational for emotional and social development |
Make a pdf of all of these content and add. Anthropometory
ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/chil…
~/child-development/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import datetime
OUTPUT = "/home/daytona/workspace/child-development/Growth_and_Development_of_Children.pdf"
# ── colour palette ──────────────────────────────────────────────────────────
C_DARK_BLUE = colors.HexColor("#1a3a5c")
C_MID_BLUE = colors.HexColor("#2e6da4")
C_LIGHT_BLUE = colors.HexColor("#d6e8f7")
C_ACCENT = colors.HexColor("#e8832a")
C_GREEN = colors.HexColor("#2a7a4b")
C_LIGHT_GREEN= colors.HexColor("#d4edda")
C_YELLOW = colors.HexColor("#fff3cd")
C_RED_LIGHT = colors.HexColor("#fde8e8")
C_GREY_BG = colors.HexColor("#f4f6f9")
C_WHITE = colors.white
C_BLACK = colors.HexColor("#1a1a1a")
C_DIVIDER = colors.HexColor("#b0c8e0")
# ── document ────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
topMargin=2*cm, bottomMargin=2.5*cm,
leftMargin=2*cm, rightMargin=2*cm,
title="Growth and Development of Children",
author="Orris Medical AI",
)
W, H = A4
CONTENT_W = W - 4*cm
styles = getSampleStyleSheet()
# custom styles
def make_style(name, **kw):
return ParagraphStyle(name, **kw)
S = {
"cover_title": make_style("cover_title",
fontSize=28, leading=34, textColor=C_WHITE,
alignment=TA_CENTER, fontName="Helvetica-Bold"),
"cover_sub": make_style("cover_sub",
fontSize=14, leading=18, textColor=C_LIGHT_BLUE,
alignment=TA_CENTER, fontName="Helvetica"),
"cover_date": make_style("cover_date",
fontSize=10, leading=14, textColor=colors.HexColor("#aac8e8"),
alignment=TA_CENTER, fontName="Helvetica"),
"h1": make_style("h1",
fontSize=18, leading=22, textColor=C_WHITE,
fontName="Helvetica-Bold", spaceBefore=14, spaceAfter=6),
"h2": make_style("h2",
fontSize=13, leading=17, textColor=C_DARK_BLUE,
fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=4),
"h3": make_style("h3",
fontSize=11, leading=15, textColor=C_MID_BLUE,
fontName="Helvetica-Bold", spaceBefore=8, spaceAfter=3),
"body": make_style("body",
fontSize=10, leading=15, textColor=C_BLACK,
fontName="Helvetica", spaceBefore=3, spaceAfter=3,
alignment=TA_JUSTIFY),
"bullet": make_style("bullet",
fontSize=10, leading=14, textColor=C_BLACK,
fontName="Helvetica", leftIndent=14, spaceBefore=1, spaceAfter=1,
bulletIndent=4),
"table_hdr": make_style("table_hdr",
fontSize=9, leading=12, textColor=C_WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER),
"table_cell": make_style("table_cell",
fontSize=8.5, leading=12, textColor=C_BLACK,
fontName="Helvetica", alignment=TA_LEFT),
"table_cell_c": make_style("table_cell_c",
fontSize=8.5, leading=12, textColor=C_BLACK,
fontName="Helvetica", alignment=TA_CENTER),
"note": make_style("note",
fontSize=9, leading=13, textColor=colors.HexColor("#555555"),
fontName="Helvetica-Oblique", spaceBefore=2, spaceAfter=4),
"source": make_style("source",
fontSize=8, leading=11, textColor=C_MID_BLUE,
fontName="Helvetica-Oblique"),
"red_flag_title": make_style("red_flag_title",
fontSize=11, leading=14, textColor=colors.HexColor("#b02020"),
fontName="Helvetica-Bold", spaceBefore=4),
"toc_entry": make_style("toc_entry",
fontSize=11, leading=16, textColor=C_DARK_BLUE,
fontName="Helvetica"),
}
story = []
# ═══════════════════════════════════════════════════════════════════════════
# helpers
# ═══════════════════════════════════════════════════════════════════════════
def section_header(title, color=C_DARK_BLUE):
"""Full-width coloured banner heading."""
data = [[Paragraph(title, S["h1"])]]
t = Table(data, colWidths=[CONTENT_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [4]),
]))
return t
def info_box(paragraphs_list, bg=C_LIGHT_BLUE, border=C_MID_BLUE):
"""Coloured info box."""
content = [[p] for p in paragraphs_list]
rows = []
for p in paragraphs_list:
rows.append([p])
t = Table(rows, colWidths=[CONTENT_W - 24])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 1.5, border),
("ROUNDEDCORNERS", [4]),
]))
return t
def std_table(headers, rows, col_widths=None, header_color=C_DARK_BLUE, alt_bg=C_GREY_BG):
"""Standard styled table."""
header_row = [Paragraph(h, S["table_hdr"]) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
data.append([Paragraph(str(c), S["table_cell"]) for c in row])
if col_widths is None:
col_widths = [CONTENT_W / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), header_color),
("GRID", (0,0), (-1,-1), 0.5, C_DIVIDER),
("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, alt_bg]),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
t.setStyle(TableStyle(style))
return t
def bullet(text):
return Paragraph(f"• {text}", S["bullet"])
def sp(h=6):
return Spacer(1, h)
def divider():
return HRFlowable(width="100%", thickness=1, color=C_DIVIDER, spaceAfter=4, spaceBefore=4)
# ═══════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ═══════════════════════════════════════════════════════════════════════════
cover_data = [[
Paragraph("Growth & Development<br/>of Children", S["cover_title"]),
]]
cover_table = Table(cover_data, colWidths=[CONTENT_W])
cover_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 24),
("RIGHTPADDING", (0,0), (-1,-1), 24),
("TOPPADDING", (0,0), (-1,-1), 48),
("BOTTOMPADDING",(0,0), (-1,-1), 48),
("ROUNDEDCORNERS", [8]),
]))
story.append(Spacer(1, 2*cm))
story.append(cover_table)
story.append(sp(16))
story.append(Paragraph("A Comprehensive Medical Reference", S["cover_sub"]))
story.append(sp(8))
story.append(Paragraph("Including Anthropometry, Developmental Milestones,", S["cover_sub"]))
story.append(Paragraph("Developmental Theories & Red Flags", S["cover_sub"]))
story.append(sp(32))
story.append(Paragraph(
f"Sources: Guyton & Hall Medical Physiology | Textbook of Family Medicine 9e<br/>"
f"Kaplan & Sadock's Comprehensive Textbook of Psychiatry | Bradley & Daroff's Neurology<br/>"
f"Generated: {datetime.date.today().strftime('%B %d, %Y')}",
S["cover_date"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# TABLE OF CONTENTS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("Table of Contents"))
story.append(sp(10))
toc_items = [
("1.", "Overview and Principles of Development"),
("2.", "Brain Development"),
("3.", "Physical Growth and Height"),
("4.", "Anthropometry in Children"),
("5.", "Developmental Domains"),
("6.", "Developmental Milestones by Age"),
("7.", "Key Developmental Theories"),
("8.", "Red Flags for Developmental Delay"),
("9.", "Developmental Assessment Tools"),
("10.", "Factors Influencing Development"),
]
for num, title in toc_items:
story.append(Paragraph(f"<b>{num}</b> {title}", S["toc_entry"]))
story.append(sp(4))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 1 – OVERVIEW
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("1. Overview and Principles of Development"))
story.append(sp(10))
story.append(Paragraph(
"Child development is the progressive acquisition of new skills across multiple domains. "
"It is shaped by an interplay of <b>genetics and environment</b> — genetic background primes "
"potential, but environmental stimulation (positive or negative) modulates how that potential "
"is expressed. Development can be viewed as a transactional model: identical twins reared in "
"the same household do not develop identical personalities.",
S["body"]))
story.append(sp(8))
story.append(Paragraph("Core Principles", S["h2"]))
principles = [
"Development follows a <b>predictable sequence</b> (e.g., crawl → stand → walk), even in delayed children",
"Development proceeds in <b>cephalocaudal</b> (head-to-tail) and <b>proximal-to-distal</b> directions",
"Responses mature from generalised whole-body reflexes to discrete voluntary cortical control",
"A delay in one domain can impair development in another domain",
"Normal development includes regression; a child may temporarily lose a new skill during stress",
"<b>Frank loss of a solidified skill</b> at any age is always abnormal and requires investigation",
"CNS control of the external anal sphincter is incomplete before 18-24 months — toilet training before this age is physiologically impossible",
"Development is <b>continuous and discontinuous</b> — the direction of the curve is not always positive",
]
for p in principles:
story.append(bullet(p))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Kaplan & Sadock's Comprehensive Textbook of Psychiatry | Textbook of Family Medicine 9e</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 2 – BRAIN DEVELOPMENT
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("2. Brain Development", C_MID_BLUE))
story.append(sp(10))
story.append(Paragraph(
"Unlike other species, humans are born with an immature CNS. The infant is entirely dependent "
"on others and governed by innate reflexes, yet in time becomes capable of complex cognitive, "
"social, and emotional capabilities.",
S["body"]))
story.append(sp(8))
brain_data = [
["Parameter", "Value / Timing"],
["Brain mass at birth", "26% of adult brain mass"],
["Brain mass at 1 year", "55% of adult brain mass"],
["Adult brain proportions reached", "End of 2nd year of life"],
["Additional brain growth possible after year 2", "Only ~20%"],
["Full CNS myelination of major tracts", "End of 1st year of life"],
["Anterior fontanel closure", "~18 months"],
["Cortex and visual system maturation", "Several months post-birth"],
["Prefrontal cortex full maturation", "~Age 25 years"],
]
story.append(std_table(
brain_data[0], brain_data[1:],
col_widths=[9*cm, 8*cm],
))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Guyton & Hall Textbook of Medical Physiology, 14e, p. 1057</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 3 – PHYSICAL GROWTH
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("3. Physical Growth and Height", C_GREEN))
story.append(sp(10))
story.append(Paragraph("Height Growth Pattern", S["h2"]))
story.append(Paragraph(
"Boys and girls grow at <b>parallel rates</b> until the end of the first decade of life. "
"Divergence begins with puberty-linked hormonal changes.",
S["body"]))
story.append(sp(6))
gender_rows = [
["Feature", "Females", "Males"],
["Pubertal growth spurt onset", "Ages 11–13", "Ages 13–15"],
["Driven by", "Estrogens", "Testosterone"],
["Epiphyseal fusion", "~Ages 14–16 (early)", "~Ages 17–19 (delayed)"],
["Effect on final height", "Growth ceases earlier; shorter final height", "Prolonged growth; greater final height"],
]
story.append(std_table(
gender_rows[0], gender_rows[1:],
col_widths=[5.5*cm, 6.5*cm, 5*cm],
header_color=C_GREEN,
))
story.append(sp(10))
story.append(Paragraph("Newborn Weight Norms", S["h2"]))
nw_rows = [
["Parameter", "Normal Value / Expected Finding"],
["Expected post-birth weight loss", "5%–7% of birth weight"],
["Excessive weight loss threshold", ">10% of birth weight"],
["Weight loss cessation", "By day 5 of life"],
["Birth weight regain", "By 2 weeks of age"],
["Daily weight gain (once feeding established)", "15–30 g/day"],
["AAP alert threshold for breastfed infants", ">7% loss from birth weight"],
]
story.append(std_table(
nw_rows[0], nw_rows[1:],
col_widths=[8*cm, 9*cm],
header_color=C_GREEN,
))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Textbook of Family Medicine 9e, p. 538 | Guyton & Hall, p. 1057</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 4 – ANTHROPOMETRY
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("4. Anthropometry in Children", colors.HexColor("#6a3d9a")))
story.append(sp(10))
story.append(Paragraph(
"<b>Anthropometry</b> refers to the physical measurement of an individual compared with "
"reference standards. In children, serial measurements over time are far more informative "
"than any single measurement. Key parameters include:",
S["body"]))
story.append(sp(6))
anthr_params = [
"Weight (mass)",
"Length / Height (supine length used under age 2; standing height thereafter)",
"Head circumference (occipito-frontal / fronto-occipital circumference — FOC)",
"Chest circumference",
"Mid-upper arm circumference (MUAC)",
"Skinfold thickness (triceps, subscapular)",
"Body Mass Index (BMI) — used from age 2 onwards",
"Waist and hip circumferences (older children and adolescents)",
]
for p in anthr_params:
story.append(bullet(p))
story.append(sp(10))
story.append(Paragraph("Standard Anthropometric Values at Birth and Early Childhood", S["h2"]))
birth_rows = [
["Measurement", "Average at Birth", "At 1 Year", "At 2 Years"],
["Weight", "~3.0–3.5 kg", "~10 kg (triple birth wt)", "~12 kg"],
["Length / Height", "~50 cm", "~75 cm", "~85 cm"],
["Head circumference (FOC)", "~34–35 cm", "~46–47 cm", "~48–49 cm"],
["Chest circumference", "~32 cm (< head)", "~46 cm (= head)", "~49–50 cm (> head)"],
]
story.append(std_table(
birth_rows[0], birth_rows[1:],
col_widths=[5.5*cm, 4*cm, 4*cm, 3.5*cm],
header_color=colors.HexColor("#6a3d9a"),
))
story.append(sp(10))
story.append(Paragraph("Head Circumference (FOC) — Clinical Significance", S["h2"]))
story.append(Paragraph(
"The head circumference reflects <b>brain growth</b> and is the most sensitive "
"anthropometric indicator of neurological development in early childhood.",
S["body"]))
story.append(sp(6))
hc_rows = [
["Finding", "Definition", "Possible Causes"],
["Macrocephaly", "FOC > 98th percentile (or >2 SD above mean)", "Hydrocephalus, megalencephaly, storage disorders, familial"],
["Microcephaly", "FOC < 2nd percentile (or >2 SD below mean)", "Genetic syndromes, TORCH infections, fetal alcohol syndrome, craniosynostosis"],
["Normal FOC at birth", "~34–35 cm", "—"],
["Rate of growth (0–3 months)", "~2 cm/month", "Fastest postnatal brain growth period"],
["Rate of growth (3–6 months)", "~1 cm/month", "Slowing but still rapid"],
["Rate of growth (6–12 months)", "~0.5 cm/month", "Further deceleration"],
]
story.append(std_table(
hc_rows[0], hc_rows[1:],
col_widths=[4.5*cm, 5.5*cm, 7*cm],
header_color=colors.HexColor("#6a3d9a"),
))
story.append(sp(10))
story.append(Paragraph("Body Mass Index (BMI) in Children", S["h2"]))
story.append(Paragraph(
"In children aged 2–19 years, BMI is interpreted using <b>age- and sex-specific percentiles</b> "
"(not the adult cut-offs), typically from CDC or WHO growth charts.",
S["body"]))
story.append(sp(6))
bmi_rows = [
["Category", "BMI Percentile (Children 2–19 yrs)", "Adult BMI (kg/m²)"],
["Underweight", "< 5th percentile", "< 18.5"],
["Healthy weight", "5th – 84th percentile", "18.5 – 24.9"],
["Overweight", "85th – 94th percentile", "25 – 29.9"],
["Obese", "≥ 95th percentile", "≥ 30"],
]
story.append(std_table(
bmi_rows[0], bmi_rows[1:],
col_widths=[5*cm, 7*cm, 5*cm],
header_color=colors.HexColor("#6a3d9a"),
))
story.append(sp(10))
story.append(Paragraph("Mid-Upper Arm Circumference (MUAC)", S["h2"]))
story.append(Paragraph(
"MUAC is especially useful in resource-limited settings for rapid nutritional assessment "
"in children aged 6 months to 5 years. It requires only a non-stretch tape measure.",
S["body"]))
story.append(sp(6))
muac_rows = [
["MUAC (cm)", "Nutritional Status"],
["≥ 12.5 cm", "Normal / Well-nourished"],
["11.5 – 12.4 cm", "Moderate Acute Malnutrition (MAM)"],
["< 11.5 cm", "Severe Acute Malnutrition (SAM)"],
]
story.append(std_table(
muac_rows[0], muac_rows[1:],
col_widths=[6*cm, 11*cm],
header_color=colors.HexColor("#6a3d9a"),
))
story.append(sp(10))
story.append(Paragraph("Growth Charts and Percentiles", S["h2"]))
story.append(Paragraph(
"Growth charts compare a child's measurements against a reference population. "
"Serial plotting is more informative than a single point.",
S["body"]))
story.append(sp(6))
gc_items = [
"<b>WHO Growth Standards (0–5 years):</b> Based on children raised under optimal conditions (breastfed, non-smoking, adequate nutrition). Prescriptive — describes how children SHOULD grow.",
"<b>CDC Growth Charts (2–19 years):</b> Descriptive — describes how US children did grow. Used for school-age and adolescent surveillance.",
"<b>Key percentiles to know:</b> 3rd, 5th, 10th, 25th, 50th, 75th, 90th, 95th, 97th",
"<b>Crossing 2 major percentile lines</b> (e.g., dropping from 75th to below 25th) warrants investigation for failure to thrive or disease",
"<b>Corrected gestational age</b> must be used for premature infants until 24 months chronological age",
]
for item in gc_items:
story.append(bullet(item))
story.append(sp(10))
story.append(Paragraph("Skinfold Thickness", S["h2"]))
story.append(Paragraph(
"Skinfold measurements estimate subcutaneous fat and total body fat percentage. "
"Common sites include <b>triceps</b> (most used in children), subscapular, biceps, and "
"suprailiac. A specialised skinfold caliper is used. Values are compared to age- and "
"sex-matched reference data. Limitations include inter-observer variability and reduced "
"accuracy in obese children.",
S["body"]))
story.append(sp(10))
story.append(Paragraph("Weight-for-Height (Wasting) and Height-for-Age (Stunting)", S["h2"]))
wfh_rows = [
["Index", "What It Measures", "Abnormal Finding"],
["Weight-for-age", "Overall growth; used 0–10 yrs", "Underweight: < -2 SD (WHO z-score)"],
["Height/Length-for-age", "Chronic growth failure (stunting)", "Stunted: < -2 SD below median"],
["Weight-for-height", "Acute malnutrition (wasting)", "Wasted: < -2 SD; Severe wasting: < -3 SD"],
["BMI-for-age", "Adiposity 2–19 yrs", "See BMI percentile table above"],
]
story.append(std_table(
wfh_rows[0], wfh_rows[1:],
col_widths=[5*cm, 6*cm, 6*cm],
header_color=colors.HexColor("#6a3d9a"),
))
story.append(sp(6))
story.append(info_box([
Paragraph(
"<b>Failure to Thrive (FTT):</b> Weight consistently below the 3rd–5th percentile OR "
"crossing 2 major percentile lines downward. May be organic (e.g., cardiac, renal, GI disease) "
"or non-organic (psychosocial, neglect, feeding difficulties). Always warrants a full evaluation.",
S["body"])
], bg=C_YELLOW, border=C_ACCENT))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Textbook of Family Medicine 9e, p. 1106 | WHO Child Growth Standards | CDC Growth Charts</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 5 – DEVELOPMENTAL DOMAINS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("5. Developmental Domains", C_DARK_BLUE))
story.append(sp(10))
story.append(Paragraph(
"Development is assessed across five core domains. Delays can occur in one or any combination.",
S["body"]))
story.append(sp(6))
domain_rows = [
["Domain", "Description", "Example Skills"],
["Gross Motor", "Large muscle movements", "Rolling, crawling, standing, walking, running, jumping"],
["Fine Motor", "Hand and finger control", "Grasping, pincer grip, drawing, cutting with scissors"],
["Language", "Receptive (understanding) and expressive (speaking)", "Babbling, words, sentences, following commands"],
["Personal-Social", "Interpersonal interaction and self-care", "Smiling, stranger anxiety, parallel play, dressing"],
["Cognitive", "Problem-solving, memory, learning", "Object permanence, symbolic play, counting, reading"],
]
story.append(std_table(
domain_rows[0], domain_rows[1:],
col_widths=[3.5*cm, 5*cm, 8.5*cm],
))
story.append(sp(8))
story.append(info_box([
Paragraph("<b>Key clinical rule:</b> A child with <b>intellectual disability</b> typically shows delays in multiple domains (gross motor relatively preserved). A child with <b>cerebral palsy</b> may have near-normal cognition but significant motor delay.", S["body"])
], bg=C_LIGHT_BLUE, border=C_MID_BLUE))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Textbook of Family Medicine 9e</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 6 – MILESTONES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("6. Developmental Milestones by Age", C_MID_BLUE))
story.append(sp(10))
story.append(Paragraph("First Year of Life (0–12 Months)", S["h2"]))
m0_rows = [
["Age", "Gross Motor", "Fine Motor / Reflex", "Language", "Social / Cognitive"],
["Birth", "Flexed posture; head sags", "Moro, stepping, placing, grasp reflexes", "Alerts to voice", "Fixates on face / light"],
["1 month", "Lifts chin briefly prone; head lag", "Tonic neck reflex present", "Range of cries", "Begins to smile; watches faces"],
["2 months", "Head in plane with body", "Stepping reflex fades", "Cooing begins", "Social smile well established"],
["4 months", "Head erect; rolls partially; bears weight on arms", "Grasps objects; brings to mouth", "Vowel sounds ('ah', 'oh')", "Laughs aloud; tracks 180°"],
["6 months", "Sits with rounded back; rolls over; pivots", "Moro reflex fades; raking grasp", "Babbles vowel sounds", "Recognises familiar faces; first stranger awareness"],
["9 months", "Sits erect; crawls; pulls to stand; walks holding both hands", "Transfers objects hand-to-hand; inferior pincer", "Polysyllabic babble ('bababa')", "Stranger anxiety; imitates actions; object permanence emerging"],
["12 months", "Stands alone; takes first steps", "Pincer grasp (thumb + forefinger); pokes with finger", "'Mama/dada' with meaning; 1–2 true words", "Plays peek-a-boo; waves bye-bye"],
]
story.append(std_table(
m0_rows[0], m0_rows[1:],
col_widths=[2.2*cm, 3.7*cm, 4*cm, 3.3*cm, 3.8*cm],
))
story.append(sp(10))
story.append(Paragraph("Toddler Years (1–3 Years)", S["h2"]))
m1_rows = [
["Age", "Gross Motor", "Fine Motor", "Language", "Social / Cognitive"],
["15 months", "Walks alone; crawls up stairs", "Builds 2-block tower; scribbles", "4–6 words; points to wants", "Follows simple commands"],
["18 months", "Runs stiffly; walks with railing support", "Tower of 4 cubes; copies line", "Points to body parts; ~10 words", "Parallel play; hugs parent; temper tantrums begin"],
["24 months", "Runs well; jumps in place; kicks ball; walks stairs one at a time", "Tower of 7 blocks; imitates circular stroke", "2-word phrases; 50+ words; uses 'I', 'me'", "Symbolic play begins; increasing independence"],
["36 months", "Rides tricycle; alternates feet on stairs", "Copies circle; uses scissors", "3-word sentences; ~900-word vocabulary; asks 'why?'", "Associative play; gender awareness; Erikson: Autonomy vs. Shame"],
]
story.append(std_table(
m1_rows[0], m1_rows[1:],
col_widths=[2.2*cm, 3.7*cm, 4*cm, 3.3*cm, 3.8*cm],
))
story.append(sp(10))
story.append(Paragraph("Preschool Age (3–5 Years)", S["h2"]))
m2_rows = [
["Age", "Gross Motor", "Fine Motor", "Language", "Social / Cognitive"],
["4 years", "Hops on one foot; catches ball; skips clumsily", "Copies cross (+); draws person with 4 parts", "~1,500 words; tells stories; asks many questions", "Cooperative play; imaginative play; Erikson: Initiative vs. Guilt"],
["5 years", "Skips well; balance ≥10 sec on one foot", "Copies square; draws person with 6+ parts", "~2,000 words; complete sentences; counts to 10", "Ready for school; understands rules; sense of right/wrong"],
]
story.append(std_table(
m2_rows[0], m2_rows[1:],
col_widths=[2.2*cm, 3.7*cm, 4*cm, 3.3*cm, 3.8*cm],
))
story.append(sp(10))
story.append(Paragraph("School Age (6–12 Years)", S["h2"]))
school_items = [
"<b>Concrete operational thinking</b> (Piaget) from ~age 7: conservation, reversibility, classification",
"Reading and writing consolidate; sustained attention span develops",
"Erikson's <b>Industry vs. Inferiority</b> stage: child seeks competence and mastery",
"Peer relationships become the primary social context outside the family",
"Steady growth rate: ~<b>6 cm/year</b> until the pubertal growth spurt",
"Moral reasoning develops (Kohlberg's Conventional stage begins)",
]
for item in school_items:
story.append(bullet(item))
story.append(sp(10))
story.append(Paragraph("Adolescence (12–18 Years)", S["h2"]))
adol_items = [
"<b>Formal operational thinking</b> (Piaget): abstract reasoning, hypothetical/deductive thought",
"Erikson's <b>Identity vs. Role Confusion</b>: development of self-concept",
"Pubertal growth spurt; secondary sexual characteristics (Tanner stages I–V)",
"Risk-taking behaviour increases — prefrontal cortex still maturing until ~age 25",
"Peer group replaces family as primary social reference",
"Abstract moral reasoning (Kohlberg's Post-conventional stage may emerge)",
]
for item in adol_items:
story.append(bullet(item))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Textbook of Family Medicine 9e, p. 567 | Kaplan & Sadock's Comprehensive Textbook of Psychiatry</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 7 – THEORIES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("7. Key Developmental Theories", C_GREEN))
story.append(sp(10))
theory_rows = [
["Theorist", "Theory", "Core Concept / Stages"],
["Jean Piaget", "Cognitive Development",
"4 stages: Sensorimotor (0–2 yrs) → Preoperational (2–7) → Concrete Operational (7–11) → Formal Operational (12+)"],
["Erik Erikson", "Psychosocial Development",
"8 life stages each with a developmental conflict:\n"
"Trust vs. Mistrust (infancy) → Autonomy vs. Shame (toddler) → "
"Initiative vs. Guilt (preschool) → Industry vs. Inferiority (school) → "
"Identity vs. Role Confusion (adolescence)"],
["Sigmund Freud", "Psychosexual Development",
"Oral → Anal → Phallic (Oedipal conflict) → Latency → Genital stages"],
["Lev Vygotsky", "Sociocultural Theory",
"Social interaction and language drive cognitive development; Zone of Proximal Development (ZPD) — what a child can do with guidance"],
["John Bowlby / Mary Ainsworth", "Attachment Theory",
"Secure attachment to caregiver is foundational for emotional and social development. Attachment types: Secure, Anxious-Avoidant, Anxious-Ambivalent, Disorganised"],
["Lawrence Kohlberg", "Moral Development",
"Pre-conventional → Conventional → Post-conventional moral reasoning stages"],
["John Watson / B.F. Skinner", "Behaviourism",
"Development driven by conditioning and reinforcement. Environment shapes all behaviour"],
]
story.append(std_table(
theory_rows[0], theory_rows[1:],
col_widths=[4*cm, 4*cm, 9*cm],
header_color=C_GREEN,
))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Kaplan & Sadock's Comprehensive Textbook of Psychiatry</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 8 – RED FLAGS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("8. Red Flags for Developmental Delay", colors.HexColor("#c0392b")))
story.append(sp(10))
story.append(info_box([
Paragraph(
"<b>Any loss of previously acquired language or social skills at any age is always abnormal "
"and requires immediate evaluation.</b> This is distinct from normal transient regression during stress.",
S["body"])
], bg=C_RED_LIGHT, border=colors.HexColor("#c0392b")))
story.append(sp(8))
rf_rows = [
["Age", "Red Flag (warrants evaluation)"],
["3 months", "No social smile; no response to voices; no visual tracking"],
["6 months", "No vocalisation / cooing; no reaching for objects"],
["9 months", "No babbling; no pointing or waving gestures; not sitting with support"],
["12 months", "No babbling; no single words; no pointing, waving, or imitative gestures"],
["16 months", "No single words"],
["18 months", "Not walking independently; no functional use of 10 words"],
["24 months", "No two-word spontaneous phrases (not just imitation)"],
["Any age", "Loss of any previously acquired language, social skill, or motor skill"],
["Any age", "Persistent toe-walking beyond age 2; no imaginative play by age 3"],
]
story.append(std_table(
rf_rows[0], rf_rows[1:],
col_widths=[3.5*cm, 13.5*cm],
header_color=colors.HexColor("#c0392b"),
alt_bg=C_RED_LIGHT,
))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Textbook of Family Medicine 9e | Bradley & Daroff's Neurology in Clinical Practice</i>",
S["source"]))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 9 – ASSESSMENT TOOLS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("9. Developmental Assessment Tools", C_DARK_BLUE))
story.append(sp(10))
tool_rows = [
["Tool", "Age Range", "Domains Screened", "Notes"],
["Denver Developmental Screening Test (DDST / Denver II)", "0–6 years",
"Gross motor, fine motor, language, personal-social", "Widely used; requires trained administrator; 20–25 min"],
["Ages and Stages Questionnaire (ASQ-3)", "1–66 months",
"Communication, gross motor, fine motor, problem-solving, personal-social", "Parent-completed; validated; 10–15 min"],
["M-CHAT-R/F (Modified Checklist for Autism in Toddlers)", "16–30 months",
"Autism-specific: social communication, behaviour", "Recommended at 18 and 24 month well-visits by AAP"],
["Bayley Scales of Infant and Toddler Development (Bayley-4)", "1–42 months",
"Cognitive, language, motor, social-emotional, adaptive", "Gold standard; requires psychologist; ~60–90 min"],
["Peabody Developmental Motor Scales (PDMS-2)", "Birth – 5 years",
"Gross and fine motor only", "Useful for therapy planning"],
["Vineland Adaptive Behavior Scales", "Birth – adult",
"Adaptive behaviour (communication, daily living, socialisation, motor)", "Useful for intellectual disability evaluation"],
]
story.append(std_table(
tool_rows[0], tool_rows[1:],
col_widths=[5*cm, 2.5*cm, 4.5*cm, 5*cm],
))
story.append(sp(8))
story.append(info_box([
Paragraph(
"<b>Premature infants:</b> Use <b>corrected gestational age</b> (chronological age minus "
"the number of weeks premature) for all developmental assessments until 24 months "
"chronological age.",
S["body"])
], bg=C_LIGHT_BLUE, border=C_MID_BLUE))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════
# SECTION 10 – FACTORS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_header("10. Factors Influencing Development", C_MID_BLUE))
story.append(sp(10))
factor_rows = [
["Factor", "Impact on Development"],
["Genetics", "Determines baseline potential and pace of maturation; provides the 'canvas'"],
["Nutrition", "Adequate protein, iron, iodine, and zinc critical for brain and body growth; deficiency causes stunting, wasting, and cognitive impairment"],
["Parental mental health", "Maternal depression directly impairs language and emotional development in infants"],
["Family stability / attachment", "Secure attachment is the single greatest predictor of positive socio-emotional outcomes"],
["Socioeconomic status", "Poverty, food insecurity, and overcrowding are independent risk factors for delay"],
["Adverse childhood experiences (ACEs)", "Abuse, neglect, domestic violence alter brain architecture; dose-dependent effect on developmental outcomes"],
["Stimulation and play", "Essential for cognitive, motor, and language development; reading aloud from infancy is the most effective language stimulator"],
["Prenatal exposures", "Alcohol (FASD), drugs, TORCH infections, lead poisoning, and smoking all impair neurodevelopment"],
["Prematurity", "Premature infants are at risk for cerebral palsy, learning disabilities, ADHD, and visual/hearing impairments"],
["Chronic illness", "Cardiac, renal, GI, and oncological disease impair growth and can cause developmental regression during acute illness"],
]
story.append(std_table(
factor_rows[0], factor_rows[1:],
col_widths=[5*cm, 12*cm],
))
story.append(sp(6))
story.append(Paragraph(
"<i>Source: Kaplan & Sadock's Comprehensive Textbook of Psychiatry | Textbook of Family Medicine 9e</i>",
S["source"]))
# ── final spacer + generated-by note ────────────────────────────────────────
story.append(sp(20))
story.append(divider())
story.append(Paragraph(
f"This document was generated by Orris Medical AI on {datetime.date.today().strftime('%B %d, %Y')}. "
"Content sourced from peer-reviewed medical textbooks. For clinical decisions always consult "
"current guidelines and a qualified healthcare professional.",
S["note"]))
# ═══════════════════════════════════════════════════════════════════════════
# PAGE NUMBERS
# ═══════════════════════════════════════════════════════════════════════════
def add_page_number(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 9)
canvas.setFillColor(colors.HexColor("#888888"))
page_num = canvas.getPageNumber()
canvas.drawRightString(A4[0] - 2*cm, 1.5*cm, f"Page {page_num}")
canvas.drawString(2*cm, 1.5*cm, "Growth & Development of Children | Orris Medical AI")
canvas.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print("PDF generated successfully:", OUTPUT)
cd /home/daytona/workspace/child-development && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/child-development/Growth_and_Development_of_Child…
Growth and Development of Children
PDF Document · PDF