Answer these questions for bds 1st year anatomy bord exam of kathamndu university each question holds 10 marks
| Stage | Ploidy | Key Events |
|---|---|---|
| Spermatogonium (Type A & B) | 2n | Mitotic proliferation; Type B → primary spermatocyte |
| Primary spermatocyte | 2n (4C) | Longest stage; completes meiosis I (takes ~24 days) |
| Secondary spermatocyte | n (2C) | Short-lived; completes meiosis II rapidly |
| Spermatid | n (1C) | Undergoes spermiogenesis - no further division |
| Spermatozoon | n (1C) | Mature gamete: head, neck, midpiece, tail |
| Feature | Spermatogenesis | Oogenesis |
|---|---|---|
| Onset | Begins at puberty | Begins in fetal life (5th week) |
| Completion | Continuous from puberty onward | Completed only if fertilization occurs |
| Products | 4 functional sperms per primary spermatocyte | 1 functional oocyte + 2-3 polar bodies (non-functional) |
| Cytoplasmic division | Equal (4 equal spermatids) | Unequal (large oocyte + tiny polar bodies) |
| Duration of meiosis I | ~24 days | Begins in fetal life; arrested for up to 45 years |
| Arrest point | No arrest; continuous | Arrested at prophase I (until puberty) then at metaphase II (until fertilization) |
| Location | Seminiferous tubules (testes) | Ovarian follicles |
| Completion of meiosis II | Always completed | Only completed upon fertilization |
| Spermiogenesis | Required (spermatid → sperm) | No equivalent |
LUMEN
|
[1] MUCOSA (innermost):
- Epithelium: simple columnar with two cell types:
a) Ciliated cells - cilia beat toward uterus
b) Secretory (peg) cells - nourish ovum
- Lamina propria: loose CT with vessels
- Highly folded (tall longitudinal folds) - especially prominent in ampulla
|
[2] MUSCULARIS:
- Inner circular layer
- Outer longitudinal layer
- (No distinct submucosa)
|
[3] SEROSA (PERIMETRIUM):
- Visceral peritoneum (mesothelium + CT)
| Anomaly | Description | Significance |
|---|---|---|
| Placenta previa | Placenta implants over internal os | Painless antepartum hemorrhage; C-section required |
| Placenta accreta | Villi attach directly to myometrium (no decidua basalis) | Failure of placental separation; massive PPH |
| Placenta increta | Villi invade into myometrium | Severe PPH |
| Placenta percreta | Villi penetrate through myometrium to serosa | Life-threatening; may rupture uterus |
| Battledore placenta | Umbilical cord inserts at placental margin | Usually benign; may cause fetal distress |
| Bipartite/Duplex placenta | Placenta divided into two lobes | Risk of retained lobe post-delivery |
| Circumvallate placenta | Chorionic plate smaller than basal plate; thick rolled edge | APH, IUGR |
| Succenturiate lobe | Accessory lobe of placenta | Risk of retained lobe |
SOMITE
├── SCLEROTOME (ventromedial cells)
│ → Vertebrae + ribs + intervertebral discs (surrounds notochord/neural tube)
│
└── DERMOMYOTOME (dorsolateral cells)
├── MYOTOME
│ → Skeletal muscles:
│ - Epimere (dorsal) → intrinsic back muscles
│ - Hypomere (ventral) → muscles of body wall and limbs
│
└── DERMATOME
→ Dermis and subcutaneous tissue of trunk and limbs
| Somite Component | Derivative | Clinical Relevance |
|---|---|---|
| Sclerotome | Vertebral bodies, neural arches, ribs, sternum | Hemivertebrae, spina bifida |
| Myotome | All skeletal muscles of trunk and limbs | Muscular dystrophies |
| Dermatome | Dermis of back and limbs | Dermatomal distribution of herpes zoster |
| Feature | Monozygotic (Identical) | Dizygotic (Fraternal) |
|---|---|---|
| Origin | One zygote splits | Two separate ova fertilized |
| Genetics | Genetically identical | Like ordinary siblings |
| Sex | Always same | Can differ |
| Chorionicity | Dichorionic (early split) or monochorionic (late split) | Always dichorionic, diamniotic |
| Frequency | ~4/1000 | ~8/1000 (varies with race) |
| Complications | Twin-to-twin transfusion syndrome (if monochorionic) | Pre-term labour |
Create a revision study guide PDF summarizing all embryology topics
mkdir -p /home/daytona/workspace/embryology-guide && ls /home/daytona/workspace/
~/embryology-guide/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
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 ListFlowable, ListItem
# ── Output path ──────────────────────────────────────────────────────────────
OUT = "/home/daytona/workspace/embryology-guide/Embryology_Revision_Guide_BDS1.pdf"
# ── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2.2*cm,
title="General Embryology – BDS 1st Year Revision Guide",
author="Orris AI"
)
W, H = A4
# ── Colour palette ────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1B3A6B")
MED_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#D6E8F7")
ACCENT = colors.HexColor("#E84A5F")
YELLOW_HL = colors.HexColor("#FFF9C4")
GREEN = colors.HexColor("#2E7D32")
TABLE_HEAD = colors.HexColor("#1B3A6B")
TABLE_ALT = colors.HexColor("#EBF3FB")
WHITE = colors.white
GREY_TEXT = colors.HexColor("#444444")
BORDER_COL = colors.HexColor("#B0C4DE")
# ── Styles ────────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
def sty(name, parent="Normal", **kw):
s = ParagraphStyle(name, parent=base[parent], **kw)
return s
S = {
"cover_title": sty("cover_title", "Title",
fontSize=28, textColor=WHITE, leading=34, alignment=TA_CENTER, spaceAfter=8),
"cover_sub": sty("cover_sub", "Normal",
fontSize=14, textColor=colors.HexColor("#BBDEFB"), alignment=TA_CENTER, spaceAfter=4),
"cover_note": sty("cover_note", "Normal",
fontSize=11, textColor=colors.HexColor("#FFCC80"), alignment=TA_CENTER),
"chap_title": sty("chap_title", "Heading1",
fontSize=18, textColor=WHITE, leading=22, spaceAfter=0, spaceBefore=0,
alignment=TA_LEFT),
"sec_title": sty("sec_title", "Heading2",
fontSize=13, textColor=DARK_BLUE, leading=17, spaceBefore=14, spaceAfter=4,
fontName="Helvetica-Bold"),
"sub_title": sty("sub_title", "Heading3",
fontSize=11, textColor=MED_BLUE, leading=15, spaceBefore=8, spaceAfter=3,
fontName="Helvetica-Bold"),
"body": sty("body", "Normal",
fontSize=10, textColor=GREY_TEXT, leading=14, spaceAfter=5,
alignment=TA_JUSTIFY),
"bullet": sty("bullet", "Normal",
fontSize=10, textColor=GREY_TEXT, leading=13, leftIndent=14,
bulletIndent=4, spaceAfter=2),
"sub_bullet": sty("sub_bullet", "Normal",
fontSize=9.5, textColor=GREY_TEXT, leading=12.5, leftIndent=28,
bulletIndent=18, spaceAfter=1.5),
"key_box": sty("key_box", "Normal",
fontSize=10, textColor=DARK_BLUE, leading=14, leftIndent=8,
fontName="Helvetica-Bold"),
"clinical": sty("clinical", "Normal",
fontSize=9.5, textColor=GREEN, leading=13, leftIndent=10,
fontName="Helvetica-Oblique"),
"table_hdr": sty("table_hdr", "Normal",
fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12),
"table_cell": sty("table_cell", "Normal",
fontSize=9, textColor=GREY_TEXT, leading=12, alignment=TA_LEFT),
"table_cell_c":sty("table_cell_c", "Normal",
fontSize=9, textColor=GREY_TEXT, leading=12, alignment=TA_CENTER),
"footer": sty("footer", "Normal",
fontSize=8, textColor=colors.grey, alignment=TA_CENTER),
"page_label": sty("page_label", "Normal",
fontSize=9, textColor=MED_BLUE, fontName="Helvetica-Bold"),
}
# ── Helpers ───────────────────────────────────────────────────────────────────
def B(txt): return f"<b>{txt}</b>"
def I(txt): return f"<i>{txt}</i>"
def C(txt, col="#E84A5F"): return f'<font color="{col}">{txt}</font>'
def p(txt, style="body"): return Paragraph(txt, S[style])
def sp(h=6): return Spacer(1, h)
def hr(col=BORDER_COL, t=0.5): return HRFlowable(width="100%", thickness=t, color=col, spaceAfter=4, spaceBefore=4)
def bullet(txt, style="bullet"): return Paragraph(f"• {txt}", S[style])
def sbullet(txt): return Paragraph(f" – {txt}", S[sub_bullet"])
def chapter_header(text, subtitle=""):
"""Coloured chapter banner."""
inner = [p(text, "chap_title")]
if subtitle:
inner.append(p(subtitle, "cover_sub"))
tbl = Table([[inner]], colWidths=[W - 4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING",(0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [6]),
]))
return tbl
def key_box(lines):
"""Yellow highlighted key-points box."""
content = [p(l, "key_box") for l in lines]
tbl = Table([[content]], colWidths=[W - 4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), YELLOW_HL),
("BOX", (0,0), (-1,-1), 1, colors.HexColor("#F9A825")),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING",(0,0), (-1,-1), 7),
]))
return tbl
def info_box(lines, bg=LIGHT_BLUE, border=MED_BLUE):
content = [p(l, "body") for l in lines]
tbl = Table([[content]], colWidths=[W - 4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1, border),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
]))
return tbl
def make_table(headers, rows, col_widths=None):
data = [[Paragraph(h, S["table_hdr"]) for h in headers]]
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 = [(W - 4*cm) / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#B0C4DE")),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, TABLE_ALT]),
("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
# ── Cover page ────────────────────────────────────────────────────────────────
def cover_page():
elems = []
# full-page blue background via a wide table
cover_inner = [
sp(60),
p("GENERAL EMBRYOLOGY", "cover_title"),
p("Revision Study Guide", "cover_sub"),
sp(4),
p("BDS 1st Year • Kathmandu University", "cover_sub"),
sp(20),
p("Based on: The Developing Human (Moore) | Langman's Medical Embryology", "cover_note"),
p("Topics: Oogenesis · Spermatogenesis · Gastrulation · Neurulation", "cover_note"),
p("Notochord · Placenta · Mesoderm · Twins · Fertilisation · Implantation", "cover_note"),
sp(8),
p("Prepared by Orris AI • June 2026", "cover_note"),
]
bg = Table([[cover_inner]], colWidths=[W - 4*cm])
bg.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 30),
("RIGHTPADDING", (0,0), (-1,-1), 30),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING",(0,0), (-1,-1), 60),
]))
elems.append(bg)
elems.append(PageBreak())
return elems
# ══════════════════════════════════════════════════════════════════════════════
# CONTENT
# ══════════════════════════════════════════════════════════════════════════════
story = []
story += cover_page()
# ─────────────────────────────────────────────────────────────────────────────
# TABLE OF CONTENTS (manual)
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("Table of Contents"))
story.append(sp(10))
toc_items = [
"1. Gametogenesis Overview",
"2. Oogenesis – Definition, Mechanism & Ovulation",
"3. Spermatogenesis – Stages & Spermiogenesis",
"4. Oogenesis vs. Spermatogenesis – Comparison",
"5. Fertilisation",
"6. Implantation",
"7. Gastrulation – Week 3",
"8. Notochord – Formation, Significance & Fate",
"9. Neurulation",
"10. Intraembryonic Mesoderm & Subdivisions",
"11. Paraxial Mesoderm & Derivatives",
"12. Development of Placenta & Anomalies",
"13. Histology of the Fallopian Tube",
"14. Twins – Monozygotic vs. Dizygotic",
"15. Palate Formation & Teratology",
"16. Quick-Revision Memory Tables",
]
for item in toc_items:
story.append(bullet(item))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 1. GAMETOGENESIS OVERVIEW
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("1. Gametogenesis Overview", "Formation of male and female gametes"))
story.append(sp(10))
story.append(p(f"{B('Gametogenesis')} is the process of formation and maturation of gametes (sex cells) by meiosis. It includes {B('oogenesis')} (female) and {B('spermatogenesis')} (male). Both involve two meiotic divisions that reduce the chromosome number from diploid (2n=46) to haploid (n=23)."))
story.append(sp(6))
story.append(p(f"{B('Meiosis I')} (Reductional): Homologous chromosomes separate → two haploid secondary gametocytes. Crossing-over during prophase I generates genetic diversity."))
story.append(p(f"{B('Meiosis II')} (Equational): Sister chromatids separate → four haploid cells. Similar to mitosis but starts from haploid."))
story.append(sp(8))
story.append(key_box([
"KEY POINT: Meiosis ensures haploid gametes so fertilisation restores diploidy.",
"Crossing-over shuffles parental genes → genetic variation in offspring.",
"Nondisjunction = failure of chromosome separation → aneuploidy (e.g., Down syndrome trisomy 21).",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 2. OOGENESIS
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("2. Oogenesis", "Definition · Mechanism · Ovulation"))
story.append(sp(8))
story.append(p(f"{B('Definition:')} Oogenesis is the sequence of events by which {B('oogonia')} (primordial germ cells in the ovary) are transformed into mature {B('secondary oocytes')} ready for fertilisation. It begins in fetal life and continues until menopause."))
story.append(sp(6))
story.append(p("PRENATAL PHASE", "sec_title"))
story.append(bullet(f"Oogonia proliferate by {B('mitosis')} in early fetal life (5th week onward)."))
story.append(bullet("Oogonia enlarge → primary oocytes. Flattened follicular cells surround each → primordial follicle."))
story.append(bullet(f"Primary oocytes begin {B('meiosis I')} before birth but arrest in {B('prophase I – dictyotene stage')}."))
story.append(bullet(f"Follicular cells secrete {B('Oocyte Maturation Inhibitor (OMI)')} keeping meiosis arrested."))
story.append(bullet("At birth: ~2 million primary oocytes; by puberty only ~40,000 remain (atresia)."))
story.append(sp(6))
story.append(p("POSTNATAL / PUBERTAL PHASE", "sec_title"))
story.append(bullet(f"FSH stimulates follicular growth each month; primary oocyte resumes meiosis I."))
story.append(bullet(f"Meiosis I completes just before ovulation → {B('secondary oocyte')} (large) + {B('1st polar body')} (small, degenerates)."))
story.append(bullet(f"Secondary oocyte begins meiosis II but arrests at {B('metaphase II')}."))
story.append(bullet(f"Meiosis II completes {B('only if fertilisation occurs')} → mature oocyte + 2nd polar body."))
story.append(sp(6))
story.append(p("OVULATION", "sec_title"))
story.append(bullet(f"Triggered by the mid-cycle {B('LH surge')} (day ~14 of a 28-day cycle)."))
story.append(bullet(f"Graafian follicle ruptures; {B('secondary oocyte + corona radiata')} released into peritoneal cavity."))
story.append(bullet("Fimbriae of fallopian tube sweep the oocyte into the ampulla."))
story.append(bullet("Viable for ~24 hours. If not fertilised, degenerates."))
story.append(bullet(f"Ruptured follicle → {B('corpus luteum')} (secretes progesterone to maintain endometrium)."))
story.append(sp(8))
story.append(key_box([
"EXAM TIP – Mark scheme [1+2+2=5]:",
"1 mark: Define oogenesis | 2 marks: Prenatal + postnatal mechanism | 2 marks: Ovulation details",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 3. SPERMATOGENESIS
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("3. Spermatogenesis", "Stages & Spermiogenesis"))
story.append(sp(8))
story.append(p(f"{B('Spermatogenesis')} is the transformation of {B('spermatogonia')} into mature {B('spermatozoa')}. It begins at puberty and is continuous throughout life. Duration: ~74 days. Located in {B('seminiferous tubules')} of the testes. Regulated by {B('testosterone')} (Leydig cells) and {B('FSH/LH')}."))
story.append(sp(6))
# Stages table
story.append(p("STAGES", "sec_title"))
story.append(make_table(
["Stage", "Ploidy", "Key Events"],
[
["Spermatogonium\n(Type A & B)", "2n (diploid)", "Type A: self-renewing stem cells\nType B: differentiates → primary spermatocyte"],
["Primary Spermatocyte", "2n (4C)", "Undergoes Meiosis I (longest stage, ~24 days); crossing-over occurs"],
["Secondary Spermatocyte", "n (2C)", "Short-lived; undergoes Meiosis II rapidly"],
["Spermatid", "n (1C)", "Undergoes spermiogenesis – no further division"],
["Spermatozoon", "n (1C)", "Mature sperm: head + neck + midpiece + tail"],
],
col_widths=[4.5*cm, 3*cm, 9*cm]
))
story.append(sp(8))
story.append(p("SPERMIOGENESIS (Spermatid → Sperm)", "sec_title"))
story.append(bullet(f"{B('Golgi phase:')} Pro-acrosomal granules from Golgi coalesce → acrosome vesicle forms over nucleus."))
story.append(bullet(f"{B('Cap phase:')} Acrosome cap spreads over anterior nuclear surface."))
story.append(bullet(f"{B('Acrosomal phase:')} Nucleus elongates and condenses; flagellum develops; mitochondria arrange in midpiece (energy source)."))
story.append(bullet(f"{B('Maturation phase:')} Excess cytoplasm shed as residual bodies (phagocytosed by Sertoli cells). Spermatozoon formed."))
story.append(sp(6))
story.append(info_box([
f"{B('Sertoli cells:')} Support, nourish, and protect developing spermatids; form blood-testis barrier; phagocytose residual bodies; secrete inhibin.",
f"{B('Leydig cells:')} Secrete testosterone (stimulated by LH); essential for spermatogenesis.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 4. OOGENESIS vs. SPERMATOGENESIS
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("4. Oogenesis vs. Spermatogenesis", "Comparison Table [4+3 = 7 marks]"))
story.append(sp(8))
story.append(make_table(
["Feature", "Spermatogenesis", "Oogenesis"],
[
["Onset", "Begins at puberty", "Begins in fetal life (5th week)"],
["Location", "Seminiferous tubules (testes)", "Ovarian follicles"],
["Products per primary gametocyte", "4 functional spermatozoa", "1 functional oocyte + 2–3 polar bodies"],
["Cytoplasmic division", "Equal – 4 equal spermatids", "Unequal – large oocyte + tiny polar bodies"],
["Duration of meiosis I", "~24 days; continuous", "Begins fetal life; arrested up to 45 years"],
["Arrest point", "No arrest; continuous production", "Prophase I (until puberty); Metaphase II (until fertilisation)"],
["Completion of meiosis II", "Always completed", "Only if fertilisation occurs"],
["Spermiogenesis equivalent", "Required (spermatid → sperm)", "None"],
["Number produced in lifetime", "Millions daily; ~500 billion total", "~400 oocytes ovulated in lifetime"],
["Regulatory hormones", "FSH, LH, Testosterone", "FSH, LH, Oestrogen, Progesterone"],
],
col_widths=[4.5*cm, 6.5*cm, 5.5*cm]
))
story.append(sp(8))
story.append(key_box([
"EXAM MNEMONIC – 'OOSE': Oogenesis: One functional cell, Unequal division, Split begins in fetal life, Ends at fertilisation.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 5. FERTILISATION
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("5. Fertilisation", "Week 1 – Day 0"))
story.append(sp(8))
story.append(p(f"{B('Site:')} Ampulla of the fallopian tube (uterine tube)."))
story.append(p(f"{B('Capacitation:')} Sperm undergo functional changes in female tract (~7 hours) enabling fertilisation."))
story.append(sp(4))
story.append(p("STEPS OF FERTILISATION", "sec_title"))
story.append(bullet(f"{B('Step 1:')} Sperm penetrate corona radiata (hyaluronidase + mechanical)."))
story.append(bullet(f"{B('Step 2:')} {B('Acrosome reaction')} – sperm binds to zona pellucida (ZP3 glycoprotein); acrosomal enzymes (acrosin, hyaluronidase) released → penetrate zona."))
story.append(bullet(f"{B('Step 3:')} Sperm plasma membrane fuses with oocyte membrane."))
story.append(bullet(f"{B('Step 4:')} {B('Cortical reaction')} (zona reaction) – cortical granules released → zona pellucida hardens → blocks polyspermy."))
story.append(bullet(f"{B('Step 5:')} Oocyte completes Meiosis II → ovum + 2nd polar body."))
story.append(bullet(f"{B('Step 6:')} Male and female pronuclei form; DNA replicates. Pronuclei fuse → {B('zygote (2n = 46 chromosomes)')}."))
story.append(sp(6))
story.append(info_box([
"Results of fertilisation: Species-specific chromosome number restored (2n=46) | Chromosomal sex determined (XX or XY) | Cleavage (mitosis) begins | Embryonic development initiated.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 6. IMPLANTATION
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("6. Implantation", "Week 2 – Days 6–10"))
story.append(sp(8))
story.append(p(f"{B('Cleavage:')} Zygote undergoes rapid mitotic divisions (no growth between divisions) forming the {B('morula')} (~16 cells, day 3) → enters uterus."))
story.append(p(f"{B('Blastocyst formation:')} Morula develops a fluid-filled cavity (blastocoel) → {B('blastocyst')} (day 4–5). Inner cell mass (embryoblast) + outer trophoblast."))
story.append(sp(4))
story.append(p("IMPLANTATION PROCESS", "sec_title"))
story.append(bullet(f"Day 6: Zona pellucida shed ({B('hatching')}) → trophoblast cells exposed."))
story.append(bullet(f"Day 6–7: Blastocyst attaches to posterior wall of uterus (most common site)."))
story.append(bullet(f"Trophoblast differentiates into: {B('Syncytiotrophoblast')} (invasive, no cell boundaries) and {B('Cytotrophoblast')} (mononuclear)."))
story.append(bullet(f"Syncytiotrophoblast invades decidua; {B('lacunae')} form → fill with maternal blood → early uteroplacental circulation."))
story.append(bullet(f"{B('hCG')} (human chorionic gonadotropin) secreted from day 8–9 → maintains corpus luteum → prevents menstruation."))
story.append(sp(6))
story.append(key_box([
f"ABNORMAL IMPLANTATION – Ectopic Pregnancy:",
"95% in fallopian tube (ampulla). Can rupture → life-threatening haemorrhage.",
"Other sites: ovary, abdominal cavity, cervix.",
"Risk factors: PID, previous ectopic, tubal surgery.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 7. GASTRULATION
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("7. Gastrulation", "Week 3 – Establishing 3 Germ Layers"))
story.append(sp(8))
story.append(p(f"{B('Gastrulation')} converts the bilaminar disc (epiblast + hypoblast) into a {B('trilaminar embryonic disc')}: ectoderm, mesoderm, and endoderm. Occurs during week 3."))
story.append(sp(6))
story.append(p("STEPS", "sec_title"))
story.append(bullet(f"Day 15: {B('Primitive streak')} appears in the midline epiblast at the caudal end."))
story.append(bullet(f"Cranial end of primitive streak: {B('primitive node (Hensen node)')}."))
story.append(bullet(f"Epiblast cells migrate to primitive streak, {B('invaginate')}, and spread:"))
story.append(Paragraph(" – Cells displacing hypoblast → <b>ENDODERM</b> (gut, liver, lungs, pancreas)", S["sub_bullet"]))
story.append(Paragraph(" – Cells spreading between epiblast and endoderm → <b>INTRAEMBRYONIC MESODERM</b>", S["sub_bullet"]))
story.append(Paragraph(" – Remaining surface epiblast cells → <b>ECTODERM</b>", S["sub_bullet"]))
story.append(sp(4))
story.append(bullet(f"Prechordal plate (cranial) and cloacal membrane (caudal) remain {B('bilaminar')} – no mesoderm invades."))
story.append(sp(6))
story.append(p("DERIVATIVES OF GERM LAYERS", "sec_title"))
story.append(make_table(
["Germ Layer", "Major Derivatives"],
[
["Ectoderm", "CNS (neural tube), PNS (neural crest), epidermis, lens, inner ear, enamel of teeth"],
["Mesoderm", "Muscles, bones, cartilage, connective tissue, cardiovascular system, kidneys, gonads, dermis of skin"],
["Endoderm", "Epithelium of GI tract, respiratory tract, urinary bladder, liver parenchyma, pancreas, thyroid, thymus"],
],
col_widths=[4*cm, 12.5*cm]
))
story.append(sp(8))
story.append(key_box([
"SIGNIFICANCE: Gastrulation establishes all three body axes (cranio-caudal, dorso-ventral, left-right) and creates all tissues of the body.",
"CLINICAL: Sacrococcygeal teratoma – remnant of primitive streak; contains derivatives of all 3 germ layers.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 8. NOTOCHORD
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("8. Notochord", "Formation · Significance · Fate [2+2+2 = 6 marks]"))
story.append(sp(8))
story.append(p("FORMATION (2 marks)", "sec_title"))
story.append(bullet(f"Week 3: Epiblast cells migrate through the {B('primitive node')} in the midline toward the prechordal plate."))
story.append(bullet(f"They form a hollow tube: {B('notochordal process')}."))
story.append(bullet(f"Notochordal process fuses with endoderm → {B('notochordal plate')} (a temporary communication – {B('neurenteric canal')} forms briefly)."))
story.append(bullet(f"Notochordal plate detaches from endoderm and rolls up → {B('definitive notochord')} (solid rod, midline)."))
story.append(sp(6))
story.append(p("SIGNIFICANCE (2 marks)", "sec_title"))
story.append(bullet(f"{B('Induces neurulation:')} Notochord secretes {B('Sonic Hedgehog (SHH)')} → induces overlying ectoderm to form the neural plate."))
story.append(bullet(f"{B('Defines the body axis:')} Marks the longitudinal axis around which the vertebral column develops."))
story.append(bullet(f"{B('Induces somite formation:')} Signals adjacent paraxial mesoderm to segment into somites."))
story.append(bullet(f"{B('Organiser function:')} Determines floor plate of neural tube; directs dorsal-ventral patterning."))
story.append(sp(6))
story.append(p("FATE (2 marks)", "sec_title"))
story.append(bullet(f"Vertebral bodies form {B('around')} the notochord during ossification."))
story.append(bullet(f"At each {B('intervertebral disc')}, the notochord persists as the {B('nucleus pulposus')} (gelatinous shock-absorbing core)."))
story.append(bullet(f"The nucleus pulposus is surrounded by the {B('annulus fibrosus')} (from sclerotome)."))
story.append(sp(6))
story.append(key_box([
"CLINICAL – Herniated (Prolapsed) Disc: Nucleus pulposus herniates through annulus fibrosus → compresses spinal nerve roots → sciatica/radiculopathy.",
"CHORDOMA: Rare malignant tumour arising from notochord remnants (usually sacrococcygeal or skull base).",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 9. NEURULATION
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("9. Neurulation", "Formation of the Neural Tube – Week 3–4"))
story.append(sp(8))
story.append(p(f"{B('Neurulation')} is the process by which the neural plate folds to form the {B('neural tube')}, the precursor of the entire CNS (brain + spinal cord)."))
story.append(sp(6))
story.append(p("STEPS", "sec_title"))
story.append(bullet(f"Day ~18: Notochord induces overlying ectoderm → thickens to form the {B('neural plate')} (neuroectoderm)."))
story.append(bullet(f"Lateral edges of neural plate elevate as {B('neural folds')}; central depression = {B('neural groove')}."))
story.append(bullet(f"Neural folds approach midline and fuse starting in the {B('cervical region')}, then proceeding both cranially and caudally."))
story.append(bullet(f"Complete fusion forms the {B('neural tube')} (closed channel):"))
story.append(Paragraph(" – Cranial neuropore closes: day 25", S["sub_bullet"]))
story.append(Paragraph(" – Caudal neuropore closes: day 27", S["sub_bullet"]))
story.append(bullet(f"{B('Neural crest cells')} migrate from the fusing neural fold margins → extensive derivatives (DRG, Schwann cells, melanocytes, facial cartilage/bone, etc.)"))
story.append(sp(6))
story.append(p("NEURAL TUBE DEFECTS (NTDs)", "sec_title"))
story.append(make_table(
["Defect", "Neural Tube Failure", "Clinical Features"],
[
["Anencephaly", "Cranial neuropore fails to close", "Absence of brain/skull vault; lethal"],
["Spina bifida occulta", "Caudal neuropore; vertebral arch only", "Tuft of hair over spine; usually asymptomatic"],
["Meningocele", "Vertebral arch + meninges herniate", "Sac with CSF; no neural tissue"],
["Meningomyelocele", "Vertebral arch + meninges + spinal cord", "Sac with neural tissue; paralysis below lesion"],
["Rachischisis", "No closure; open neural tube", "Exposed neural tissue; severe"],
],
col_widths=[4.5*cm, 5*cm, 7*cm]
))
story.append(sp(6))
story.append(key_box([
"PREVENTION: Folic acid (0.4 mg/day) periconceptionally reduces NTD risk by 70%.",
"Diagnosis: Maternal AFP elevated; antenatal USS; amniocentesis.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 10. INTRAEMBRYONIC MESODERM & SUBDIVISIONS
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("10. Intraembryonic Mesoderm & Subdivisions", "[3+2 = 5 marks]"))
story.append(sp(8))
story.append(p("FORMATION (3 marks)", "sec_title"))
story.append(p(f"Formed during {B('gastrulation (week 3)')}: epiblast cells migrate through the sides of the primitive streak, invaginate, and spread laterally between ectoderm and endoderm on both sides of the notochord. The prechordal plate (cranial) and cloacal membrane (caudal) remain bilaminar."))
story.append(sp(6))
story.append(p("THREE SUBDIVISIONS (2 marks)", "sec_title"))
story.append(make_table(
["Subdivision", "Location", "Key Derivatives"],
[
["1. Paraxial Mesoderm", "Flanking notochord/neural tube", "Somites → vertebrae, ribs, skeletal muscles, dermis of trunk"],
["2. Intermediate Mesoderm", "Between paraxial and lateral plate", "Urogenital system: kidneys (3 generations), gonads, Wolffian & Müllerian ducts"],
["3. Lateral Plate Mesoderm\n(Somatic layer)", "Lines body wall (parietal)", "Serous membrane parietal layer, bones & CT of limbs"],
["3. Lateral Plate Mesoderm\n(Splanchnic layer)", "Surrounds gut (visceral)", "Heart, smooth muscle of gut, serous membrane visceral layer, spleen"],
],
col_widths=[4*cm, 4*cm, 8.5*cm]
))
story.append(sp(6))
story.append(info_box([
f"{B('Intraembryonic coelom:')} Cavity that appears within the lateral plate mesoderm, separating it into somatic and splanchnic layers. It becomes the pericardial, pleural, and peritoneal cavities.",
f"{B('Head mesenchyme:')} Largely from neural crest cells (ectomesenchyme) → facial bones, cartilage, dermis of face.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 11. PARAXIAL MESODERM & DERIVATIVES
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("11. Paraxial Mesoderm & Derivatives", "Somitogenesis"))
story.append(sp(8))
story.append(p(f"{B('Paraxial mesoderm')} condenses into paired blocks called {B('somites')} (trunk region) and {B('somitomeres')} (head region)."))
story.append(p(f"Somites appear from {B('day 20')} at ~3 pairs/day in craniocaudal direction. Final count: {B('42–44 pairs')} (8 cervical, 12 thoracic, 5 lumbar, 5 sacral, 8–10 coccygeal)."))
story.append(p(f"Somite count is used to {B('estimate embryonic age')}."))
story.append(sp(6))
story.append(p("SOMITE DIFFERENTIATION", "sec_title"))
story.append(make_table(
["Somite Region", "Structure Formed", "Final Derivatives"],
[
["Sclerotome\n(ventromedial)", "Mesenchyme surrounds notochord & neural tube", "Vertebral bodies, neural arches, ribs, intervertebral disc (annulus fibrosus)"],
["Myotome\n(from dermomyotome)", "Epimere (dorsal) and Hypomere (ventral)", "Intrinsic back muscles (epimere); muscles of body wall, limb girdles (hypomere)"],
["Dermatome\n(from dermomyotome)", "Superficial dermis", "Dermis and subcutaneous tissue of back and limbs"],
],
col_widths=[4*cm, 5.5*cm, 7*cm]
))
story.append(sp(6))
story.append(info_box([
f"{B('Resegmentation:')} Each vertebra is formed by fusion of the CAUDAL half of one somite + CRANIAL half of the adjacent somite. This allows spinal nerves to exit between vertebrae and muscles to bridge intervertebral joints.",
f"{B('Cranial paraxial mesoderm (somitomeres):')} Forms extraocular muscles, muscles of mastication, facial expression, and tongue.",
]))
story.append(key_box([
"SIGNALLING: Wnt signals → Myotome | SHH (from notochord/floor plate) → Sclerotome | Neurotrophin-3 → Dermatome.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 12. PLACENTA
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("12. Development of Placenta & Anomalies", "[3+2 = 5 marks]"))
story.append(sp(8))
story.append(p("DEVELOPMENT (3 marks)", "sec_title"))
story.append(make_table(
["Stage / Week", "Events"],
[
["Week 2 – Lacunar stage", "Syncytiotrophoblast invades decidua; lacunae form and fill with maternal blood → uteroplacental circulation begins"],
["Week 3 – Primary villi", "Cytotrophoblast grows into syncytiotrophoblast → solid cytotrophoblast cores covered by syncytium"],
["Week 3 – Secondary villi", "Extraembryonic mesoderm grows into primary villi → mesodermal core (secondary villus)"],
["Week 3–4 – Tertiary villi", "Fetal blood vessels form within mesoderm core → functional gas exchange begins"],
["Weeks 4–8 – Definitive placenta", "Chorion frondosum (villi on embryonic pole persist) + Chorion laeve (abembryonic villi regress) + Decidua basalis = Placenta"],
["Term placenta", "Disc-shaped; 15–20 cm diameter; ~500 g; 15–20 maternal cotyledons; umbilical cord: 2 arteries + 1 vein"],
],
col_widths=[4*cm, 12.5*cm]
))
story.append(sp(6))
story.append(p("FUNCTIONS", "sec_title"))
story.append(bullet("Gas exchange: O₂ and CO₂ by diffusion (fetal Hb has higher O₂ affinity than maternal Hb)"))
story.append(bullet("Nutrient transfer: glucose, amino acids, fatty acids, vitamins"))
story.append(bullet("Waste removal: CO₂, urea, bilirubin"))
story.append(bullet("Hormone production: hCG, progesterone, oestrogen, human placental lactogen (hPL)"))
story.append(bullet("Immune: IgG crosses placenta (passive immunity); prevents maternal rejection of fetus"))
story.append(sp(6))
story.append(p("ANOMALIES (2 marks)", "sec_title"))
story.append(make_table(
["Anomaly", "Description", "Clinical Significance"],
[
["Placenta previa", "Implants over/near internal cervical os", "Painless antepartum haemorrhage; C-section required"],
["Placenta accreta", "Villi attach to myometrium (no decidua basalis)", "Failure to separate after delivery; massive PPH"],
["Placenta increta", "Villi invade into myometrium", "Severe PPH; hysterectomy often needed"],
["Placenta percreta", "Villi penetrate through myometrium to serosa", "Life-threatening; may rupture uterus/bladder"],
["Circumvallate placenta", "Thick rolled margin; chorionic plate smaller than basal plate", "APH, IUGR, preterm labour"],
["Succenturiate lobe", "Accessory lobe connected by vessels in membranes", "Risk of retained lobe → PPH"],
["Battledore placenta", "Umbilical cord inserts at margin of placenta", "Usually benign; may cause fetal distress"],
],
col_widths=[4*cm, 5.5*cm, 7*cm]
))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 13. FALLOPIAN TUBE HISTOLOGY
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("13. Histology of the Fallopian Tube", "Labeled Diagram [5 marks]"))
story.append(sp(8))
story.append(p(f"The fallopian tube (uterine tube) is a paired muscular tube ~10 cm long connecting the ovary to the uterine cavity. It is the site of {B('fertilisation')} (in the ampulla) and early embryonic transport."))
story.append(sp(6))
story.append(p("LAYERS (from lumen outward)", "sec_title"))
story.append(make_table(
["Layer", "Structure", "Cell Types / Details"],
[
["1. Mucosa\n(innermost)", "Epithelium + Lamina propria", "Tall longitudinal folds (plicae); Simple columnar epithelium with:\n• Ciliated cells (cilia beat toward uterus – transport oocyte)\n• Secretory (peg) cells – nourish oocyte; intercalated between ciliated cells\nLamina propria: loose vascular connective tissue"],
["2. Muscularis", "Inner circular + outer longitudinal smooth muscle", "Peristaltic contractions help move egg toward uterus"],
["3. Serosa\n(outermost)", "Visceral peritoneum", "Mesothelium (simple squamous) + underlying connective tissue"],
],
col_widths=[3*cm, 4*cm, 9.5*cm]
))
story.append(sp(8))
story.append(p("REGIONAL VARIATION (important for marks!)", "sec_title"))
story.append(make_table(
["Region", "Mucosal Folds", "Special Feature"],
[
["Infundibulum", "Elaborate; fimbriae present", "Widest; finger-like fimbriae sweep ovum into tube"],
["Ampulla", "Tallest, most complex plicae", "SITE OF FERTILISATION; widest lumen"],
["Isthmus", "Few, low folds", "Narrow; thick muscularis; regulates embryo transport"],
["Intramural (Interstitial)", "Minimal folds", "Passes through uterine wall; narrowest lumen"],
],
col_widths=[3.5*cm, 4.5*cm, 8.5*cm]
))
story.append(sp(6))
story.append(key_box([
"DIAGRAM LABELS: 1) Ciliated cells 2) Secretory (peg) cells 3) Mucosal folds (plicae) 4) Lamina propria",
"5) Inner circular muscle 6) Outer longitudinal muscle 7) Serosa (mesothelium).",
"CLINICAL: Ectopic pregnancy occurs when embryo implants in the tube (usually ampulla).",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 14. TWINS
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("14. Twins – Monozygotic vs. Dizygotic"))
story.append(sp(8))
story.append(make_table(
["Feature", "Monozygotic (Identical)", "Dizygotic (Fraternal)"],
[
["Origin", "One zygote divides", "Two separate ova fertilised by two sperms simultaneously"],
["Genetics", "Genetically identical (same DNA)", "Like ordinary siblings (~50% shared genes)"],
["Sex", "Always same sex", "Can be same or different sex"],
["Chorionicity", "Depends on timing of split:\n• Day 1–3: Dichorionic, diamniotic\n• Day 4–8: Monochorionic, diamniotic\n• Day 9–12: Monochorionic, monoamniotic\n• >13 days: Conjoined twins", "Always Dichorionic, Diamniotic"],
["Frequency", "~4 per 1000 births (constant worldwide)", "~8 per 1000 (varies: higher in Africans, older maternal age, fertility drugs)"],
["Complications", "Twin-to-twin transfusion syndrome (if monochorionic); cord entanglement (monoamniotic)", "Preterm labour; IUGR"],
],
col_widths=[4*cm, 6.5*cm, 6*cm]
))
story.append(sp(6))
story.append(key_box([
"EXAM TIP: Earlier the split in MZ twins → more sharing of membranes → more complications.",
"Conjoined twins: incomplete split after day 13 of embryonic development.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 15. PALATE FORMATION & TERATOLOGY
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("15. Palate Formation & Teratology"))
story.append(sp(8))
story.append(p("PRIMARY PALATE (weeks 5–6)", "sec_title"))
story.append(bullet(f"Formed from fusion of the two {B('medial nasal prominences')}."))
story.append(bullet(f"Becomes the {B('premaxilla')}: anterior triangular part of hard palate bearing upper four incisor teeth."))
story.append(bullet("Constitutes only 1/3 of the final hard palate."))
story.append(sp(4))
story.append(p("SECONDARY PALATE (weeks 7–12)", "sec_title"))
story.append(bullet(f"Formed from paired {B('palatine shelves')} (lateral palatine processes) of maxillary prominences."))
story.append(bullet(f"Shelves initially project {B('vertically')} on either side of the tongue."))
story.append(bullet(f"Around week 7–8: Shelves {B('elevate to horizontal')} position (due to intrinsic shelf-elevating force + tongue descent)."))
story.append(bullet(f"Shelves {B('fuse')} with each other in midline + with primary palate anteriorly + nasal septum superiorly."))
story.append(bullet(f"Fusion completed by {B('week 12')}."))
story.append(sp(6))
story.append(p("TERATOLOGY – CLEFT LIP & PALATE", "sec_title"))
story.append(make_table(
["Anomaly", "Cause", "Features"],
[
["Cleft lip", "Failure of fusion of maxillary prominence with medial nasal prominence", "Unilateral or bilateral; may involve alveolar arch"],
["Cleft palate", "Failure of palatine shelves to fuse (may be primary or secondary palate)", "Can be unilateral or bilateral; midline cleft"],
["Combined cleft lip + palate", "Most common and severe form", "Communication between oral and nasal cavities; feeding difficulties"],
],
col_widths=[4*cm, 6*cm, 6.5*cm]
))
story.append(sp(6))
story.append(info_box([
f"{B('Teratogens associated with cleft palate:')} Phenytoin, corticosteroids, alcohol, retinoic acid, maternal folic acid deficiency.",
f"{B('Incidence:')} Cleft lip ± palate: ~1/800; Isolated cleft palate: ~1/2000 live births.",
f"{B('Treatment:')} Surgical repair – cleft lip at 3 months (rule of 10s); cleft palate at 6–12 months.",
]))
story.append(PageBreak())
# ─────────────────────────────────────────────────────────────────────────────
# 16. QUICK REVISION MEMORY TABLES
# ─────────────────────────────────────────────────────────────────────────────
story.append(chapter_header("16. Quick Revision Memory Tables", "High-yield facts for exam day"))
story.append(sp(8))
story.append(p("TIMELINE OF EMBRYONIC DEVELOPMENT", "sec_title"))
story.append(make_table(
["Day/Week", "Event"],
[
["Day 0 (fertilisation)", "Zygote formed in ampulla; 2n restored; sex determined"],
["Days 1–3 (cleavage)", "Morula (~16 cells); zona pellucida intact; in fallopian tube"],
["Day 4–5", "Blastocyst forms; enters uterus"],
["Day 6–7", "Hatching; implantation begins (posterior uterine wall)"],
["Day 8–9", "hCG secretion begins; bilaminar disc (epiblast + hypoblast)"],
["Day 13–14", "Primitive streak appears; gastrulation begins"],
["Week 3", "Gastrulation complete; trilaminar disc; notochord; neurulation begins"],
["Week 4", "Neural tube closes; somites forming; heart beats; limb buds appear"],
["Week 5–6", "Facial prominences; primary palate; lens/optic vesicle"],
["Weeks 7–10", "Palatine shelves elevate and fuse; organogenesis mostly complete"],
["Week 12 (end of 1st trimester)", "Fetal period begins; all major organs formed"],
],
col_widths=[4.5*cm, 12*cm]
))
story.append(sp(10))
story.append(p("HIGH-YIELD EXAM FACTS", "sec_title"))
story.append(make_table(
["Topic", "Key Fact"],
[
["Site of fertilisation", "Ampulla of uterine tube"],
["Site of implantation (normal)", "Posterior wall of uterus (most common)"],
["Arrest points in oogenesis", "Prophase I (until puberty) → Metaphase II (until fertilisation)"],
["Notochord remnant in adult", "Nucleus pulposus of intervertebral disc"],
["Neuropore closure", "Anterior: day 25 | Posterior: day 27"],
["Primitive streak remnant", "Sacrococcygeal teratoma"],
["Hormone that prevents menstruation", "hCG (from syncytiotrophoblast, day 8–9)"],
["Neural crest cell derivatives", "DRG, Schwann cells, melanocytes, adrenal medulla, facial bones"],
["Folic acid and NTDs", "0.4 mg/day periconceptionally reduces NTD risk by 70%"],
["Monochorionic twins", "Split of MZ embryo on days 4–12; risk of TTTS"],
["Placenta accreta risk factor", "Previous C-section scar, placenta previa"],
],
col_widths=[6*cm, 10.5*cm]
))
story.append(sp(10))
story.append(p("GERM LAYER SUMMARY", "sec_title"))
story.append(make_table(
["Ectoderm", "Mesoderm", "Endoderm"],
[["CNS (brain, spinal cord)\nPNS & neural crest cells\nEpidermis, hair, nails\nLens of eye\nInner ear\nEnamel of teeth\nPituitary (anterior lobe)\nMammary glands",
"Skeletal muscle\nCardiac & smooth muscle\nBones & cartilage\nConnective tissue & dermis\nCardiovascular system\nKidneys & gonads\nLining of body cavities\nSpleen",
"GI tract epithelium\nRespiratory epithelium\nUrinary bladder\nLiver & pancreas\nThyroid, parathyroid\nThymus\nMiddle ear epithelium\nTonsils"]],
col_widths=[(W-4*cm)/3]*3
))
story.append(sp(10))
story.append(key_box([
"Sources: The Developing Human (Moore & Persaud, 11e) | Langman's Medical Embryology (Sadler, 14e)",
"For Kathmandu University BDS 1st Year – General Embryology | Prepared by Orris AI, June 2026",
]))
# ─────────────────────────────────────────────────────────────────────────────
# BUILD
# ─────────────────────────────────────────────────────────────────────────────
# Fix the typo in sbullet helper (closing quote issue)
# Already written correctly above in the function definition
doc.build(story)
print(f"PDF created: {OUT}")
cd /home/daytona/workspace/embryology-guide && python make_pdf.py 2>&1
~/embryology-guide/make_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/embryology-guide/make_pdf.py'
cd /home/daytona/workspace/embryology-guide && python make_pdf.py 2>&1
ls -lh /home/daytona/workspace/embryology-guide/Embryology_Revision_Guide_BDS1.pdf
Embryology Revision Guide BDS1
PDF Document · PDF
| Section | Content |
|---|---|
| Cover + TOC | Professional cover page, full table of contents |
| 1. Gametogenesis Overview | Meiosis I & II, nondisjunction |
| 2. Oogenesis | Definition, prenatal/postnatal phases, ovulation |
| 3. Spermatogenesis | All 5 stages, spermiogenesis phases, Sertoli/Leydig cells |
| 4. Comparison Table | Oogenesis vs. Spermatogenesis (10-point comparison) |
| 5. Fertilisation | Steps: acrosome reaction, cortical reaction, pronuclei |
| 6. Implantation | Cleavage, blastocyst, trophoblast, hCG, ectopic pregnancy |
| 7. Gastrulation | Primitive streak, 3 germ layers + derivatives table |
| 8. Notochord | Formation, significance (SHH), fate (nucleus pulposus) |
| 9. Neurulation | Steps, neuropore dates, NTD types table |
| 10. Intraembryonic Mesoderm | Formation + all 3 subdivisions + derivatives |
| 11. Paraxial Mesoderm | Somites, differentiation, resegmentation |
| 12. Placenta | Week-by-week development, functions, 7 anomalies table |
| 13. Fallopian Tube Histology | Layers + regional variation table (for diagrams) |
| 14. Twins | MZ vs DZ full comparison including chorionicity timing |
| 15. Palate Formation | Primary + secondary palate, cleft lip/palate teratogens |
| 16. Quick Revision Tables | Full timeline, 11 high-yield facts, germ layer summary |