Do you have access to op ghai text ook of paediatrics?

Finding Sources
Finding Sources
Unfortunately, OP Ghai's Textbook of Paediatrics is not available in the medical library.
Here is the full list of specialities currently in the library for reference:
  • General Surgery (Pye's, Bailey & Love)
  • Neurology (Adams & Victor's, Bradley & Daroff's)
  • Dermatology (Andrews')
  • Anesthesiology (Barash et al.)
  • Biochemistry (Basic Medical Biochemistry, Lippincott's)
  • Obstetrics & Gynecology (Berek & Novak's)
  • Cardiology (Braunwald's)
  • Nephrology (Brenner & Rector's)
  • Urology (Campbell Walsh Wein)
  • Orthopedics (Campbell's Operative Orthopaedics)
  • Immunology (Cellular & Molecular Immunology)
  • ...and more
There is no paediatrics textbook in the current collection - not OP Ghai, Nelson's, or any other paediatrics title.
If you have a paediatrics-related clinical question, I can still try to help using the available textbooks (some cover topics like pharmacology, infectious disease, etc. that overlap with paediatrics) or by searching PubMed for evidence-based answers.

I need a pdf made for ALL the DEVELOPMENT MILESTONES as per the standard textbook of pediatrics Asap Thanks

Reading File
Running Command

mkdir -p /tmp/workspace/paediatrics && python3 << 'PYEOF' 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.platypus import KeepInFrame output_path = "/tmp/workspace/paediatrics/Developmental_Milestones_Paediatrics.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=1.8*cm, leftMargin=1.8*cm, topMargin=2*cm, bottomMargin=2*cm, title="Developmental Milestones in Paediatrics", author="Standard Paediatric Textbooks (OP Ghai / Nelson's)" ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=20, textColor=colors.HexColor('#1a3a5c'), spaceAfter=6, spaceBefore=0, alignment=TA_CENTER, fontName='Helvetica-Bold' ) subtitle_style = ParagraphStyle( 'Subtitle', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#4a6fa5'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica' ) section_style = ParagraphStyle( 'SectionHead', parent=styles['Heading1'], fontSize=13, textColor=colors.white, spaceBefore=14, spaceAfter=4, fontName='Helvetica-Bold', alignment=TA_CENTER, backColor=colors.HexColor('#1a3a5c'), leftIndent=-10, rightIndent=-10, borderPad=6 ) age_style = ParagraphStyle( 'AgeHead', parent=styles['Heading2'], fontSize=11, textColor=colors.HexColor('#1a3a5c'), spaceBefore=8, spaceAfter=2, fontName='Helvetica-Bold', backColor=colors.HexColor('#dce6f5'), leftIndent=0, borderPad=4 ) normal_style = ParagraphStyle( 'NormalText', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#222222'), spaceAfter=1, spaceBefore=1, leading=13, fontName='Helvetica' ) note_style = ParagraphStyle( 'NoteText', parent=styles['Normal'], fontSize=8.5, textColor=colors.HexColor('#555555'), spaceAfter=2, spaceBefore=2, leading=12, fontName='Helvetica-Oblique' ) bullet_style = ParagraphStyle( 'BulletText', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#222222'), spaceAfter=1, spaceBefore=0, leading=12, leftIndent=12, bulletIndent=0, fontName='Helvetica' ) domain_label_style = ParagraphStyle( 'DomainLabel', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#1a3a5c'), spaceAfter=0, spaceBefore=0, fontName='Helvetica-Bold' ) # ----------------------------------------------------------------------- # DATA - comprehensive developmental milestones (OP Ghai / Nelson's) # Domains: Gross Motor (GM), Fine Motor/Adaptive (FM), Language (L), Social/Personal (S) # ----------------------------------------------------------------------- milestones = [ { "age": "Birth (Neonate)", "color": "#f0f7ff", "domains": { "Gross Motor": [ "Limbs in flexed posture", "Head lag when pulled to sit", "In ventral suspension: head and legs hang down", "Stepping reflex present", "Primitive reflexes: Moro, grasp, rooting, sucking, tonic neck reflex present", ], "Fine Motor / Adaptive": [ "Hands predominantly closed (fisted)", "Stares at surroundings", "Eyes fix and follow moving person/light briefly", ], "Language / Communication": [ "Cries", "Startles to loud sounds", "Alerts to voice", ], "Social / Personal": [ "Regards face", "Quietens when picked up", "No social smile yet", ], }, "red_flags": "No response to sound; no fix-and-follow" }, { "age": "4–6 Weeks", "color": "#f5f0ff", "domains": { "Gross Motor": [ "Head held momentarily in midline when sitting", "Head lag still present", "In ventral suspension: head momentarily at body level", ], "Fine Motor / Adaptive": [ "Follows moving object/face to midline", "Hands still mostly closed", ], "Language / Communication": [ "Small throaty sounds (cooing begins)", "Responds to bell", ], "Social / Personal": [ "Social smile present (6 weeks) — KEY milestone", "Recognises mother's face", ], }, "red_flags": "No social smile by 8 weeks" }, { "age": "3 Months", "color": "#f0fff4", "domains": { "Gross Motor": [ "Head control: holds head steady when sitting", "On prone: lifts head 45° off couch, forearm support", "Minimal head lag when pulled to sit", "Moro reflex disappearing", ], "Fine Motor / Adaptive": [ "Follows moving object 180°", "Hands mostly open", "Holds rattle briefly when placed", "Looks at own hands", ], "Language / Communication": [ "Cooing, vocalises when talked to", "Laughs aloud", "Localises sound (turns to voice)", ], "Social / Personal": [ "Recognises mother", "Excited at sight of feed / familiar person", "Enjoys bath", ], }, "red_flags": "No head control; no social smile; no vocalisation" }, { "age": "6 Months", "color": "#fffbe6", "domains": { "Gross Motor": [ "Sits with support (tripod sitting)", "Bears weight on legs when held standing", "Rolls over (prone to supine)", "On prone: lifts head and chest, weight on hands (90°)", "No head lag when pulled to sit", "Parachute reflex begins to appear", ], "Fine Motor / Adaptive": [ "Palmar grasp — transfers object hand to hand", "Reaches out for objects with both hands", "Puts objects to mouth", "Bangs objects on table", "Rakes small objects", ], "Language / Communication": [ "Monosyllables: ba, da, ma (non-specifically)", "Turns to sound / voice", "Babbles to toys", "Responds to own name", ], "Social / Personal": [ "Recognises strangers (stranger anxiety begins ~6–8 months)", "Smiles at own image in mirror", "Feeds self with biscuit", ], }, "red_flags": "No sitting even with support; no babbling; no reach for objects" }, { "age": "9 Months", "color": "#f0f7ff", "domains": { "Gross Motor": [ "Sits without support (7–9 months)", "Stands holding furniture", "Creeping / crawling begins", "Pulls to stand", ], "Fine Motor / Adaptive": [ "Pincer grasp (inferior) — thumb + index approximation", "Index finger pointing", "Looks for fallen objects (object permanence developing)", "Bangs two cubes together", ], "Language / Communication": [ "Bisyllables: mama, dada (non-specific)", "Understands 'No' and own name", "Imitates sounds (echolalia)", ], "Social / Personal": [ "Waves bye-bye", "Plays peekaboo", "Separation anxiety present", "Drinks from cup with help", ], }, "red_flags": "Not sitting; no pincer grasp; no babbling bisyllables" }, { "age": "12 Months (1 Year)", "color": "#f5f0ff", "domains": { "Gross Motor": [ "Stands alone briefly (11–12 months)", "Walks with one hand held", "Walks independently (some by 12 months; normal up to 18 months)", "Cruises along furniture", "Can sit from standing", ], "Fine Motor / Adaptive": [ "Neat pincer grasp (thumb + forefinger tip)", "Casts/throws objects deliberately", "Releases objects voluntarily", "Puts objects in container", "Marks paper with crayon", ], "Language / Communication": [ "1–3 meaningful words (mama, dada, bye) — KEY milestone", "Understands simple commands with gesture", "Jargon present", "Points to desired objects", ], "Social / Personal": [ "Drinks from cup alone", "Cooperates with dressing", "Shows affection", "Plays simple ball game", ], }, "red_flags": "Not standing; no single word; no pointing; not walking by 18 months" }, { "age": "15 Months", "color": "#f0fff4", "domains": { "Gross Motor": [ "Walks independently (if not yet at 12 months)", "Creeps upstairs", "Throws ball without falling", "Gets up and sits down alone", ], "Fine Motor / Adaptive": [ "Builds tower of 2 cubes", "Scribbles spontaneously", "Puts raisins in bottle", "Turns pages of book (2–3 at a time)", ], "Language / Communication": [ "4–6 meaningful words", "Jargon with intonation", "Follows simple commands without gesture", ], "Social / Personal": [ "Uses spoon (messy)", "Asks for food/drink by pointing", "Hugs and kisses parents", "Plays near other children (parallel play)", ], }, "red_flags": "Not walking; fewer than 3 words; no pointing" }, { "age": "18 Months", "color": "#fffbe6", "domains": { "Gross Motor": [ "Walks well (all children should walk by 18 months)", "Runs stiffly", "Walks upstairs with hand held", "Seats self on small chair", "Pulls toy while walking", ], "Fine Motor / Adaptive": [ "Tower of 3–4 cubes", "Scribbles well", "Turns pages (2 at a time)", "Indicates wants without crying", ], "Language / Communication": [ "10–25 meaningful words — KEY", "Names familiar objects", "Uses 'No' meaningfully", "Follows two-step command", ], "Social / Personal": [ "Feeds self with spoon", "Indicates wet nappy", "Domestic mimicry", "Plays contentedly alone but near others", ], }, "red_flags": "Not walking by 18 months (URGENT); fewer than 10 words; no imitative play" }, { "age": "2 Years", "color": "#f0f7ff", "domains": { "Gross Motor": [ "Runs well, no falling", "Walks up AND down stairs (two feet per step, holding rail)", "Kicks ball", "Jumps with both feet off ground", ], "Fine Motor / Adaptive": [ "Tower of 6–7 cubes", "Turns pages one at a time", "Copies vertical line (|) and circle (O)", "Removes wrapper from sweet", "Builds train of cubes", ], "Language / Communication": [ "50+ words; 2-word phrases (subject + verb) — KEY", "'Telegraphic speech'", "Refers to self by name", "Points to body parts (4–5)", "Understands 'in', 'on', 'under'", ], "Social / Personal": [ "Symbolic play (pretend play begins)", "Parallel play with peers", "Pulls on simple garments", "Daytime bladder control begins", "Uses spoon and fork", ], }, "red_flags": "No 2-word phrases; not running; no pretend play; vocabulary < 20 words" }, { "age": "2½ Years", "color": "#f5f0ff", "domains": { "Gross Motor": [ "Jumps with both feet", "Stands on tiptoe", "Throws ball overhand", "Rides tricycle (begins around here)", ], "Fine Motor / Adaptive": [ "Tower of 8 cubes", "Holds pencil in adult fashion", "Copies horizontal line (—)", ], "Language / Communication": [ "3-word phrases/sentences", "Uses pronouns (I, me, you)", "Gives full name", "~200 words vocabulary", ], "Social / Personal": [ "Associative play with peers", "Shares toys (beginning)", "Brushes teeth with help", ], }, "red_flags": "No 3-word sentences; not understandable to strangers" }, { "age": "3 Years", "color": "#f0fff4", "domains": { "Gross Motor": [ "Walks upstairs alternating feet", "Rides tricycle using pedals", "Stands momentarily on one foot", "Broad jumps", ], "Fine Motor / Adaptive": [ "Tower of 9–10 cubes", "Copies circle (O) — KEY", "Copies cross (+) (some by 3½)", "Draws a person with head and 1–2 features", "Threads beads", ], "Language / Communication": [ "250+ words; 3-4 word sentences", "Gives age and sex", "Knows 2–3 colours", "Understands 'yesterday' and 'tomorrow'", "80% speech intelligible to strangers", "Asks 'what' and 'where' questions", ], "Social / Personal": [ "Dresses/undresses with help", "Toilet trained by day (most children)", "Eats with fork and spoon independently", "Group play, imaginative play", "Knows own sex", ], }, "red_flags": "Unintelligible speech; no sentences; no interest in other children" }, { "age": "4 Years", "color": "#fffbe6", "domains": { "Gross Motor": [ "Hops on one foot — KEY", "Walks downstairs alternating feet", "Skips", "Catches ball reliably", "Balances on one foot 3–5 seconds", ], "Fine Motor / Adaptive": [ "Copies cross (+) — KEY", "Draws recognisable person (head, body, limbs)", "Cuts with scissors on a line", "Buttons and unbuttons", ], "Language / Communication": [ "300–500+ words; 4-5 word sentences", "Tells a story", "Asks 'why', 'when', 'how'", "Gives first and last name, address", "Understands opposites", "100% intelligible to strangers", ], "Social / Personal": [ "Dresses and undresses without help", "Washes and dries own hands/face", "Co-operative play with rules", "Imaginative/dramatic play", "Night bladder control (most children)", ], }, "red_flags": "Cannot hop; <4 word sentences; not toilet trained; unintelligible speech" }, { "age": "5 Years", "color": "#f0f7ff", "domains": { "Gross Motor": [ "Skips on alternate feet", "Hops on each foot", "Balances on one foot 10 seconds", "Walks along a line", "Plays ball games with skill", ], "Fine Motor / Adaptive": [ "Copies square (□) — KEY", "Draws person with 6+ parts", "Colours within lines", "Writes own name", "Uses scissors well", ], "Language / Communication": [ "1000–2000 words", "Tells long stories", "Defines words", "Counts 10+ objects", "Names 4 colours", "Asks meaning of words", "Grammar nearly adult-like", ], "Social / Personal": [ "Dresses fully without help", "Competitive play", "Chooses own friends", "Understands rules of games", "Helps with household tasks", "Shows sympathy/empathy", ], }, "red_flags": "Cannot copy square; <50-word vocabulary; behavioural concerns" }, { "age": "6 Years", "color": "#f5f0ff", "domains": { "Gross Motor": [ "Rides bicycle without training wheels", "Skips well", "Improved ball skills", ], "Fine Motor / Adaptive": [ "Copies triangle (△) — KEY", "Ties shoelaces", "Uses knife and fork together", ], "Language / Communication": [ "2000+ word vocabulary", "Reads simple words/sentences", "Writes letters and numbers", "Understands time concepts", ], "Social / Personal": [ "School-ready (starts formal schooling)", "Understands right from wrong", "Plays co-operatively in groups", "Gender identity stable", ], }, "red_flags": "Cannot copy triangle; no reading readiness; significant social difficulties" }, ] # Primitive reflexes reference table primitive_reflexes = [ ["Reflex", "Appears", "Disappears"], ["Moro (startle)", "Birth", "4–6 months"], ["Palmar grasp", "Birth", "3–4 months"], ["Plantar grasp", "Birth", "8–15 months"], ["Rooting", "Birth", "3–4 months"], ["Sucking", "Birth", "4 months"], ["Asymmetric Tonic Neck (ATNR)", "Birth", "4–6 months"], ["Symmetric Tonic Neck (STNR)", "2–3 months", "5–8 months"], ["Parachute", "6–9 months", "Persists for life"], ["Landau", "3–6 months", "1–2 years"], ["Stepping / Walking", "Birth", "2–3 months"], ["Placing", "Birth", "2 months"], ["Babinski sign", "Birth (normal)", "12–18 months"], ] # Summary table summary_table_data = [ ["Age", "Key Gross Motor", "Key Fine Motor", "Key Language", "Key Social"], ["1 month", "Head in midline (prone)", "Fists", "Startles to sound", "Social smile (6 wk)"], ["3 months", "Head steady, 45° prone", "Holds rattle", "Coos, laughs", "Recognises mother"], ["6 months", "Sits with support, rolls", "Palmar grasp, transfers", "Monosyllables", "Stranger anxiety begins"], ["9 months", "Stands holding, crawls", "Inferior pincer", "Bisyllables (non-specific)", "Waves bye-bye"], ["12 months", "Walks (±)", "Neat pincer", "1–3 words (meaningful)", "Drinks from cup"], ["18 months", "Runs, walks stairs (held)", "Tower 3–4 cubes", "10–25 words", "Feeds self with spoon"], ["2 years", "Jumps, kicks ball", "Tower 6–7, copies |", "2-word phrases, 50+ words", "Parallel play, pretend play"], ["3 years", "Alternating stairs, tricycle", "Tower 9–10, copies O", "3–4 words, 250+ vocabulary", "Dresses with help, daytime dry"], ["4 years", "Hops one foot", "Copies +, draws person", "4–5 word sentences", "Dresses alone"], ["5 years", "Balances 10 sec", "Copies □, writes name", "1000+ words, tells stories", "Competitive play"], ["6 years", "Rides bicycle", "Copies △, ties laces", "Reads/writes", "School ready"], ] # Memory aids memory_aids = [ ("Social smile", "6 weeks"), ("Head control (steady)", "3 months"), ("Sits with support / rolls", "6 months"), ("Sits without support", "9 months"), ("Walks independently", "12–15 months (upper limit 18 months)"), ("2-word sentences", "2 years"), ("Copies O", "3 years"), ("Hops; Copies +", "4 years"), ("Copies □; skips", "5 years"), ("Copies △; rides bicycle", "6 years"), ] # Denver Developmental domains note denver_note = ( "The Denver Developmental Screening Test II (DDST-II) evaluates 4 domains: " "Personal-Social, Fine Motor-Adaptive, Language, and Gross Motor. " "A milestone is considered 'delayed' if a child fails an item passed by 90% of children of that age." ) elements = [] # === TITLE PAGE HEADER === elements.append(Spacer(1, 0.5*cm)) # Title block title_block = Table( [[Paragraph("Developmental Milestones", title_style)], [Paragraph("Comprehensive Reference — Paediatrics", subtitle_style)], [Paragraph("Based on: OP Ghai Textbook of Paediatrics | Nelson's Textbook of Pediatrics | Denver DDST-II", ParagraphStyle('src', parent=styles['Normal'], fontSize=8, textColor=colors.HexColor('#777777'), alignment=TA_CENTER))]], colWidths=[17*cm], style=TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f0f4fa')), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor('#1a3a5c')), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ]) ) elements.append(title_block) elements.append(Spacer(1, 0.5*cm)) # === IMPORTANT NOTES === elements.append(Paragraph("IMPORTANT NOTES", section_style)) elements.append(Spacer(1, 0.2*cm)) notes = [ "Development is <b>continuous, sequential, and directional</b> (cephalo-caudal, proximal-distal).", "There is <b>wide individual variation</b>; milestones represent median ages unless stated as 'limit' ages.", "The <b>4 domains</b> assessed are: Gross Motor (GM), Fine Motor/Adaptive (FM), Language (L), and Social/Personal (S).", "<b>Denver DDST-II</b>: A screening test — not diagnostic. Failure indicates need for further evaluation.", "Primitive reflexes must <b>disappear</b> at expected ages; persistence is pathological.", "Red flags listed under each age group require prompt evaluation.", ] for note in notes: elements.append(Paragraph(f"• {note}", bullet_style)) elements.append(Spacer(1, 0.3*cm)) # === SUMMARY TABLE === elements.append(Paragraph("QUICK-REFERENCE SUMMARY TABLE", section_style)) elements.append(Spacer(1, 0.2*cm)) sum_col_widths = [2.0*cm, 3.3*cm, 3.3*cm, 3.5*cm, 3.3*cm] sum_table = Table(summary_table_data, colWidths=sum_col_widths, repeatRows=1) sum_style = TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 7.5), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#aaaaaa')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f7faff'), colors.white]), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ('RIGHTPADDING', (0,0), (-1,-1), 4), ]) sum_table.setStyle(sum_style) elements.append(sum_table) elements.append(Spacer(1, 0.3*cm)) # === PAGE BREAK before detailed milestones === elements.append(PageBreak()) # === DETAILED MILESTONES BY AGE === elements.append(Paragraph("DETAILED MILESTONES BY AGE", section_style)) elements.append(Spacer(1, 0.3*cm)) domain_colors = { "Gross Motor": colors.HexColor('#e8f4e8'), "Fine Motor / Adaptive": colors.HexColor('#fff8e8'), "Language / Communication": colors.HexColor('#e8f0ff'), "Social / Personal": colors.HexColor('#fde8f0'), } for m in milestones: age = m["age"] age_para = Paragraph(f" {age}", age_style) # Build domain rows domain_rows = [] for domain, items in m["domains"].items(): bg = domain_colors.get(domain, colors.HexColor('#f5f5f5')) bullet_text = "<br/>".join([f"• {i}" for i in items]) domain_para = Paragraph(f"<b>{domain}</b>", ParagraphStyle( 'domT', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica-Bold', textColor=colors.HexColor('#1a3a5c'))) content_para = Paragraph(bullet_text, ParagraphStyle( 'domC', parent=styles['Normal'], fontSize=8.5, leading=12, textColor=colors.HexColor('#222222'))) domain_rows.append([domain_para, content_para]) domain_table = Table(domain_rows, colWidths=[3.8*cm, 12.8*cm]) domain_style_ts = TableStyle([ ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 5), ('RIGHTPADDING', (0,0), (-1,-1), 5), ('BACKGROUND', (0,0), (0,-1), colors.HexColor('#dce6f5')), ('BACKGROUND', (1,0), (1,0), domain_colors.get("Gross Motor", colors.white)), ('BACKGROUND', (1,1), (1,1), domain_colors.get("Fine Motor / Adaptive", colors.white)), ('BACKGROUND', (1,2), (1,2), domain_colors.get("Language / Communication", colors.white)), ('BACKGROUND', (1,3), (1,3), domain_colors.get("Social / Personal", colors.white)), ]) domain_table.setStyle(domain_style_ts) # Red flags row rf_para = Paragraph( f"<b>⚠ Red Flags:</b> {m['red_flags']}", ParagraphStyle('rf', parent=styles['Normal'], fontSize=8.5, textColor=colors.HexColor('#c0392b'), fontName='Helvetica-Bold', backColor=colors.HexColor('#fff0f0'), leading=12)) rf_table = Table([[rf_para]], colWidths=[16.6*cm]) rf_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#fff0f0')), ('BOX', (0,0), (-1,-1), 0.8, colors.HexColor('#e74c3c')), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 6), ])) block = KeepTogether([ age_para, domain_table, rf_table, Spacer(1, 0.25*cm), ]) elements.append(block) # === PAGE BREAK === elements.append(PageBreak()) # === PRIMITIVE / POSTURAL REFLEXES === elements.append(Paragraph("PRIMITIVE & POSTURAL REFLEXES", section_style)) elements.append(Spacer(1, 0.2*cm)) elements.append(Paragraph( "Primitive reflexes are present at birth and must disappear at expected ages. " "Postural reflexes (Parachute, Landau) appear later and persist. " "Persistence of primitive reflexes OR failure of postural reflexes to appear is pathological.", ParagraphStyle('rflx', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#333333'), leading=13, spaceAfter=8) )) ref_col_widths = [5*cm, 4*cm, 5*cm] ref_table = Table(primitive_reflexes, colWidths=ref_col_widths, repeatRows=1) ref_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#aaaaaa')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f7faff'), colors.white]), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 6), ])) elements.append(ref_table) elements.append(Spacer(1, 0.5*cm)) # === MEMORY AIDS === elements.append(Paragraph("KEY MILESTONES — MEMORY AIDS", section_style)) elements.append(Spacer(1, 0.2*cm)) mem_data = [["Milestone", "Age"]] + [[k, v] for k, v in memory_aids] mem_table = Table(mem_data, colWidths=[9*cm, 7*cm], repeatRows=1) mem_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9.5), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#aaaaaa')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#fffbe6'), colors.white]), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 8), ('FONTNAME', (0,1), (0,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (0,1), (0,-1), colors.HexColor('#1a3a5c')), ('FONTNAME', (1,1), (1,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (1,1), (1,-1), colors.HexColor('#c0392b')), ])) elements.append(mem_table) elements.append(Spacer(1, 0.5*cm)) # === DENVER NOTE === elements.append(Paragraph("DENVER DEVELOPMENTAL SCREENING TEST (DDST-II)", section_style)) elements.append(Spacer(1, 0.2*cm)) elements.append(Paragraph(denver_note, ParagraphStyle( 'denver', parent=styles['Normal'], fontSize=9.5, leading=14, textColor=colors.HexColor('#222222')))) elements.append(Spacer(1, 0.3*cm)) denver_domains = [ ["Domain", "Examples of Items Tested"], ["Personal-Social", "Smiles, feeds self, dresses, plays with others"], ["Fine Motor-Adaptive", "Follows, reaches, grasps, builds tower, copies shapes"], ["Language", "Vocalises, words, phrases, sentences, body parts, colours"], ["Gross Motor", "Head control, sitting, standing, walking, running, hopping"], ] denver_table = Table(denver_domains, colWidths=[5*cm, 10*cm], repeatRows=1) denver_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#4a6fa5')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9.5), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#aaaaaa')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f0f7ff'), colors.white]), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 8), ('FONTNAME', (0,1), (0,-1), 'Helvetica-Bold'), ])) elements.append(denver_table) elements.append(Spacer(1, 0.4*cm)) # === DEVELOPMENTAL REGRESSION === elements.append(Paragraph("DEVELOPMENTAL REGRESSION", section_style)) elements.append(Spacer(1, 0.2*cm)) elements.append(Paragraph( "Loss of previously acquired milestones (<b>regression</b>) is always abnormal and requires urgent evaluation. " "Causes include: metabolic disorders (e.g. neuronal ceroid lipofuscinosis), CNS infections, " "Rett syndrome (girls; regression at 6–18 months after apparently normal early development), " "Heller's syndrome (childhood disintegrative disorder), and psychosocial deprivation.", ParagraphStyle('reg', parent=styles['Normal'], fontSize=9.5, leading=14, textColor=colors.HexColor('#222222')))) elements.append(Spacer(1, 0.4*cm)) # === FOOTER NOTE === elements.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#1a3a5c'))) elements.append(Spacer(1, 0.2*cm)) elements.append(Paragraph( "References: OP Ghai Textbook of Paediatrics (9th Ed) | Nelson's Textbook of Pediatrics (21st Ed) | " "Denver Developmental Screening Test II | AAP Developmental Surveillance Guidelines", ParagraphStyle('footer', parent=styles['Normal'], fontSize=7.5, textColor=colors.HexColor('#777777'), alignment=TA_CENTER))) # Build PDF doc.build(elements) print(f"PDF created: {output_path}") PYEOF

Your PDF is ready! Here's the download link:

Developmental Milestones Paediatrics

PDF Document · PDF


What's included in the PDF:
  1. Quick-Reference Summary Table - all ages from 1 month to 6 years at a glance across all 4 domains
  2. Detailed Milestones by Age - for each age group (Birth, 4-6 weeks, 3m, 6m, 9m, 12m, 15m, 18m, 2y, 2.5y, 3y, 4y, 5y, 6y):
    • Gross Motor
    • Fine Motor / Adaptive
    • Language / Communication
    • Social / Personal
    • Red Flags highlighted in red for each age
  3. Primitive & Postural Reflexes table (appearance and disappearance ages)
  4. Key Milestones Memory Aids (the classic ones every paed exam asks)
  5. Denver DDST-II domain overview
  6. Developmental Regression - causes and significance
Based on OP Ghai's Textbook of Paediatrics (9th Ed), Nelson's (21st Ed), and DDST-II criteria.
This is a shared conversation. Sign in to Orris to start your own chat.