attachment
attachment

Answer these questions for bds 1st year anatomy bord exam of kathamndu university each question holds 10 marks

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
I now have rich textbook content. I have comprehensive embryology knowledge from my training + these textbook sources. Let me now provide complete, well-structured 10-mark answers for all the questions.

Anatomy - General Embryology: Board Exam Answers (BDS 1st Year, Kathmandu University)


Q1. What is Oogenesis? Explain its mechanism, adding notes on "Ovulation" [1+2+2=5 marks]

Definition (1 mark)

Oogenesis is the sequence of events by which oogonia (primordial germ cells in the ovary) are transformed into mature secondary oocytes ready for fertilization. Unlike spermatogenesis, oogenesis begins in fetal life and continues until menopause.

Mechanism (2 marks)

Prenatal phase:
  • During early fetal life, oogonia proliferate by mitosis
  • Oogonia enlarge to form primary oocytes before birth; flattened follicular cells surround each to form a primordial follicle
  • Primary oocytes begin meiosis I before birth but arrest in prophase I (dictyotene stage) - maintained by oocyte maturation inhibitor secreted by follicular cells
  • At birth: ~2 million primary oocytes; by puberty only ~40,000 remain
Postnatal (pubertal) phase:
  • Each month, FSH stimulates follicular maturation; the zona pellucida (acellular glycoprotein layer) forms around the oocyte
  • Just before ovulation, the primary oocyte completes meiosis I → produces a secondary oocyte (receives most cytoplasm) + 1st polar body (degenerates)
  • Meiosis II begins but arrests at metaphase II
  • The secondary oocyte is ovulated at this stage
  • Meiosis II is only completed if fertilization occurs, producing the mature oocyte + 2nd polar body
Key difference from spermatogenesis: Cytoplasmic division is unequal in oogenesis (one large oocyte + tiny polar bodies), while in spermatogenesis all four cells become functional spermatids.

Ovulation (2 marks)

  • Triggered by a LH surge (midcycle, day ~14)
  • The Graafian follicle ruptures and releases the secondary oocyte surrounded by the corona radiata and zona pellucida
  • The oocyte is swept into the fallopian tube (uterine tube) by fimbriae
  • If not fertilized within ~24 hours, the secondary oocyte degenerates
  • The ruptured follicle becomes the corpus luteum, which secretes progesterone to maintain the endometrium

Q2. Short Notes [1+2+2=5 each; written as individual 5-mark notes]

(a) Neurulation

Neurulation is the process by which the neural plate folds to form the neural tube (precursor of the CNS).
Steps:
  1. At ~day 18, the notochord induces the overlying ectoderm to thicken, forming the neural plate
  2. The lateral edges of the neural plate elevate as neural folds; the groove between them is the neural groove
  3. Neural folds approach the midline and fuse (starting in the cervical region, proceeding cranially and caudally) to form the neural tube
  4. Fusion is complete by day 26 (cranial neuropore closes day 25; caudal neuropore day 27)
  5. Neural crest cells migrate from the margins of the fusing folds
Significance: Failure of closure causes neural tube defects:
  • Cranial: Anencephaly (failure of anterior neuropore to close)
  • Caudal: Spina bifida (failure of posterior neuropore to close)

(b) Spermatogenesis

Spermatogenesis is the transformation of spermatogonia into mature spermatozoa, beginning at puberty under testosterone influence.
Stages:
  1. Spermatogonium (2n) - stem cells in seminiferous tubules; proliferate by mitosis
    • Type A: self-renewing stem cells
    • Type B: differentiate into primary spermatocytes
  2. Primary spermatocyte (2n) - undergoes meiosis I → two secondary spermatocytes (n)
  3. Secondary spermatocyte (n) - undergoes meiosis II → four spermatids (n)
  4. Spermiogenesis - spermatids undergo morphological transformation (no cell division):
    • Acrosome formation (from Golgi)
    • Condensation of nucleus
    • Formation of flagellum (tail)
    • Loss of excess cytoplasm as residual bodies (phagocytosed by Sertoli cells)
    • Result: mature spermatozoon
Duration: ~74 days. Sertoli cells provide nourishment; testosterone from Leydig cells is essential.

(c) Gastrulation

Gastrulation is the process by which the bilaminar disc (epiblast + hypoblast) is converted into a trilaminar embryonic disc consisting of ectoderm, mesoderm, and endoderm. It occurs during week 3.
Steps:
  1. The primitive streak appears in the midline of the epiblast at the caudal end of the embryo (day 15)
  2. At its cranial end is the primitive node (Hensen's node)
  3. Epiblast cells migrate toward the streak, invaginate, and displace the hypoblast → form endoderm
  4. Cells invaginating between epiblast and new endoderm form the intraembryonic mesoderm
  5. Remaining surface epiblast cells become ectoderm
Significance:
  • Establishes the three primary germ layers
  • Establishes the embryonic body axes (cranio-caudal, dorso-ventral, left-right)
  • All future organs derive from these three layers

(d) Palate Formation (Palate Teratology)

Primary palate forms from the medial nasal processes (week 5-6); becomes the premaxilla (anterior 1/3 of hard palate and alveolar arch bearing the four incisors).
Secondary palate forms from the palatine shelves (lateral palatine processes) extending horizontally from the maxillary prominences (weeks 7-10):
  • Shelves initially project vertically on either side of the tongue
  • Elevate to horizontal position (due to intrinsic shelf-elevating force + tongue dropping)
  • Shelves fuse with each other in the midline, with the primary palate anteriorly, and the nasal septum superiorly
  • Fusion complete by week 12
Teratology (Cleft Palate):
  • Cleft lip: failure of fusion of maxillary and medial nasal prominences
  • Cleft palate: failure of palatine shelves to fuse
  • Can be unilateral or bilateral
  • Associated with maternal folic acid deficiency, corticosteroid use, phenytoin, alcohol
  • Incidence: ~1/1000 live births

Q3. What are the stages of Spermatogenesis and how does it differ from Oogenesis? [4+3=7 marks]

Stages of Spermatogenesis (4 marks)

StagePloidyKey Events
Spermatogonium (Type A & B)2nMitotic proliferation; Type B → primary spermatocyte
Primary spermatocyte2n (4C)Longest stage; completes meiosis I (takes ~24 days)
Secondary spermatocyten (2C)Short-lived; completes meiosis II rapidly
Spermatidn (1C)Undergoes spermiogenesis - no further division
Spermatozoonn (1C)Mature gamete: head, neck, midpiece, tail
Spermiogenesis (transformation of spermatid to sperm):
  • Golgi phase: pro-acrosomal granules coalesce to form acrosome vesicle
  • Cap phase: acrosome cap spreads over nuclear surface
  • Acrosomal phase: nucleus elongates, flagellum develops, mitochondria arrange in midpiece
  • Maturation phase: excess cytoplasm shed, spermatozoon formed

Differences: Spermatogenesis vs. Oogenesis (3 marks)

FeatureSpermatogenesisOogenesis
OnsetBegins at pubertyBegins in fetal life (5th week)
CompletionContinuous from puberty onwardCompleted only if fertilization occurs
Products4 functional sperms per primary spermatocyte1 functional oocyte + 2-3 polar bodies (non-functional)
Cytoplasmic divisionEqual (4 equal spermatids)Unequal (large oocyte + tiny polar bodies)
Duration of meiosis I~24 daysBegins in fetal life; arrested for up to 45 years
Arrest pointNo arrest; continuousArrested at prophase I (until puberty) then at metaphase II (until fertilization)
LocationSeminiferous tubules (testes)Ovarian follicles
Completion of meiosis IIAlways completedOnly completed upon fertilization
SpermiogenesisRequired (spermatid → sperm)No equivalent

Q4. Explain the process of formation of the Notochord with its significance and fate [2+2+2=6 marks]

Formation (2 marks)

The notochord forms during week 3 (gastrulation):
  1. Epiblast cells migrate through the primitive node cranially in the midline as a cord of cells
  2. They initially form a tube called the notochordal process (hollow), which extends toward the prechordal plate (oropharyngeal membrane)
  3. The notochordal process fuses with the endoderm → notochordal plate (temporarily creates a communication - the neurenteric canal)
  4. The notochordal plate detaches from the endoderm and rolls into a solid rod - the definitive notochord

Significance (2 marks)

  1. Induces neurulation: notochord secretes signaling molecules (Sonic Hedgehog - SHH) that induce overlying ectoderm to form the neural plate
  2. Defines the body axis: forms the central axis around which the vertebral column develops
  3. Organizer function: produces floor plate of the neural tube and dorsal-ventral patterning signals
  4. Somite specification: induces adjacent paraxial mesoderm to form somites
  5. Separation of embryo layers: ensures endoderm and ectoderm separate properly

Fate (2 marks)

  • The vertebral bodies form around the notochord during ossification
  • The notochord at the level of each intervertebral disc persists as the nucleus pulposus (the central gelatinous core of each intervertebral disc)
  • The nucleus pulposus acts as a shock absorber
  • Clinical relevance: Nucleus pulposus herniation (prolapsed intervertebral disc / "slipped disc") causes pressure on spinal nerves → radiculopathy; the notochord can also give rise to chordoma, a rare malignant tumor

Q5. Draw a Labeled Histological Diagram of the Fallopian Tube [5 marks]

Labeled Diagram Description (to draw in exam):
The fallopian tube (uterine tube) has four layers from lumen outward:
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)
Key histological features to label in diagram:
  1. Ciliated columnar epithelial cells (long cilia)
  2. Secretory (peg) cells (intercalated between ciliated cells)
  3. Mucosal folds (plicae) - tallest in ampulla, absent in isthmus
  4. Lamina propria (loose connective tissue)
  5. Inner circular smooth muscle layer
  6. Outer longitudinal smooth muscle layer
  7. Serosa (mesothelium)
Regional variation (important for marks):
  • Infundibulum: widest; finger-like fimbriae; tall folds
  • Ampulla: site of fertilization; most elaborate mucosal folds
  • Isthmus: narrow; few, low folds; thick muscularis
  • Intramural part: within uterine wall; minimal folds

Q6. Describe the Development of Placenta with its Anomalies [3+2=5 marks]

Development of Placenta (3 marks)

Week 2 - Implantation:
  • Syncytiotrophoblast invades decidua; lacunae form and fill with maternal blood → uteroplacental circulation begins
Week 3 - Primary and Secondary Villi:
  • Primary villi: solid cytotrophoblast cores covered by syncytiotrophoblast
  • Secondary villi: mesoderm grows into primary villi core
  • Tertiary villi: fetal blood vessels form within mesoderm core → functional gas exchange begins
Weeks 4-8 - Definitive Placenta:
  • Villi on the embryonic pole proliferate (chorion frondosum = future fetal side)
  • Villi on the abembryonic pole regress (chorion laeve = smooth chorion)
  • Decidua basalis = maternal component (deep to chorion frondosum)
  • Together: chorion frondosum + decidua basalis = placenta
Full Term Placenta:
  • Disc-shaped, 15-20 cm diameter, ~500g
  • Fetal surface: covered by smooth amnion; umbilical cord attaches
  • Maternal surface: 15-20 cotyledons separated by decidual septa
  • Umbilical cord: contains 2 umbilical arteries (deoxygenated blood) + 1 umbilical vein (oxygenated blood), embedded in Wharton's jelly
Functions: Gas exchange, nutrient transfer, waste removal, hormone production (hCG, progesterone, estrogen, hPL), immunological tolerance

Anomalies (2 marks)

AnomalyDescriptionSignificance
Placenta previaPlacenta implants over internal osPainless antepartum hemorrhage; C-section required
Placenta accretaVilli attach directly to myometrium (no decidua basalis)Failure of placental separation; massive PPH
Placenta incretaVilli invade into myometriumSevere PPH
Placenta percretaVilli penetrate through myometrium to serosaLife-threatening; may rupture uterus
Battledore placentaUmbilical cord inserts at placental marginUsually benign; may cause fetal distress
Bipartite/Duplex placentaPlacenta divided into two lobesRisk of retained lobe post-delivery
Circumvallate placentaChorionic plate smaller than basal plate; thick rolled edgeAPH, IUGR
Succenturiate lobeAccessory lobe of placentaRisk of retained lobe

Q7. Write Short Notes on Intraembryonic Mesoderm and its Subdivisions [3+2=5 marks]

Intraembryonic Mesoderm - Formation (3 marks)

Formed during gastrulation (week 3):
  • Epiblast cells migrate through the primitive streak (sides of streak), invaginate, and spread laterally between the ectoderm and endoderm
  • They fill the space on either side of the notochord and neural plate as the intraembryonic mesoderm
  • Prechordal plate (cranial) and cloacal membrane (caudal) remain as bilaminar plates (no mesoderm penetrates)

Subdivisions and Derivatives (2 marks)

Three main regions from medial to lateral:
1. Paraxial Mesoderm (Somitic mesoderm)
  • Forms paired blocks - somites (~42-44 pairs; formed days 20-30)
  • Each somite differentiates into:
    • Sclerotome → vertebrae and ribs
    • Dermomyotome → Myotome (skeletal muscles of back, body wall, limbs) + Dermatome (dermis of skin)
2. Intermediate Mesoderm
  • Connects paraxial and lateral plate mesoderm
  • Forms the urogenital system: kidneys (pronephros, mesonephros, metanephros), gonads, genital ducts (Wolffian/Müllerian ducts)
3. Lateral Plate Mesoderm
  • Splits into two layers with the intraembryonic coelom (body cavity) between them:
    • Somatic (parietal) layer: lines body wall; forms serous membranes parietal layer, bones/CT of limbs
    • Splanchnic (visceral) layer: surrounds gut tube; forms heart, smooth muscle of gut, serous membranes visceral layer, spleen
  • The intraembryonic coelom becomes the pericardial, pleural, and peritoneal cavities
Head mesenchyme: largely from neural crest cells (ectomesenchyme) → facial bones, cartilage, CT, dermis of face

Q8. Describe Paraxial Mesoderm and its Derivatives. What is the Source of its Origin? [marks]

Source of Origin

Paraxial mesoderm arises from epiblast cells that migrate through the sides of the primitive streak during gastrulation (week 3) and come to lie alongside the notochord.

Formation of Somites

  • Paraxial mesoderm condenses into somitomeres (cranialy around brain) and somites (in the trunk)
  • Somites appear from day 20 onward at a rate of ~3 pairs/day (craniocaudal direction)
  • By end of week 5: ~42-44 pairs (8 cervical, 12 thoracic, 5 lumbar, 5 sacral, 8-10 coccygeal)
  • Used clinically to estimate embryonic age

Differentiation of Somites

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

Derivatives Summary

Somite ComponentDerivativeClinical Relevance
SclerotomeVertebral bodies, neural arches, ribs, sternumHemivertebrae, spina bifida
MyotomeAll skeletal muscles of trunk and limbsMuscular dystrophies
DermatomeDermis of back and limbsDermatomal distribution of herpes zoster
Note on Resegmentation: Each vertebra is formed by fusion of the caudal half of one somite with the cranial half of the next - this allows spinal nerves to exit between vertebrae and muscles to bridge vertebral joints.

Paraxial Mesoderm vs. Other Mesodermal Subdivisions

  • Cranial paraxial mesoderm (somitomeres): contributes to muscles of mastication, facial expression, extraocular muscles, and connective tissue of the head
  • Controlled by Wnt, FGF, Notch-Delta signaling pathways that regulate segmentation clock (somitogenesis)

Additional Topics from the Image:

Implantation (brief note)

  • Occurs at day 6-7 post-fertilization in the posterior wall of the uterus (most commonly)
  • Blastocyst attaches via trophoblast cells; syncytiotrophoblast invades decidua
  • Human chorionic gonadotropin (hCG) is secreted from day 8-9, maintains corpus luteum
  • Abnormal implantation: ectopic pregnancy (95% in fallopian tube ampulla) - can cause rupture and hemorrhage

Fertilization (brief note)

  • Occurs in the ampulla of the fallopian tube
  • Capacitation of sperm occurs in female genital tract (~7 hours)
  • Acrosome reaction: sperm penetrates zona pellucida using acrosin (proteolytic enzyme)
  • Cortical reaction: prevents polyspermy by zona reaction
  • Result: zygote (2n); cleavage begins immediately

Monozygotic vs. Dizygotic Twins

FeatureMonozygotic (Identical)Dizygotic (Fraternal)
OriginOne zygote splitsTwo separate ova fertilized
GeneticsGenetically identicalLike ordinary siblings
SexAlways sameCan differ
ChorionicityDichorionic (early split) or monochorionic (late split)Always dichorionic, diamniotic
Frequency~4/1000~8/1000 (varies with race)
ComplicationsTwin-to-twin transfusion syndrome (if monochorionic)Pre-term labour

Sources: The Developing Human: Clinically Oriented Embryology (Moore et al.); Langman's Medical Embryology; Costanzo Physiology 7e

Create a revision study guide PDF summarizing all embryology topics

Reading File
Running Command

mkdir -p /home/daytona/workspace/embryology-guide && ls /home/daytona/workspace/

Writing File

~/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}")
Running Command

cd /home/daytona/workspace/embryology-guide && python make_pdf.py 2>&1

Editing File

~/embryology-guide/make_pdf.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/embryology-guide/make_pdf.py'
Running Command

cd /home/daytona/workspace/embryology-guide && python make_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/embryology-guide/Embryology_Revision_Guide_BDS1.pdf

Your revision guide is ready! Download it here:

Embryology Revision Guide BDS1

PDF Document · PDF


Here's what's packed inside (16 sections, ~20 pages):
SectionContent
Cover + TOCProfessional cover page, full table of contents
1. Gametogenesis OverviewMeiosis I & II, nondisjunction
2. OogenesisDefinition, prenatal/postnatal phases, ovulation
3. SpermatogenesisAll 5 stages, spermiogenesis phases, Sertoli/Leydig cells
4. Comparison TableOogenesis vs. Spermatogenesis (10-point comparison)
5. FertilisationSteps: acrosome reaction, cortical reaction, pronuclei
6. ImplantationCleavage, blastocyst, trophoblast, hCG, ectopic pregnancy
7. GastrulationPrimitive streak, 3 germ layers + derivatives table
8. NotochordFormation, significance (SHH), fate (nucleus pulposus)
9. NeurulationSteps, neuropore dates, NTD types table
10. Intraembryonic MesodermFormation + all 3 subdivisions + derivatives
11. Paraxial MesodermSomites, differentiation, resegmentation
12. PlacentaWeek-by-week development, functions, 7 anomalies table
13. Fallopian Tube HistologyLayers + regional variation table (for diagrams)
14. TwinsMZ vs DZ full comparison including chorionicity timing
15. Palate FormationPrimary + secondary palate, cleft lip/palate teratogens
16. Quick Revision TablesFull timeline, 11 high-yield facts, germ layer summary
This is a shared conversation. Sign in to Orris to start your own chat.