Pathogenesis of gonorrhea in flowchart form (microbiology)
A detailed microbiology flowchart titled "Pathogenesis of Gonorrhea (Neisseria gonorrhoeae)" with a clean clinical/academic style on white background. The flowchart uses color-coded boxes and arrows flowing top to bottom with the following sequential steps and branches: STEP 1 (blue box, top): "Sexual Transmission — N. gonorrhoeae deposited on mucosal surfaces (urethra, cervix, rectum, pharynx, conjunctiva)" Arrow down to: STEP 2 (green box): "INITIAL ATTACHMENT — Pili (fimbriae) mediate attachment to nonciliated columnar epithelial cells. Opa proteins bind CEACAM receptors, heparan sulfate proteoglycans, vitronectin. LOS terminal lactosamine binds asialoglycoprotein receptors on epithelial cells." Arrow down to: STEP 3 (orange box): "INVASION & TRANSCYTOSIS — Porin (PorB) translocates to host cell cytoplasmic membrane → initiates endocytosis. Gonococci transported through epithelial cells to intercellular spaces / subepithelial tissue." Arrow down to: STEP 4 (red box): "IMMUNE EVASION (multiple mechanisms): • LOS sialylation → inhibits complement classical + alternative pathways, reduces phagocyte binding • IgA1 protease cleaves mucosal IgA1 • Molecular mimicry: LOS mimics human glycosphingolipids • Antigenic variation of pili + Opa proteins → evades adaptive immunity • CEACAM-binding Opa → suppresses CD4+ T-cell activation • PorB.1A strains resist serum killing → cause Disseminated Gonococcal Infection (DGI)" Arrow down to: STEP 5 (purple box): "INFLAMMATORY RESPONSE — LOS endotoxin triggers cytokine release (IL-1, IL-6, IL-8, TNF-α). Massive PMN recruitment. Purulent exudate (pus). Ciliary loss + mucosal cell death in fallopian tubes." Two arrows branching left and right from STEP 5: LEFT BRANCH (pink box): "LOCAL COMPLICATIONS (Males): Urethritis → epididymitis → rarely prostatitis" RIGHT BRANCH (salmon box): "LOCAL COMPLICATIONS (Females): Cervicitis → Endometritis → Salpingitis → PID → Ectopic pregnancy / Infertility" Both arrows converge downward to: STEP 6 (dark red box): "DISSEMINATED GONOCOCCAL INFECTION (DGI) — PorB.1A strains: bacteremia → Gonococcal arthritis-dermatitis syndrome (polyarthralgia, tenosynovitis, pustular skin lesions) → Septic arthritis, Perihepatitis (Fitz-Hugh-Curtis syndrome), Endocarditis, Meningitis (rare)" Small side box connected to STEP 2 (grey, right side): "VIRULENCE FACTORS SUMMARY: Pili, Opa (protein II), Porin (Por/protein I), LOS (endotoxin + sialylation), IgA1 protease, Transferrin/lactoferrin-binding proteins (iron scavenging), Rmp (protein III)" Footer note: "Sources: Harrison's Principles of Internal Medicine 22E | Jawetz Medical Microbiology 28E | Sherris Medical Microbiology 8E"

Jawetz 28E: "Outer membrane proteins PilC and Opa aid in attachment and local invasion."
| Mechanism | Effect |
|---|---|
| LOS sialylation | Inhibits classical + alternative complement pathways; reduces phagocyte binding and PMN oxidative burst |
| Molecular mimicry | LOS mimics human glycosphingolipid structure - evades immune recognition |
| IgA1 protease | Cleaves and inactivates secretory IgA1 at mucosal surfaces |
| Antigenic variation | Pili and Opa proteins undergo rapid phase/antigenic variation - defeats adaptive immunity and vaccine development |
| Opa-CEACAM1 | Suppresses CD4+ T lymphocyte activation and proliferation |
| PorB.1A serum resistance | Binds complement inhibitory molecules - enables bacteremia and DGI |
| Factor | Role |
|---|---|
| Pili | Attachment, antigenic variation, genetic competence |
| Opa (Protein II) | Adhesion, invasion, PMN interaction |
| Porin/PorB (Protein I) | Ion channel, endocytosis, serum resistance (1A) |
| LOS | Endotoxin activity, sialylation for immune evasion, molecular mimicry |
| IgA1 protease | Destroys mucosal IgA1 |
| Tbp1/Tbp2, LbpA/LbpB | Iron scavenging from transferrin/lactoferrin in vivo |
| Rmp (Protein III) | Associates with Porin in pore formation |
Tomorrow is my PSM exam and I want to remeber the slide with better understanding but i cant undestand the slide please provide me in easy way to remember
python -m markitdown /home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/"Submersion and immersion.pptx"
cd /home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe && python3 -c " from pptx import Presentation prs = Presentation('Submersion and immersion.pptx') for i, slide in enumerate(prs.slides): print(f'\n=== SLIDE {i+1} ===') for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): print(shape.text) "
pip install --user python-pptx -q && python3 -c " from pptx import Presentation prs = Presentation('/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/Submersion and immersion.pptx') for i, slide in enumerate(prs.slides): print(f'\n=== SLIDE {i+1} ===') for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): print(repr(shape.text)) "
| Submersion | Immersion | |
|---|---|---|
| Body position | Entire body + airway is UNDER water | Body/part of body is in water |
| Airway | Below the surface (blocked) | Still ABOVE surface (open) |
| Simple trick | "Sub" = submarine = fully under | "Im" = dipped in = partially in |
| Danger | High - can't breathe | Lower - can still breathe |
1-line memory: Submersion = airway underwater. Immersion = airway above water.
| Location | Pressure |
|---|---|
| Sea level | 760 mmHg = 1 atmosphere |
| Every 33 feet DOWN (underwater) | Pressure increases by +1 atmosphere |
| So at 33 feet depth | 760 × 2 = 1520 mmHg |
| At 25,000 feet altitude | Can't survive without oxygen equipment |
| At 100,000 feet altitude | Pressure < 10 mmHg |
Mnemonic: "33 = +1" - Every 33 feet deeper = 1 more atmosphere of pressure.
| Step | Action | Key Rule |
|---|---|---|
| 1. REACH | Extend hand/stick/clothing/paddle to victim | Stay on land/boat. Keep body LOW, lean BACK. |
| 2. THROW | Throw floating object or rope | Throw upwind/upcurrent, just OVER victim's head |
| 3. ROW | Get to them in a boat | Use reaching/throwing devices from boat |
| 4. GO | Actually enter the water | ONLY for trained swimmers with a flotation aid |
Rule: Out-of-water assists are ALWAYS safer. "Go" is the LAST resort.
Warning: Secondary drowning - water damage in lungs may appear several DAYS later and can be fatal!
Treatment: Take the person to LOWER altitude immediately!
Classic Exam Line: Workers are fine INSIDE the caisson. Symptoms appear AFTER they come out to normal air!
| Feature | Caisson Disease / Decompression Sickness | Barotrauma |
|---|---|---|
| Cause | Nitrogen bubble formation on DECOMPRESSION (coming up) | Physical tissue injury from PRESSURE CHANGE |
| Mechanism | Gas emboli, nitrogen narcosis | Damage to ears, sinuses, lungs from pressure |
| Affected organs | Joints, muscles, blood vessels, brain | Ears, sinuses, lungs |
| Complications | Bends, air embolism, death | Pneumothorax, pneumomediastinum, pneumoperitoneum |
| Treatment | Recompression then SLOW decompression | Treat the specific injury |
Memory: Caisson = Nitrogen bubbles going OUT. Barotrauma = Tissue damage from pressure.
Haldane's Method (John Scott Haldane): Graduated/staged decompression = come up slowly in stages, don't rush.
This is the Bohr/Haldane effect - CO2 transport is linked to O2 levels.
| Instrument | Key Point |
|---|---|
| Kew Pattern Station Barometer | Most widely used standard barometer |
| Fortin's Barometer | Mercury barometer |
| Aneroid Barometer | No fluid (aneroid = "without fluid"), uses metal box with partial vacuum. Handy - used in planes and mountain climbing |
| Barograph | Modified aneroid, records pressure changes continuously on a graph |
| Fact | Value |
|---|---|
| Atmospheric pressure at sea level | 760 mmHg (1 atm) |
| Pressure increase per 33 feet underwater | +1 atmosphere |
| Normal physiological PEEP | 1-2 cm H₂O |
| Mechanical ventilation PEEP (usual) | 5-10 cm H₂O |
| PEEP in ARDS | 10-20 cm H₂O |
| Threshold for acute mountain sickness | >10,000 feet |
| No survival without O₂ equipment | >25,000 feet |
| Pressure at 100,000 feet altitude | <10 mmHg |
| Barotrauma risk with plateau pressure | >30 cm H₂O |
Tomorrow is my PSM exam and I want to remeber the slide with better understanding but i cant undestand the slide please provide me in easy way to remember and in the easy language
python3 -c " import pdfplumber base = '/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/' files = [ 'EMPORIATRICS part 1 - 4th batch PDF.pdf', 'EMPORIATRICS Part 2- 4th batch.pdf', 'EMPORIATRICS - Part 3 4th batch.pdf', 'EMPORIATRICS Part 4- 4th batch.pdf' ] for fname in files: print(f'\n\n============ {fname} ============') with pdfplumber.open(base + fname) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages[:8]): text = page.extract_text() if text and text.strip(): print(f'--- Page {i+1} ---') print(text[:800]) " 2>&1 | head -300
python3 -c " import pdfplumber base = '/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/' # Extract ALL text from Part 1 fname = 'EMPORIATRICS part 1 - 4th batch PDF.pdf' print(f'===== PART 1 ({fname}) =====') with pdfplumber.open(base + fname) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() if text and text.strip(): print(f'--- P{i+1} ---') print(text[:600]) " 2>&1
python3 -c " import pdfplumber base = '/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/' for fname in ['EMPORIATRICS Part 2- 4th batch.pdf', 'EMPORIATRICS - Part 3 4th batch.pdf', 'EMPORIATRICS Part 4- 4th batch.pdf']: print(f'\n\n========== {fname} ==========') with pdfplumber.open(base + fname) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() if text and text.strip(): print(f'--- P{i+1} ---') print(text[:700]) " 2>&1
First travel clinic: Fairfield Hospital, Melbourne (early-mid 1980s) 2018 data: >1.4 billion international tourists 2024 data: 1.468 billion (back to pre-COVID levels)
In the 1800s, travelers got sick and either died OR recovered before reaching destination. Now, a plane circumnavigates the globe in < 24 hours - SHORTER than the incubation period of almost every infection! So infected people arrive at destinations BEFORE showing symptoms = Pandemics possible (SARS 2003, Ebola 2014, COVID 2020)
| Fact | Value |
|---|---|
| Travelers who get sick during travel | 43-79% |
| Travelers who need hospitalization | <1-3% |
| Most common travel illness | Diarrhea |
| Most common cause of DEATH during travel | Cardiovascular events (50-70%) |
| Injury deaths | ~25% |
| Infectious disease deaths | 2.8-4% |
| Most common vaccine-preventable travel illness | INFLUENZA |
Death causes in travellers memory tip: "Cars And Injuries Kill" = Cardiovascular (50-70%) > Accidents/injuries (25%) > Infectious disease (2.8-4%)
| Feature | Detail |
|---|---|
| Also called | "Tourist diarrhea" |
| Definition | ≥1 (or ≥3) unformed stools per 24 hours while traveling |
| Affects | 20-50% of all travelers |
| Duration | Typically <5 days; most recover in 3-4 days |
| Most common cause | Bacteria (~80%) |
| #1 bacteria | ETEC (E. coli) - EXCEPT in Southeast Asia where Campylobacter is #1 |
| Viral cause | Norovirus (10-20%) |
| Parasitic cause | Giardia (causes prolonged illness) |
| Hospitalization needed | <3% |
| Severity | Meaning | Treatment |
|---|---|---|
| Mild | Not distressing, doesn't affect activities | Loperamide or Bismuth |
| Moderate | Distressing, may interfere with plans | Loperamide + Antibiotics |
| Severe (ALL dysentery = severe) | Incapacitating, can't do anything | Antibiotics (Azithromycin 1st line) + Loperamide |
Boil it, cook it, peel it, or forget it!
| Feature | Detail |
|---|---|
| Cause | Salmonella enterica serotype Typhi |
| IP | 10-14 days |
| Fever pattern | Step-ladder → plateau in 7-10 days (lasts up to 4 weeks if untreated) |
| High-risk areas | South Asia, Africa, Southeast Asia (highest risk) |
| Week | Features |
|---|---|
| 1st week | Malaise, headache, myalgia, fever, cough, constipation, coated tongue, splenomegaly |
| 2nd week | Pea-soup diarrhea, relative bradycardia (slow pulse despite high fever), Rose spots, hepatosplenomegaly, dicrotic pulse |
| 3rd week | Stool culture positive |
| 4th week | Urine culture positive |
Rose spots: Faint, salmon-colored, blanching, maculopapular rash on trunk/chest. 2-3 crops. Salmonella can be cultured from punch biopsy.
| Test | When Positive |
|---|---|
| Blood culture | 1st week (highest sensitivity) |
| Bone marrow culture | 1st week (90% sensitive even after 5 days antibiotics) |
| Widal test | 2nd week |
| Stool culture | 3rd week |
| Urine culture | 4th week |
Memory: "Bloody Bone Widal Stool Urine" = Blood → Bone marrow → Widal → Stool → Urine (1st to 4th week)
| Feature | Detail |
|---|---|
| Cause | Vibrio cholerae O1 (Classical and El Tor variants) |
| IP | Few hours to 5 days (commonly 1-2 days) |
| Transmission | Contaminated water (mainly) |
| Global pandemics | 7 pandemics since 1817 |
| Famous outbreak | Haiti 2010 earthquake (brought by UN peacekeepers from Asia) |
| Blood group most affected | O (highest risk); AB (lowest risk) |
| Stage | What Happens |
|---|---|
| Stage of Evacuation | Profuse, painless, watery diarrhea (up to 40 times!); Rice-water stool; vomiting |
| Stage of Collapse | Dehydration: sunken eyes, hollow cheeks, no pulse, unrecordable BP, oliguria/anuria, leg cramps |
| Stage of Recovery | Mild = recovery 1-3 days. Severe (5-10%) = death |
"Darting motility" (shooting star motility) in Hanging Drop preparation
| Feature | Detail |
|---|---|
| Transmission | Fecal-oral (contaminated food/water) |
| IP | 15-45 days (mean 30 days) |
| Period of infectivity | 2 weeks before to 1 week after onset of jaundice |
| Chronic carrier state | NONE |
| No. 1 travel illness (vaccine-preventable) | Influenza > Typhoid & Hep A |
Think of it like this: The CLEANER your country was growing up, the MORE dangerous Hep A is for you as an adult traveler!
| Feature | Detail |
|---|---|
| IP | 30-180 days (usually 60-90 days; median 100 days) |
| Chronic carriers worldwide | 300+ million (>350 million by some estimates) |
| High prevalence (>8%) | N. Canada, South-East Asia, Africa |
| Intermediate (2-5%) | N. Africa, E. Europe, Nepal and India |
| Low (<2%) | Europe, US, Canada, Australia |
| Virus survival on surfaces | ≥7 days in dried blood |
| Feature | Detail |
|---|---|
| Species | P. falciparum, P. vivax, P. ovale, P. malariae, P. knowlesi (5 species) |
| Vector | Anopheles mosquito (bites dusk to dawn) |
| Most dangerous | P. falciparum (cerebral malaria, severe) |
| Fever pattern | P. vivax/ovale = every 2 days (tertian); P. malariae = every 3 days (quartan); P. falciparum = every 36-48 hours |
| "Leading cause of..." | Life-threatening infections in travelers |
Golden rule: "Fever in a returned traveler = MALARIA until proven otherwise!"
In pregnancy: Only Mefloquine and Chloroquine approved
| Feature | Detail |
|---|---|
| Virus | Single-stranded RNA Flavivirus |
| Vectors | Aedes (urban YF) and Haemogogus (jungle/sylvatic YF in forests of Central/South America) |
| Endemic areas | Sub-Saharan Africa and Tropical South America |
| IP | 3-6 days |
| Feature | Aedes (e.g., aegypti) | Haemogogus (e.g., Janthinomys) |
|---|---|---|
| Habitat | Urban/domestic, near humans | Forest canopy, jungle |
| Appearance | Black & white stripes, lyre-shaped thorax marking | Metallic dark blue/green |
| Diseases | Urban YF, Dengue, Zika, Chikungunya | Jungle (Sylvatic) YF |
| Prefers | Humans | Monkeys in canopy |
| Fact | Detail |
|---|---|
| Type | Live attenuated viral vaccine |
| Dose | 0.5 mL subcutaneous |
| Age | ≥ 9 months |
| Valid for entry from | 10 days after vaccination |
| Duration of protection | LIFETIME (single dose) |
| Old rule (removed) | 10-year booster - removed by WHO in 2016 |
| Document | ICVP = "Yellow Card" |
| Feature | Detail |
|---|---|
| Agent | N. meningitidis |
| Endemic area | African Meningitis Belt (Senegal to Ethiopia, 26 countries, Sub-Saharan Africa) |
| Dry season risk | December to June |
| Transmission | Respiratory droplets (coughing, sneezing) |
| Mortality | 10-20% generally; 10% with treatment |
| Feature | Detail |
|---|---|
| Cause | Influenza A, B, C viruses |
| Most dangerous for humans | A and B (cause seasonal epidemics) |
| Influenza C | Mild infection, mainly children |
| IP | 1-4 days |
| Duration | 2-8 days |
| Most common vaccine-preventable travel illness | INFLUENZA (number 1!) |
| Year | Name |
|---|---|
| 1918-1920 | Spanish flu (most severe) |
| 1957 | Asian flu |
| 1968 | Hong Kong flu |
| 1977 | Russian flu |
| 2009 | Swine flu |
Note: 5 pandemics since 1900 | Occurs every 10-50 years
Pre-exposure immunization for high-risk travelers (field biologists, cavers, remote area workers) Important: Even with pre-exposure vaccination → still need urgent booster doses after exposure
| Letter | Category | Key Advice |
|---|---|---|
| A | Awareness | Research destination safety, avoid high-crime areas, register with embassy |
| B | Bites & Bugs | EPA-approved insect repellent, protective clothing, treated bed nets |
| C | Conveyances | Avoid motorbikes, always wear seatbelt, avoid night rural driving |
| D | Diet & Activity | Use guides for adventure sports, acclimatize for altitude, avoid alcohol/drugs |
| E | Essentials | Carry first-aid kit, copy passport, save emergency numbers |
#1 killer of healthy travelers = Motor vehicle accidents (Road traffic injuries) - This is the highest-yield intervention!
| Activity | Risk |
|---|---|
| Freshwater bodies (lakes, rivers) | Leptospirosis, Schistosomiasis |
| African Rift Valley lakes (Lake Malawi), Nile rafting | Schistosomiasis |
| Walking barefoot in tropics | Strongyloides, Hookworm, Snakebites |
| Tattooing/acupuncture in unhygienic settings | HIV, Hepatitis B and C |
| Casual sex | STIs (very high risk without barrier protection) |
Done at: 4-6 weeks before travel (Cornerstone of travel medicine!) May need multiple visits
"THIS PERSON, THIS TRIP, THIS TIME"
| Component | What to Check |
|---|---|
| TRAVELER | Medical conditions, allergies, medications, vaccine history |
| TRIP | Reason, style, rural vs urban, activities, accommodation, budget |
| TIME | Duration, season, frequency |
| Population | Main Risks | Key Strategy |
|---|---|---|
| VFR (Visiting Friends & Relatives) | Adopt local food/accommodation habits; skip vaccines | Prioritize highest-risk vaccines; ask during routine visits |
| Budget travelers | Skip pre-travel advice due to cost; risky transport (motorbike taxis) | Educate about high-risk activities |
| Last-minute travelers | No time for vaccines | Single-dose vaccines; some prophylaxis starts 1 day before |
| Long-term travelers | Prolonged exposure, adopt local habits | Hep B, rabies, typhoid, JE vaccines; long-term malaria prophylaxis |
| HCWs on medical missions | Bloodborne infections, limited PPE | Ensure vaccinations; access to HIV PEP |
| Medical tourists | Nosocomial infections, substandard care, VTE after surgery | Use internationally accredited facilities; copy medical records |
| Threat | What Happens | Risk |
|---|---|---|
| Hypobaric Hypoxia | Cabin = altitude 6000-8000 ft → lower O2 | Angina, hypoxia |
| Immobility | Blood pools in legs | DVT/PE |
| Gas Expansion | Trapped gas expands up to 30% | Pneumothorax risk; COPD bullae rupture |
| CD4 count | Vaccine recommendation |
|---|---|
| >500 cells/μL | Risk similar to normal travelers |
| >200 cells/μL for ≥6 months | Live MMR and varicella can be given |
| HIV-infected (any) | Do NOT give oral live typhoid or live attenuated influenza (use inactivated versions instead) |
| Disease | IP | Key Feature | Treatment | Prevention |
|---|---|---|---|---|
| Travelers' Diarrhea | Hours-days | ETEC (#1 bacteria) | ORS + Azithromycin (severe) | Food/water precautions |
| Typhoid | 10-14 days | Step-ladder fever, Rose spots, Relative bradycardia | Antibiotics | Vi or Oral vaccine |
| Cholera | 1-2 days | Rice-water stool, Darting motility | ORS/IV RL + Azithromycin | Oral vaccines (Dukoral etc.) |
| Hep A | 15-45 days (mean 30) | Fecal-oral, No chronic carrier | Supportive | Vaccine |
| Hep B | 60-90 days (median 100) | Blood/sexual/perinatal | Hep B vaccine, HBIg PEP within 6-48hrs | Vaccine |
| Malaria | 10-15 days | Cyclical fever, P.falciparum = most severe | Antimalarials | Chemoprophylaxis + DEET |
| Yellow Fever | 3-6 days | Hemorrhage, Jaundice, CFR 30-60% | Supportive (no aspirin!) | Live vaccine (lifelong!) |
| Meningococcal | Days | Neck rigidity, Petechiae | Antibiotics | Conjugate vaccine |
| Influenza | 1-4 days | #1 vaccine-preventable travel illness | Oseltamivir (severe) | Annual vaccine |
| Rabies | Weeks-months | Always fatal if no PEP | RIG + ARV after exposure | Pre-exposure vaccine |
What are the National nutritional program in nepal ? PSM question , Provide me answer in easy way tomorrow is my exam
National Nutritional Programs Nepal PSM community medicine list
Nepal national nutrition program MSNP vitamin A iodine iron folate supplementation
https://www.slideshare.net/slideshow/national-nutrition-prog…
Nepal national nutrition programs list "Vitamin A" "Iron Folic Acid" "iodine" "deworming" "MSNP" PSM exam
| Problem | Simple Meaning |
|---|---|
| Protein-Energy Malnutrition (PEM) | Not enough food → stunting, wasting, underweight |
| Iron Deficiency Anemia (IDA) | Not enough iron → weak blood, pale children/mothers |
| Iodine Deficiency Disorders (IDD) | Not enough iodine → goitre, intellectual disability |
| Vitamin A Deficiency (VAD) | Not enough Vit A → night blindness, child deaths |
| Zinc Deficiency | Poor immunity, diarrhea, stunting |
Think of MSNP as the umbrella that covers ALL nutrition programs in Nepal.
| Version | Period |
|---|---|
| MSNP I | 2013-2017 |
| MSNP II | 2018-2022 |
| MSNP III (Current) | 2023-2030 |
| Feature | Detail |
|---|---|
| Target group | Children 6-59 months |
| Frequency | Twice a year (Biannual) - every 6 months |
| Dose 6-11 months | 1 lakh IU (100,000 IU) - Blue capsule |
| Dose 12-59 months | 2 lakh IU (200,000 IU) - Red capsule |
| For mothers | 1 lakh IU within 45 days postpartum |
| Delivery system | FCHVs (Female Community Health Volunteers) |
| Coverage target | >80% |
| Impact | 26-30% reduction in child mortality! |
Memory: "6 months = 1 lakh (blue baby capsule), 1 year+ = 2 lakh (red capsule)"
| Target Group | What They Get | Duration |
|---|---|---|
| Pregnant women | 180 IFA tablets (1 tablet/day) | Throughout pregnancy |
| Postpartum mothers | 45 days IFA after delivery | 45 days |
| Adolescent girls (Grade 6-10) | Weekly IFA tablet (1 per week) | School year |
| Women of Reproductive Age (WRA) | IFA tablets | As needed |
Key achievement: IFA intake in pregnant women went from 6% → 71% thanks to this program!
Impact: Reduced neonatal mortality, low birth weight, stunting, and maternal anemia.
| Feature | Detail |
|---|---|
| Main strategy | Universal Salt Iodization (USI) |
| Target | Every household uses adequately iodized salt |
| Achievement | Households using iodized salt: 55% (1998) → 90.7% (2016) |
| Who monitors | Government + WHO + UNICEF |
Simple rule: "Every packet of salt sold in Nepal must contain iodine." Impact: Iodine deficiency disorders largely eliminated in Nepal!
| Feature | Detail |
|---|---|
| Target | Children under 5 years with diarrhea |
| What is given | Zinc tablets + ORS together |
| Effect of Zinc | Reduces duration and severity of diarrhea |
| Who delivers | Health facilities + FCHVs |
Why? About 1/3 of Nepali pregnant women and children have worms (especially hookworms). Worms cause anemia and malnutrition.
| Target Group | Drug | Dose | Frequency |
|---|---|---|---|
| Children 12-59 months | Albendazole 400 mg | 1 tablet | Biannual (every 6 months) |
| Pregnant women (2nd trimester) | Albendazole 400 mg | 1 tablet | Once during pregnancy |
| School children (all districts) | Albendazole 400 mg | 1 tablet | Biannual |
WHO rule: If >20% of population has worms → provide biannual deworming Nepal qualifies → hence biannual deworming is done.
| Term | Full Form | Meaning |
|---|---|---|
| SAM | Severe Acute Malnutrition | MUAC < 11.5 cm or WHZ < -3 |
| MAM | Moderate Acute Malnutrition | MUAC 11.5-12.5 cm |
| CMAM | Community-based Management of Acute Malnutrition | Treatment in community |
| IMAM | Integrated Management of Acute Malnutrition | At facility level |
| Feature | Detail |
|---|---|
| Treatment for uncomplicated SAM | RUTF (Ready-to-Use Therapeutic Food) = "Plumpy Nut" |
| Treatment for complicated SAM | Hospital admission + F75/F100 milk |
| Delivered by | FCHVs + health posts |
| Recommendation | Detail |
|---|---|
| Early initiation of breastfeeding | Within 1 hour of birth |
| Exclusive breastfeeding (EBF) | For first 6 months - NO water, NO other food |
| Complementary feeding | Start at 6 months along with continued breastfeeding |
Continue breastfeeding up to 2 years and beyond.
| Feature | Detail |
|---|---|
| Product name | "Baal Vita" (Nepal's brand name) |
| Target group | Children 6-23 months |
| Contains | Iron, Zinc, Vitamin A, C, D, Folic acid + other micronutrients |
| How to use | Sprinkle 1 sachet on food once a day |
| Current coverage | 16+ districts (expanded from pilot) |
| Services | Who Gets It |
|---|---|
| Biannual deworming | All school children |
| IFA tablets (weekly) | Adolescent girls, Grade 6-10 |
| Vitamin A (as needed) | School children |
| Health screening (weight, height, vision) | All children |
| First Aid kits at schools | All schools |
| Food | Nutrient Added |
|---|---|
| Salt | Iodine (Universal Salt Iodization) |
| Wheat flour / Rice | Iron + Folic acid |
| Cooking oil | Vitamin A |
| Organization | Role |
|---|---|
| MoHP (Ministry of Health & Population) | Lead ministry |
| National Planning Commission | Plans MSNP |
| FCHVs (Female Community Health Volunteers) | On-ground delivery to every village |
| UNICEF | Technical + financial support |
| USAID / Suaahara II | 41 districts support |
| WFP | Nutrition projects |
| FAO | Agriculture + food security (19 districts) |
| Project | Coverage |
|---|---|
| SUAAHARA II (USAID) | 41 districts |
| MSNP III (UNICEF) | Nationwide |
| Sunaula Hajar Din ("Golden First 1000 Days") | 15 districts |
| FAO Agricultural and Food Security Project | 19 districts |
"Sunaula Hajar Din" = Golden First 1000 Days Program - focuses on the first 1000 days of life (pregnancy + first 2 years) which is the most critical window for nutrition.
| Indicator | Before | After |
|---|---|---|
| Iodized salt use | 55% (1998) | 90.7% (2016) |
| Vitamin A deficiency | 32.3% (1998) | 12.5% (2016) = halved! |
| IFA intake in pregnant women | 6% | 71% |
| Childhood mortality | Reduced by 26-30% due to Vit A program |
| Program | Target | Key Drug/Item | Frequency |
|---|---|---|---|
| Vitamin A supplementation | 6-59 months children + postpartum mothers | Vit A capsule | Biannual |
| IFA - Pregnant women | Pregnant women | 180 IFA tablets | Throughout pregnancy |
| IFA - Adolescent girls | Girls Grade 6-10 | IFA tablet | Weekly |
| IFA - Postpartum | Nursing mothers | IFA tablet | 45 days |
| Deworming | 12-59 months children + pregnant women | Albendazole 400 mg | Biannual |
| Iodine program | All households | Iodized salt | Ongoing |
| Baal Vita (MNP) | 6-23 months | Micronutrient sachet | Daily |
| IYCF | 0-2 year children + mothers | Breastfeeding promotion | Ongoing |
| SAM management | Malnourished children | RUTF (Plumpy Nut) | As needed |
| School nutrition | School children | IFA + Deworming | Biannual/Weekly |
Make a summary PDF of nutrition programs for quick revision
ls /home/daytona/workspace/ && python3 -c "import reportlab; print('reportlab ok')" && python3 -c "from reportlab.lib.pagesizes import A4; print('A4 ok')"
mkdir -p /home/daytona/workspace/nutrition-pdf && cat > /home/daytona/workspace/nutrition-pdf/make_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import PageBreak # ── colour palette ────────────────────────────────────────────────────────── NAVY = colors.HexColor('#1a2e4a') TEAL = colors.HexColor('#0d7377') ORANGE = colors.HexColor('#e8832a') YELLOW = colors.HexColor('#f5c842') GREEN = colors.HexColor('#2e7d32') RED = colors.HexColor('#c62828') LBLUE = colors.HexColor('#e3f2fd') LGREEN = colors.HexColor('#e8f5e9') LORANGE = colors.HexColor('#fff3e0') LGREY = colors.HexColor('#f5f5f5') LRED = colors.HexColor('#ffebee') WHITE = colors.white DGREY = colors.HexColor('#424242') W, H = A4 MARGIN = 1.5 * cm doc = SimpleDocTemplate( '/home/daytona/workspace/nutrition-pdf/Nepal_Nutrition_Programs.pdf', pagesize=A4, leftMargin=MARGIN, rightMargin=MARGIN, topMargin=1.2*cm, bottomMargin=1.2*cm ) styles = getSampleStyleSheet() def sty(name, **kw): return ParagraphStyle(name, **kw) title_sty = sty('Title2', fontSize=20, textColor=WHITE, alignment=TA_CENTER, fontName='Helvetica-Bold', leading=26) sub_sty = sty('Sub', fontSize=11, textColor=YELLOW, alignment=TA_CENTER, fontName='Helvetica', leading=15) h1_sty = sty('H1', fontSize=13, textColor=WHITE, fontName='Helvetica-Bold', leading=17, leftIndent=4) h2_sty = sty('H2', fontSize=10.5, textColor=NAVY, fontName='Helvetica-Bold', leading=14, leftIndent=2) body_sty = sty('Body2', fontSize=9, textColor=DGREY, fontName='Helvetica', leading=13, leftIndent=6) bullet_sty = sty('Bullet', fontSize=9, textColor=DGREY, fontName='Helvetica', leading=13, leftIndent=14, bulletIndent=6, bulletText='\u2022') note_sty = sty('Note', fontSize=8.5, textColor=GREEN, fontName='Helvetica-BoldOblique', leading=12, leftIndent=6) mnem_sty = sty('Mnem', fontSize=9.5, textColor=RED, fontName='Helvetica-Bold', leading=13, alignment=TA_CENTER) cell_hd_sty = sty('CellHd', fontSize=9, textColor=WHITE, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER) cell_sty = sty('Cell', fontSize=8.5, textColor=DGREY, fontName='Helvetica', leading=12, alignment=TA_CENTER) cell_l_sty = sty('CellL', fontSize=8.5, textColor=DGREY, fontName='Helvetica', leading=12, alignment=TA_LEFT) small_sty = sty('Small', fontSize=8, textColor=DGREY, fontName='Helvetica', leading=11, alignment=TA_CENTER) pg_hd_sty = sty('PgHd', fontSize=8, textColor=TEAL, fontName='Helvetica-Bold', leading=10, alignment=TA_CENTER) # ── helper: coloured section banner ───────────────────────────────────────── def banner(text, bg=NAVY, fg=WHITE, fs=13): t = Table([[Paragraph(text, sty('b', fontSize=fs, textColor=fg, fontName='Helvetica-Bold', leading=fs+4, alignment=TA_CENTER))]], colWidths=[W - 2*MARGIN]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('ROUNDEDCORNERS', [4]), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 8), ])) return t def sp(h=4): return Spacer(1, h) def hr(c=TEAL, t=0.7): return HRFlowable(width='100%', thickness=t, color=c) def tbl(data, col_widths, header_bg=TEAL, alt=True, fontsize=8.5): ts = [ ('BACKGROUND', (0,0), (-1,0), header_bg), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), fontsize), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING',(0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 5), ('RIGHTPADDING', (0,0), (-1,-1), 5), ('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#b0bec5')), ('ROWBACKGROUNDS',(0,1),(-1,-1), [WHITE, LGREY] if alt else [WHITE]), ] t = Table(data, colWidths=col_widths) t.setStyle(TableStyle(ts)) return t def info_box(text, bg=LBLUE, border=TEAL): t = Table([[Paragraph(text, sty('ib', fontSize=9, textColor=NAVY, fontName='Helvetica', leading=13, alignment=TA_LEFT))]], colWidths=[W - 2*MARGIN]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING',(0,0), (-1,-1), 6), ('LINEAFTER', (0,0), (0,-1), 3, border), ('LINEBEFORE', (0,0), (0,-1), 3, border), ])) return t def mnem_box(text, bg=LRED): t = Table([[Paragraph(text, sty('mn', fontSize=10, textColor=RED, fontName='Helvetica-Bold', leading=14, alignment=TA_CENTER))]], colWidths=[W - 2*MARGIN]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING',(0,0), (-1,-1), 7), ('BOX', (0,0), (-1,-1), 1, RED), ('ROUNDEDCORNERS', [4]), ])) return t # ════════════════════════════════════════════════════════════════════════════ # BUILD STORY # ════════════════════════════════════════════════════════════════════════════ story = [] # ── COVER ─────────────────────────────────────────────────────────────────── cover = Table([ [Paragraph('🇳🇵 National Nutritional Programs', title_sty)], [Paragraph('of Nepal', title_sty)], [sp(6)], [Paragraph('PSM Quick-Revision Summary', sub_sty)], [Paragraph('For Medical / BPH Examinations', sub_sty)], [sp(10)], [Paragraph('Prepared for Exam Revision • June 2026', sty('cov',fontSize=9, textColor=colors.HexColor('#b0bec5'), alignment=TA_CENTER, fontName='Helvetica', leading=12))], ], colWidths=[W - 2*MARGIN]) cover.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), NAVY), ('TOPPADDING', (0,0), (-1,-1), 14), ('BOTTOMPADDING',(0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 10), ])) story += [cover, sp(10)] # ── WHY DO THESE PROGRAMS EXIST? ──────────────────────────────────────────── story += [banner('WHY DO THESE PROGRAMS EXIST?', bg=TEAL), sp(4)] prob_data = [ [Paragraph('Problem', cell_hd_sty), Paragraph('Simple Meaning', cell_hd_sty), Paragraph('Consequence', cell_hd_sty)], [Paragraph('Protein-Energy Malnutrition (PEM)', cell_l_sty), Paragraph('Not enough food/protein', cell_l_sty), Paragraph('Stunting, wasting, underweight', cell_l_sty)], [Paragraph('Iron Deficiency Anaemia (IDA)', cell_l_sty), Paragraph('Not enough iron', cell_l_sty), Paragraph('Weak blood, maternal/child deaths', cell_l_sty)], [Paragraph('Iodine Deficiency Disorder (IDD)', cell_l_sty), Paragraph('Not enough iodine', cell_l_sty), Paragraph('Goitre, intellectual disability', cell_l_sty)], [Paragraph('Vitamin A Deficiency (VAD)', cell_l_sty), Paragraph('Not enough Vitamin A', cell_l_sty), Paragraph('Night blindness, child deaths', cell_l_sty)], [Paragraph('Zinc Deficiency', cell_l_sty), Paragraph('Not enough zinc', cell_l_sty), Paragraph('Poor immunity, diarrhoea, stunting', cell_l_sty)], ] story += [tbl(prob_data, [5.5*cm, 5.5*cm, 6.5*cm]), sp(8)] # ── MSNP BOX ──────────────────────────────────────────────────────────────── story += [banner('MASTER PLAN: MULTI-SECTOR NUTRITION PLAN (MSNP)', bg=ORANGE), sp(4)] msnp_data = [ [Paragraph('Version', cell_hd_sty), Paragraph('Period', cell_hd_sty), Paragraph('Status', cell_hd_sty)], [Paragraph('MSNP I', cell_sty), Paragraph('2013 – 2017', cell_sty), Paragraph('Completed', cell_sty)], [Paragraph('MSNP II', cell_sty), Paragraph('2018 – 2022', cell_sty), Paragraph('Completed', cell_sty)], [Paragraph('MSNP III ★', sty('ms3', fontSize=9, textColor=RED, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)), Paragraph('2023 – 2030', cell_sty), Paragraph('CURRENT', sty('cur', fontSize=9, textColor=GREEN, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER))], ] story += [tbl(msnp_data, [5*cm, 6*cm, 6.5*cm], header_bg=ORANGE), sp(4)] story += [info_box('<b>6 Sectors under MSNP:</b> Health | Education | WASH | ' 'Agriculture & Livestock | Local Governance | Women, Children & Social Welfare', bg=LORANGE, border=ORANGE), sp(10)] # ── MNEMONIC ──────────────────────────────────────────────────────────────── story += [mnem_box('MEMORY TRICK → "V I V A I B D S"' '\nVitamin A | IFA | Vitamin D/Iron | Anaemia | ' 'IYCF | Baal Vita | Deworming | SAM Management'), sp(10)] story.append(PageBreak()) # ════ PAGE 2 ════════════════════════════════════════════════════════════════ story += [banner('1. VITAMIN A SUPPLEMENTATION PROGRAM', bg=colors.HexColor('#e65100')), sp(5)] va_data = [ [Paragraph('Group', cell_hd_sty), Paragraph('Age', cell_hd_sty), Paragraph('Dose', cell_hd_sty), Paragraph('Colour', cell_hd_sty), Paragraph('Frequency', cell_hd_sty)], [Paragraph('Infants', cell_l_sty), Paragraph('6 – 11 months', cell_sty), Paragraph('1,00,000 IU', cell_sty), Paragraph('BLUE capsule', sty('bl',fontSize=8.5,textColor=colors.blue, fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('Biannual', cell_sty)], [Paragraph('Children', cell_l_sty), Paragraph('12 – 59 months', cell_sty), Paragraph('2,00,000 IU', cell_sty), Paragraph('RED capsule', sty('rd',fontSize=8.5,textColor=colors.red, fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('Biannual', cell_sty)], [Paragraph('Postpartum Mothers', cell_l_sty), Paragraph('Within 45 days of delivery', cell_sty), Paragraph('1,00,000 IU', cell_sty), Paragraph('Blue capsule', cell_sty), Paragraph('Once after delivery', cell_sty)], ] story += [tbl(va_data, [3.5*cm, 3.5*cm, 3*cm, 3*cm, 4.5*cm]), sp(4)] story += [info_box('✔ Coverage target: <b>>80%</b> | ' '✔ Delivered by: <b>FCHVs</b> | ' '✔ Impact: <b>26–30% reduction in child mortality</b>', bg=LORANGE, border=ORANGE), sp(10)] story += [banner('2. IRON FOLIC ACID (IFA) SUPPLEMENTATION', bg=RED), sp(5)] ifa_data = [ [Paragraph('Target Group', cell_hd_sty), Paragraph('Tablets / Dose', cell_hd_sty), Paragraph('Duration', cell_hd_sty), Paragraph('Key Fact', cell_hd_sty)], [Paragraph('Pregnant Women', cell_l_sty), Paragraph('180 IFA tablets (1/day)', cell_sty), Paragraph('Throughout pregnancy', cell_sty), Paragraph('Coverage: 6% → 71%', sty('g',fontSize=8.5,textColor=GREEN, fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))], [Paragraph('Postpartum Mothers', cell_l_sty), Paragraph('1 tablet/day', cell_sty), Paragraph('45 days', cell_sty), Paragraph('Reduces maternal anaemia', cell_sty)], [Paragraph('Adolescent Girls (Gr. 6–10)', cell_l_sty), Paragraph('1 tablet/WEEK', cell_sty), Paragraph('Throughout school year', cell_sty), Paragraph('School Health Programme', cell_sty)], [Paragraph('Women of Reproductive Age', cell_l_sty), Paragraph('As prescribed', cell_sty), Paragraph('Ongoing', cell_sty), Paragraph('Prevents IDA', cell_sty)], ] story += [tbl(ifa_data, [4.5*cm, 4*cm, 4*cm, 5*cm]), sp(4)] story += [info_box('<b>180 tablets</b> = 6 months supply for pregnant women | ' 'Impact: ↓ Neonatal mortality, ↓ Low birth weight, ↓ Stunting, ↓ Maternal anaemia', bg=LRED, border=RED), sp(10)] story += [banner('3. IODINE DEFICIENCY DISORDER CONTROL (UNIVERSAL SALT IODIZATION)', bg=TEAL), sp(5)] story += [info_box('<b>Strategy:</b> Every packet of salt sold in Nepal must contain iodine (Universal Salt Iodization – USI)<br/>' '<b>Achievement:</b> Households using iodized salt: <b>55% (1998) → 90.7% (2016)</b><br/>' '<b>Result:</b> Iodine deficiency disorders largely ELIMINATED in Nepal!<br/>' '<b>Monitored by:</b> Government of Nepal + WHO + UNICEF'), sp(10)] story += [banner('4. DEWORMING PROGRAM', bg=GREEN), sp(5)] dw_data = [ [Paragraph('Target Group', cell_hd_sty), Paragraph('Drug', cell_hd_sty), Paragraph('Dose', cell_hd_sty), Paragraph('Frequency', cell_hd_sty)], [Paragraph('Children 12–59 months', cell_l_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg (1 tablet)', cell_sty), Paragraph('BIANNUAL', sty('bi',fontSize=9,textColor=GREEN,fontName='Helvetica-Bold', leading=12,alignment=TA_CENTER))], [Paragraph('School children (all districts)', cell_l_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg', cell_sty), Paragraph('BIANNUAL', sty('bi2',fontSize=9,textColor=GREEN,fontName='Helvetica-Bold', leading=12,alignment=TA_CENTER))], [Paragraph('Pregnant women (2nd trimester)', cell_l_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg', cell_sty), Paragraph('Once during pregnancy', cell_sty)], ] story += [tbl(dw_data, [5.5*cm, 4*cm, 4*cm, 4*cm]), sp(4)] story += [info_box('<b>WHO rule:</b> If >20% of population has worms → provide biannual deworming. ' 'Nepal qualifies (1/3 of pregnant women & children have worms – esp. hookworms).', bg=LGREEN, border=GREEN), sp(10)] story.append(PageBreak()) # ════ PAGE 3 ════════════════════════════════════════════════════════════════ story += [banner('5. ZINC + ORS PROGRAM (Diarrhoea Management)', bg=TEAL), sp(5)] story += [info_box('<b>Target:</b> Children under 5 years with diarrhoea<br/>' '<b>Treatment:</b> Zinc tablets + ORS given TOGETHER<br/>' '<b>Effect of Zinc:</b> Reduces duration and severity of diarrhoea<br/>' '<b>Delivered by:</b> Health facilities + FCHVs'), sp(10)] story += [banner('6. MANAGEMENT OF SEVERE ACUTE MALNUTRITION (SAM) – CMAM / IMAM', bg=colors.HexColor('#6a1b9a')), sp(5)] sam_data = [ [Paragraph('Term', cell_hd_sty), Paragraph('Full Form', cell_hd_sty), Paragraph('Criteria', cell_hd_sty), Paragraph('Treatment', cell_hd_sty)], [Paragraph('SAM', cell_sty), Paragraph('Severe Acute Malnutrition', cell_l_sty), Paragraph('MUAC <11.5 cm OR WHZ <-3', cell_sty), Paragraph('RUTF (Plumpy Nut)', sty('pn',fontSize=8.5,textColor=colors.HexColor('#6a1b9a'), fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))], [Paragraph('MAM', cell_sty), Paragraph('Moderate Acute Malnutrition', cell_l_sty), Paragraph('MUAC 11.5–12.5 cm', cell_sty), Paragraph('Supplementary feeding', cell_sty)], [Paragraph('CMAM', cell_sty), Paragraph('Community-based Mgmt of AM', cell_l_sty), Paragraph('In community setting', cell_sty), Paragraph('Outpatient RUTF', cell_sty)], [Paragraph('IMAM', cell_sty), Paragraph('Integrated Mgmt of AM', cell_l_sty), Paragraph('At facility level', cell_sty), Paragraph('F75 / F100 milk + hospital', cell_sty)], ] story += [tbl(sam_data, [2.5*cm, 5*cm, 4.5*cm, 5.5*cm], header_bg=colors.HexColor('#6a1b9a')), sp(10)] story += [banner('7. INFANT AND YOUNG CHILD FEEDING (IYCF) PROGRAM', bg=colors.HexColor('#00695c')), sp(5)] iycf_data = [ [Paragraph('Recommendation', cell_hd_sty), Paragraph('Detail', cell_hd_sty), Paragraph('Key Rule', cell_hd_sty)], [Paragraph('Early Initiation of Breastfeeding', cell_l_sty), Paragraph('Start breastfeeding within 1 HOUR of birth', cell_l_sty), Paragraph('"Golden Hour"', sty('gh',fontSize=8.5,textColor=ORANGE, fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))], [Paragraph('Exclusive Breastfeeding (EBF)', cell_l_sty), Paragraph('ONLY breast milk for first 6 months', cell_l_sty), Paragraph('NO water, NO other food', sty('no',fontSize=8.5,textColor=RED, fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))], [Paragraph('Complementary Feeding', cell_l_sty), Paragraph('Start semi-solid food at exactly 6 months', cell_l_sty), Paragraph('Continue BF up to 2 years+', cell_sty)], ] story += [tbl(iycf_data, [5*cm, 6*cm, 6.5*cm], header_bg=colors.HexColor('#00695c')), sp(10)] story += [banner('8. MULTIPLE MICRONUTRIENT POWDER (MNP) – "BAAL VITA"', bg=colors.HexColor('#1565c0')), sp(5)] story += [info_box('<b>Product Name:</b> "Baal Vita" (Nepal\'s brand name)<br/>' '<b>Target Group:</b> Children <b>6 – 23 months</b><br/>' '<b>Contains:</b> Iron, Zinc, Vitamin A, Vitamin C, Vitamin D, Folic Acid + other micronutrients<br/>' '<b>How to use:</b> Sprinkle 1 sachet on soft food once daily<br/>' '<b>Coverage:</b> Expanded to 16+ districts after pilot', bg=LBLUE, border=colors.HexColor('#1565c0')), sp(10)] story += [banner('9. SCHOOL HEALTH AND NUTRITION PROGRAM (SHNP)', bg=colors.HexColor('#4a148c')), sp(5)] shnp_data = [ [Paragraph('Service', cell_hd_sty), Paragraph('Target', cell_hd_sty), Paragraph('Frequency', cell_hd_sty)], [Paragraph('Biannual deworming', cell_l_sty), Paragraph('All school children (75 districts)', cell_l_sty), Paragraph('Every 6 months', cell_sty)], [Paragraph('IFA tablet (weekly)', cell_l_sty), Paragraph('Adolescent girls – Grades 6 to 10', cell_l_sty), Paragraph('Once a week', cell_sty)], [Paragraph('Vitamin A supplementation', cell_l_sty), Paragraph('School children (as needed)', cell_l_sty), Paragraph('As per schedule', cell_sty)], [Paragraph('Health screening', cell_l_sty), Paragraph('All children (weight, height, vision)', cell_l_sty), Paragraph('Periodic', cell_sty)], [Paragraph('First Aid kits', cell_l_sty), Paragraph('All schools', cell_l_sty), Paragraph('Ongoing', cell_sty)], ] story += [tbl(shnp_data, [5.5*cm, 7.5*cm, 4.5*cm], header_bg=colors.HexColor('#4a148c')), sp(4)] story += [info_box('<b>Joint program:</b> Ministry of Health AND Ministry of Education | Covers <b>75 districts</b>', bg=colors.HexColor('#ede7f6'), border=colors.HexColor('#4a148c')), sp(10)] story += [banner('10. FOOD FORTIFICATION PROGRAM', bg=colors.HexColor('#558b2f')), sp(5)] ff_data = [ [Paragraph('Food Item', cell_hd_sty), Paragraph('Nutrient Added', cell_hd_sty), Paragraph('Program', cell_hd_sty)], [Paragraph('Salt', cell_sty), Paragraph('IODINE', cell_sty), Paragraph('Universal Salt Iodization (USI)', cell_sty)], [Paragraph('Wheat flour / Rice', cell_sty), Paragraph('Iron + Folic Acid', cell_sty), Paragraph('Flour Fortification Initiative', cell_sty)], [Paragraph('Cooking Oil', cell_sty), Paragraph('Vitamin A', cell_sty), Paragraph('Oil Fortification', cell_sty)], ] story += [tbl(ff_data, [5*cm, 5*cm, 7.5*cm], header_bg=colors.HexColor('#558b2f')), sp(10)] story.append(PageBreak()) # ════ PAGE 4 – MASTER QUICK-REVISION TABLE ══════════════════════════════════ story += [banner('★ MASTER QUICK-REVISION TABLE ★', bg=NAVY, fs=14), sp(6)] master_data = [ [Paragraph('Program', cell_hd_sty), Paragraph('Target Group', cell_hd_sty), Paragraph('Drug / Item', cell_hd_sty), Paragraph('Dose', cell_hd_sty), Paragraph('Frequency', cell_hd_sty)], [Paragraph('Vitamin A', cell_l_sty), Paragraph('6–11 months', cell_sty), Paragraph('Vit A capsule', cell_sty), Paragraph('1,00,000 IU (Blue)', cell_sty), Paragraph('Biannual', cell_sty)], [Paragraph('Vitamin A', cell_l_sty), Paragraph('12–59 months', cell_sty), Paragraph('Vit A capsule', cell_sty), Paragraph('2,00,000 IU (Red)', cell_sty), Paragraph('Biannual', cell_sty)], [Paragraph('Vitamin A', cell_l_sty), Paragraph('Postpartum mother', cell_sty), Paragraph('Vit A capsule', cell_sty), Paragraph('1,00,000 IU', cell_sty), Paragraph('Once (≤45 days PP)', cell_sty)], [Paragraph('IFA', cell_l_sty), Paragraph('Pregnant women', cell_sty), Paragraph('IFA tablet', cell_sty), Paragraph('180 tablets (1/day)', cell_sty), Paragraph('Throughout pregnancy', cell_sty)], [Paragraph('IFA', cell_l_sty), Paragraph('Postpartum mothers', cell_sty), Paragraph('IFA tablet', cell_sty), Paragraph('1/day', cell_sty), Paragraph('45 days', cell_sty)], [Paragraph('IFA', cell_l_sty), Paragraph('Adolescent girls Gr.6–10', cell_sty), Paragraph('IFA tablet', cell_sty), Paragraph('1 tablet', cell_sty), Paragraph('Weekly', cell_sty)], [Paragraph('Deworming', cell_l_sty), Paragraph('Children 12–59 months', cell_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg', cell_sty), Paragraph('Biannual', cell_sty)], [Paragraph('Deworming', cell_l_sty), Paragraph('School children', cell_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg', cell_sty), Paragraph('Biannual', cell_sty)], [Paragraph('Deworming', cell_l_sty), Paragraph('Pregnant women', cell_sty), Paragraph('Albendazole', cell_sty), Paragraph('400 mg', cell_sty), Paragraph('Once (2nd trimester)', cell_sty)], [Paragraph('Iodine / USI', cell_l_sty), Paragraph('All households', cell_sty), Paragraph('Iodized salt', cell_sty), Paragraph('Daily use', cell_sty), Paragraph('Ongoing', cell_sty)], [Paragraph('Baal Vita (MNP)', cell_l_sty), Paragraph('6–23 months', cell_sty), Paragraph('MNP sachet', cell_sty), Paragraph('1 sachet', cell_sty), Paragraph('Daily (on food)', cell_sty)], [Paragraph('IYCF', cell_l_sty), Paragraph('0–2 years + mothers', cell_sty), Paragraph('Breastfeeding', cell_sty), Paragraph('EBF: 0–6 months', cell_sty), Paragraph('Ongoing promotion', cell_sty)], [Paragraph('SAM (CMAM)', cell_l_sty), Paragraph('Malnourished children', cell_sty), Paragraph('RUTF (Plumpy Nut)', cell_sty), Paragraph('As prescribed', cell_sty), Paragraph('Until recovery', cell_sty)], ] story += [tbl(master_data, [3.2*cm, 3.8*cm, 3.3*cm, 3.5*cm, 3.7*cm], fontsize=8), sp(10)] # ── ACHIEVEMENTS BOX ──────────────────────────────────────────────────────── story += [banner('ACHIEVEMENTS – Nepal is a Global Nutrition Success Story! 🏆', bg=GREEN, fs=11), sp(5)] ach_data = [ [Paragraph('Indicator', cell_hd_sty), Paragraph('Before', cell_hd_sty), Paragraph('After', cell_hd_sty), Paragraph('Program', cell_hd_sty)], [Paragraph('Households using iodized salt', cell_l_sty), Paragraph('55% (1998)', cell_sty), Paragraph('90.7% (2016)', sty('g2',fontSize=8.5,textColor=GREEN,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('USI – Iodine program', cell_sty)], [Paragraph('Vitamin A deficiency (children)', cell_l_sty), Paragraph('32.3% (1998)', cell_sty), Paragraph('12.5% (2016) ↓ HALVED', sty('g3',fontSize=8.5,textColor=GREEN,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('Vit A supplementation', cell_sty)], [Paragraph('IFA intake – pregnant women', cell_l_sty), Paragraph('6%', cell_sty), Paragraph('71%', sty('g4',fontSize=8.5,textColor=GREEN,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('IFA program', cell_sty)], [Paragraph('Child mortality', cell_l_sty), Paragraph('High', cell_sty), Paragraph('↓ 26–30%', sty('g5',fontSize=8.5,textColor=GREEN,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER)), Paragraph('Vit A supplementation', cell_sty)], ] story += [tbl(ach_data, [5.5*cm, 3.5*cm, 4*cm, 4.5*cm], header_bg=GREEN), sp(10)] # ── KEY PLAYERS ───────────────────────────────────────────────────────────── story += [banner('KEY PLAYERS & MAJOR PROJECTS', bg=NAVY, fs=11), sp(5)] kp_left = [ [Paragraph('Organization', cell_hd_sty), Paragraph('Role', cell_hd_sty)], [Paragraph('MoHP', cell_sty), Paragraph('Lead ministry', cell_l_sty)], [Paragraph('National Planning Commission', cell_sty), Paragraph('Plans MSNP', cell_l_sty)], [Paragraph('FCHVs', cell_sty), Paragraph('On-ground delivery to every village', cell_l_sty)], [Paragraph('UNICEF', cell_sty), Paragraph('Technical + financial support', cell_l_sty)], [Paragraph('WFP', cell_sty), Paragraph('Nutrition projects', cell_l_sty)], [Paragraph('FAO', cell_sty), Paragraph('Agriculture + food security', cell_l_sty)], ] kp_right = [ [Paragraph('Project', cell_hd_sty), Paragraph('Coverage', cell_hd_sty)], [Paragraph('SUAAHARA II (USAID)', cell_sty), Paragraph('41 districts', cell_l_sty)], [Paragraph('MSNP III (UNICEF)', cell_sty), Paragraph('Nationwide', cell_l_sty)], [Paragraph('Sunaula Hajar Din', cell_sty), Paragraph('15 districts', cell_l_sty)], [Paragraph('FAO Food Security Project', cell_sty), Paragraph('19 districts', cell_l_sty)], [Paragraph('WFP Nutrition Projects', cell_sty), Paragraph('Various', cell_l_sty)], ] tl = tbl(kp_left, [3*cm, 6*cm]) tr = tbl(kp_right, [5*cm, 4*cm]) dual = Table([[tl, sp(8), tr]], colWidths=[9*cm, 0.5*cm, 8.0*cm]) dual.setStyle(TableStyle([('VALIGN', (0,0),(-1,-1), 'TOP')])) story += [dual, sp(8)] # ── SUNAULA HAJAR DIN NOTE ─────────────────────────────────────────────────── story += [info_box('<b>"Sunaula Hajar Din" = Golden First 1000 Days Program</b><br/>' 'Focuses on the <b>first 1000 days of life</b> (pregnancy + first 2 years) – ' 'the most CRITICAL window for nutrition and brain development.', bg=LORANGE, border=ORANGE), sp(10)] # ── 30 SECOND SUMMARY ─────────────────────────────────────────────────────── story += [banner('30-SECOND EXAM SUMMARY', bg=RED, fs=12), sp(5)] summary_items = [ '1. <b>MSNP III (2023–2030)</b> = Current master plan for nutrition in Nepal', '2. <b>Vitamin A</b> = Biannual; 6–11 mo → 1 lakh IU (Blue); 12–59 mo → 2 lakh IU (Red)', '3. <b>IFA</b> = 180 tablets to pregnant women; Weekly to adolescent girls; 45 days postpartum', '4. <b>Iodine / USI</b> = Universal Salt Iodization → 90.7% households now use iodized salt', '5. <b>Deworming</b> = Biannual Albendazole 400 mg to children (12–59 mo) & school children', '6. <b>Baal Vita (MNP)</b> = Daily micronutrient powder sprinkled on food for 6–23 month children', '7. <b>IYCF</b> = EBF for 6 months → start complementary feeding at 6 months → BF up to 2 years', '8. <b>CMAM / IMAM</b> = RUTF (Plumpy Nut) for severe acute malnutrition (MUAC <11.5 cm)', '9. <b>FCHVs</b> = backbone of delivery of ALL these programs at community level', '10. <b>"Sunaula Hajar Din"</b> = First 1000 Days Program = most critical nutritional window', ] sum_rows = [[Paragraph(item, sty('si', fontSize=9, textColor=DGREY, fontName='Helvetica', leading=14, leftIndent=4))] for item in summary_items] sum_tbl = Table(sum_rows, colWidths=[W - 2*MARGIN]) sum_tbl.setStyle(TableStyle([ ('ROWBACKGROUNDS', (0,0), (-1,-1), [WHITE, LGREY]), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cfd8dc')), ])) story += [sum_tbl, sp(6)] story += [info_box('<b>Best of luck for your PSM exam!</b> You are well prepared. ' 'Nepal = Global Nutrition Success Story 🏆', bg=LGREEN, border=GREEN)] # ── BUILD ──────────────────────────────────────────────────────────────────── doc.build(story) print("PDF created successfully!") PYEOF python3 /home/daytona/workspace/nutrition-pdf/make_pdf.py
ls -lh /home/daytona/workspace/nutrition-pdf/Nepal_Nutrition_Programs.pdf
Nepal Nutrition Programs
PDF Document · PDF
| Page | Content |
|---|---|
| Page 1 | Cover + Why programs exist (malnutrition table) + MSNP versions + Memory mnemonic |
| Page 2 | Vitamin A program + IFA program + Iodine/USI + Deworming (with colour-coded tables) |
| Page 3 | Zinc+ORS + SAM/CMAM + IYCF (3 golden rules) + Baal Vita + School Health + Food Fortification |
| Page 4 | Master Quick-Revision Table (all programs in one table) + Achievements + Key Players + 30-Second Summary |
Tomorrow is my PSM exam and I want to remeber the slide with better understanding but i cant undestand the slide please provide me in easy way to remember and in the easy language
python3 -c " from pptx import Presentation import os base = '/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/' files = [ \"Porter's_Health_Problems_and_the_Pre_existing_clinical_conditions.pptx\", 'Porters trekers and their and their health problems (1).pptx' ] for fname in files: print(f'\n\n==================== {fname} ====================') prs = Presentation(base + fname) print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): texts = [] for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): texts.append(shape.text.strip()) if texts: print(f'\n--- Slide {i+1} ---') for t in texts: print(t) "
pip install --user python-pptx -q && python3 -c " from pptx import Presentation base = '/home/daytona/workspace/attachments/d80c8d63-5b8a-4a38-9c0b-aa8b6929f9fe/' files = [ \"Porter's_Health_Problems_and_the_Pre_existing_clinical_conditions.pptx\", 'Porters trekers and their and their health problems (1).pptx' ] for fname in files: print(f'\n==================== {fname} ====================') prs = Presentation(base + fname) print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): texts = [] for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): texts.append(shape.text.strip()) if texts: print(f'\n--- Slide {i+1} ---') for t in texts: print(t) "
| Porter | Trekker | |
|---|---|---|
| Role | Carries heavy loads (gear, tents, food) | Goes on the mountain walk for enjoyment |
| Job | Load-carrying only (NOT guiding) | Walking, experiencing nature |
| Background | Local people, often from lowland/warm areas | Visitors/tourists (often from foreign countries) |
| Equipment | Often lacks proper gear | Usually well-equipped |
| Risk | HIGHER - poor equipment, heavy load, low pay | Lower - better prepared |
Simple line: Porter = the person carrying your bag up the mountain. Trekker = you, enjoying the view.
Real case: Kulbahadur (33-year-old porter) was left by the trail when ill in Everest National Park → found unconscious → lost both feet to frostbite → never even knew his employer's name!
| Illness | Simple Explanation |
|---|---|
| High-altitude pharyngitis/bronchitis | Dry, hacking cough from cold dry air |
| Acute Mountain Sickness (AMS) | Headache + nausea at high altitude |
| Gastroenteritis | Diarrhea + vomiting from dirty food/water |
| Epilepsy / anxiety | Mental stress |
| Cellulitis | Skin infection |
| Scabies | Skin infestation |
| Hypothermia | Body temperature dangerously low |
| Frostbite | Tissues freeze |
| Acute alcohol intoxication | Alcohol effects |
| Conjunctivitis | Red/irritated eyes |
| Hemorrhoids | Piles |
| + Snow blindness, chilblains, fever, lacerations |
Golden Rule: AMS → HACE or HAPE → DEATH (if ignored) Only real treatment = DESCEND, DESCEND, DESCEND!
If FAILS any of these → suspect HACE
| Feature | AMS | HACE | HAPE |
|---|---|---|---|
| Organ | General | Brain | Lungs |
| Key symptom | Headache + nausea | Confusion, ataxia, hallucinations | Breathlessness, wet cough, cyanosis |
| Sound in chest | None | None | Crackling/wet sounds |
| Drug | Acetazolamide | Dexamethasone + Acetazolamide | Nifedipine + Acetazolamide |
| Oxygen | Helps | Yes - give oxygen | Yes - give oxygen |
| Treatment | Descend + rest | DESCEND NOW | DESCEND NOW |
| Death if ignored | Rarely directly | Within 1 hour | Within 1 hour |
Memory trick for drugs: HACE = DEX (Dexamethasone) → "Brain is DEXTROUS (clever), DEX for HACE" HAPE = NIFEdipine → "Lungs NIFE-d (knifed) with fluid, use NIFE"
⚠️ You can have AMS + HACE + HAPE all at the same time!
Bottom line: Gamow bag = temporary life-saving bridge. STILL MUST DESCEND!
| Grade | Temperature | Symptoms |
|---|---|---|
| Mild | 32-35°C | Shivering, tachycardia, slurred speech |
| Moderate | 28-32°C | Confusion, muscle rigidity, bradycardia |
| Severe | <28°C | Unconsciousness, arrhythmia, apnea |
| Degree | What Happens | Signs |
|---|---|---|
| 1st degree | Superficial skin only | Numbness, redness (erythema), NO blister |
| 2nd degree | Deeper skin layers | Clear blisters, edema |
| 3rd degree | Skin necrosis | Hemorrhagic (blood-filled) blisters, skin death |
| 4th degree | Deep - muscle, tendon, bone | Gangrene, amputation needed |
⚠️ Never rub frostbitten tissue (breaks ice crystals, causes more damage!)
| Feature | Detail |
|---|---|
| Cause | Cold + DAMP air (not freezing) |
| Affected areas | Fingers, toes, cheeks, ears |
| Appearance | Red, bluish or purplish patches |
| Symptoms | Itchy, tender, painful |
| Mechanism | Cold → blood vessels constrict → less oxygen → inflammation |
| Type | Drug |
|---|---|
| Oral (to dilate blood vessels) | Nifedipine (Adalat) |
| Oral (improve circulation) | Pentoxifylline (Trental) |
| Topical | Nitroglycerin or Betamethasone valerate (steroid) |
| Condition | Cause | Temperature | Reversible? | Treatment |
|---|---|---|---|---|
| Chilblains | Cold + damp (not freezing) | Just cold | Yes | Nifedipine, Betamethasone |
| Frostnip | Brief freezing of surface only | Sub-zero | Yes (fully) | Gradual rewarming |
| Frostbite | Tissue actually freezes | Sub-zero | Depends on degree | 37-40°C water rewarming |
| Hypothermia | Core body temp drops | Core <35°C | If treated early | Passive/active rewarming |
| Body System | Key Advice at Altitude |
|---|---|
| Heart/Blood | Walk slowly, plenty of rests, drink fluids, don't race |
| Brain | Headache = avoid triggers (dehydration, alcohol), treat with painkillers; Stroke → aspirin + descend |
| Lungs | Walk slowly, not a competition, DESCEND if HAPE signs |
| Kidney/Bladder | Keep hydrated! Keep hydrated! Keep hydrated! |
| Stomach/Bowel | Drink plenty, wash hands always, eat favourite snacks |
| Joints/Muscles | Slow down, lighten load, rest day if pain |
| Eyes | Wear goggles (snow blindness prevention), improvise if lost |
| Skin/Extremities | Keep dry, wear sunscreen, cover from sun/cold/wind |
| Teeth/Mouth | Drink lots, zinc cream on lips, antibiotics for dental abscess |
| Sleep | Expect more sleep needed; if no improvement → do NOT go higher |
| Children | Same treatment as adults; but <40 kg = smaller doses; descent = best treatment |
Create a summary PDF of porters & altitude illnesses for quick revision
mkdir -p /home/daytona/workspace/porter-pdf && python3 -c "import reportlab; print('ok')"
~/porter-pdf/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, PageBreak, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
# ── palette ──────────────────────────────────────────────────────────────────
NAVY = colors.HexColor('#1a2e4a')
TEAL = colors.HexColor('#0d7377')
ORANGE = colors.HexColor('#e8832a')
RED = colors.HexColor('#c62828')
GREEN = colors.HexColor('#2e7d32')
PURPLE = colors.HexColor('#6a1b9a')
BROWN = colors.HexColor('#4e342e')
ICEBLU = colors.HexColor('#0277bd')
YELLOW = colors.HexColor('#f9a825')
WHITE = colors.white
DGREY = colors.HexColor('#424242')
LGREY = colors.HexColor('#f5f5f5')
LBLUE = colors.HexColor('#e3f2fd')
LGREEN = colors.HexColor('#e8f5e9')
LORANGE = colors.HexColor('#fff3e0')
LRED = colors.HexColor('#ffebee')
LPURP = colors.HexColor('#f3e5f5')
LYELLOW = colors.HexColor('#fffde7')
W, H = A4
M = 1.4 * cm
doc = SimpleDocTemplate(
'/home/daytona/workspace/porter-pdf/Porters_Altitude_Illness_Summary.pdf',
pagesize=A4,
leftMargin=M, rightMargin=M, topMargin=1.1*cm, bottomMargin=1.1*cm
)
# ── style factory ────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
CH = S('CH', fontSize=9, textColor=WHITE, fontName='Helvetica-Bold', leading=13, alignment=TA_CENTER)
CL = S('CL', fontSize=8.5, textColor=DGREY, fontName='Helvetica', leading=12, alignment=TA_LEFT)
CC = S('CC', fontSize=8.5, textColor=DGREY, fontName='Helvetica', leading=12, alignment=TA_CENTER)
CB = S('CB', fontSize=8.5, textColor=DGREY, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)
CG = S('CG', fontSize=8.5, textColor=GREEN, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)
CR = S('CR', fontSize=8.5, textColor=RED, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)
CO = S('CO', fontSize=8.5, textColor=ORANGE, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)
CP = S('CP', fontSize=8.5, textColor=PURPLE, fontName='Helvetica-Bold', leading=12, alignment=TA_CENTER)
BODY= S('BD', fontSize=9, textColor=DGREY, fontName='Helvetica', leading=13, alignment=TA_LEFT)
def sp(h=5): return Spacer(1, h)
def banner(txt, bg=NAVY, fg=WHITE, fs=12):
p = Paragraph(txt, S('bn', fontSize=fs, textColor=fg, fontName='Helvetica-Bold',
leading=fs+5, alignment=TA_CENTER))
t = Table([[p]], colWidths=[W-2*M])
t.setStyle(TableStyle([
('BACKGROUND', (0,0),(-1,-1), bg),
('TOPPADDING', (0,0),(-1,-1), 6),
('BOTTOMPADDING',(0,0),(-1,-1), 6),
('LEFTPADDING', (0,0),(-1,-1), 8),
('RIGHTPADDING', (0,0),(-1,-1), 8),
]))
return t
def infobox(txt, bg=LBLUE, border=TEAL):
p = Paragraph(txt, S('ib', fontSize=8.8, textColor=NAVY, fontName='Helvetica',
leading=13, alignment=TA_LEFT))
t = Table([[p]], colWidths=[W-2*M])
t.setStyle(TableStyle([
('BACKGROUND', (0,0),(-1,-1), bg),
('TOPPADDING', (0,0),(-1,-1), 6),
('BOTTOMPADDING',(0,0),(-1,-1), 6),
('LEFTPADDING', (0,0),(-1,-1), 10),
('RIGHTPADDING', (0,0),(-1,-1), 10),
('LINEBEFORE', (0,0),(0,-1), 3, border),
]))
return t
def warnbox(txt):
p = Paragraph(txt, S('wb', fontSize=9.5, textColor=RED, fontName='Helvetica-Bold',
leading=14, alignment=TA_CENTER))
t = Table([[p]], colWidths=[W-2*M])
t.setStyle(TableStyle([
('BACKGROUND', (0,0),(-1,-1), LRED),
('TOPPADDING', (0,0),(-1,-1), 7),
('BOTTOMPADDING',(0,0),(-1,-1), 7),
('BOX', (0,0),(-1,-1), 1.5, RED),
]))
return t
def mnembox(txt, bg=LYELLOW, border=YELLOW):
p = Paragraph(txt, S('mn', fontSize=9.5, textColor=BROWN, fontName='Helvetica-Bold',
leading=14, alignment=TA_CENTER))
t = Table([[p]], colWidths=[W-2*M])
t.setStyle(TableStyle([
('BACKGROUND', (0,0),(-1,-1), bg),
('TOPPADDING', (0,0),(-1,-1), 6),
('BOTTOMPADDING',(0,0),(-1,-1), 6),
('BOX', (0,0),(-1,-1), 1, border),
]))
return t
def tbl(data, cw, hbg=TEAL, fontsize=8.5, alt=True):
ts = [
('BACKGROUND', (0,0),(-1,0), hbg),
('TEXTCOLOR', (0,0),(-1,0), WHITE),
('FONTNAME', (0,0),(-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0),(-1,-1), fontsize),
('ALIGN', (0,0),(-1,-1), 'CENTER'),
('VALIGN', (0,0),(-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0),(-1,-1), 4),
('BOTTOMPADDING', (0,0),(-1,-1), 4),
('LEFTPADDING', (0,0),(-1,-1), 5),
('RIGHTPADDING', (0,0),(-1,-1), 5),
('GRID', (0,0),(-1,-1), 0.4, colors.HexColor('#b0bec5')),
]
if alt:
ts.append(('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, LGREY]))
t = Table(data, colWidths=cw)
t.setStyle(TableStyle(ts))
return t
def two_col(left, right, lw=8.8*cm, rw=8.2*cm):
t = Table([[left, right]], colWidths=[lw, rw])
t.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),
('LEFTPADDING',(0,0),(-1,-1),0),
('RIGHTPADDING',(0,0),(-1,-1),0),
('TOPPADDING',(0,0),(-1,-1),0),
('BOTTOMPADDING',(0,0),(-1,-1),0)]))
return t
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ────────────────────────────────────────────────────────────────────
cvr = Table([
[Paragraph('🏔️ Porters, Trekkers & Altitude Illnesses',
S('ct', fontSize=19, textColor=WHITE, fontName='Helvetica-Bold',
leading=25, alignment=TA_CENTER))],
[sp(4)],
[Paragraph('PSM Quick-Revision Summary • Pre-existing Conditions & Cold Injuries',
S('cs', fontSize=10, textColor=colors.HexColor('#b3d9ff'),
fontName='Helvetica', leading=14, alignment=TA_CENTER))],
[sp(8)],
[Paragraph('For Medical / BPH Examinations • June 2026',
S('cd', fontSize=8.5, textColor=colors.HexColor('#90a4ae'),
fontName='Helvetica', leading=12, alignment=TA_CENTER))],
], colWidths=[W-2*M])
cvr.setStyle(TableStyle([
('BACKGROUND', (0,0),(-1,-1), NAVY),
('TOPPADDING', (0,0),(-1,-1), 14),
('BOTTOMPADDING',(0,0),(-1,-1), 10),
('LEFTPADDING', (0,0),(-1,-1), 10),
]))
story += [cvr, sp(8)]
# ── PORTER vs TREKKER ────────────────────────────────────────────────────────
story += [banner('WHO ARE PORTERS vs TREKKERS?', bg=TEAL), sp(4)]
pvt = tbl([
[Paragraph('Feature', CH), Paragraph('Porter', CH), Paragraph('Trekker', CH)],
[Paragraph('Role', CL), Paragraph('Carries heavy loads (gear, tents, food)', CL),
Paragraph('Walks for enjoyment / scenery', CL)],
[Paragraph('Background', CL), Paragraph('Local people, often from lowland/warm areas', CL),
Paragraph('Visitors / tourists (often foreign)', CL)],
[Paragraph('Equipment', CL), Paragraph('Often lacks proper gear', CR),
Paragraph('Usually well-equipped', CG)],
[Paragraph('Risk level', CL), Paragraph('HIGHER ⬆', CR), Paragraph('Lower ⬇', CG)],
[Paragraph('Load', CL), Paragraph('Heavy (heavier than kitchen staff)', CL),
Paragraph('Personal items only', CL)],
], [3.5*cm, 8.5*cm, 5.5*cm], hbg=TEAL)
story += [pvt, sp(8)]
# ── WHY HIGH RISK ────────────────────────────────────────────────────────────
story += [banner('WHY PORTERS ARE AT HIGH RISK', bg=RED), sp(4)]
story += [mnembox('MEMORY: "PULE-NAH" → Poor | Uneducated | Load-carrying | Exposed | No water | Acclimatization absent | Help denied'), sp(4)]
risk_data = [
[Paragraph('Risk Factor', CH), Paragraph('Explanation', CH)],
[Paragraph('Poor', CL), Paragraph('Work for money → will not complain about illness (fear of losing job)', CL)],
[Paragraph('Uneducated', CL), Paragraph('Go without basic preparations or health knowledge', CL)],
[Paragraph('Load', CL), Paragraph('Carry heavier loads than trekkers and kitchen staff', CL)],
[Paragraph('Exposed', CL), Paragraph('No proper sunglass, sunscreen, boots, gloves, warm jackets or tents', CL)],
[Paragraph('No clean water', CL), Paragraph('No access to uncontaminated drinking water or handwashing', CL)],
[Paragraph('Acclimatization absent', CL), Paragraph('Natives of lower/warmer areas — NOT acclimatized to high altitude', CL)],
[Paragraph('Help denied', CL), Paragraph('No helicopter evacuation; companies focus on tourists; left to die if ill', CL)],
]
story += [tbl(risk_data, [3.5*cm, 14*cm], hbg=RED), sp(4)]
story += [infobox('<b>Real case:</b> Kulbahadur (33 yrs, porter) was left by the trail when ill in Everest National Park → found unconscious '
'→ lost both feet to frostbite → never knew his employer\'s name!', bg=LRED, border=RED), sp(8)]
# ── IPPG ─────────────────────────────────────────────────────────────────────
story += [banner('INTERNATIONAL PORTER PROTECTION GROUP (IPPG) — 5 GUIDELINES', bg=ORANGE), sp(4)]
story += [mnembox('"CSMCA" → Clothing | Shelter+food | Medical care | Care on descent | Appropriate load', bg=LORANGE, border=ORANGE), sp(4)]
ippg = tbl([
[Paragraph('No.', CH), Paragraph('Guideline', CH), Paragraph('Detail', CH)],
[Paragraph('1', CC), Paragraph('Adequate Clothing & Footwear', CL), Paragraph('Proper gear for cold/altitude', CL)],
[Paragraph('2', CC), Paragraph('Adequate Shelter, Food & Drink', CL), Paragraph('Basic survival needs met', CL)],
[Paragraph('3', CC), Paragraph('Medical Care & Life Insurance', CL), Paragraph('Access to treatment + insurance cover', CL)],
[Paragraph('4', CC), Paragraph('Care on Descent if Ill', CL), Paragraph('Do NOT abandon sick porters on trail', CL)],
[Paragraph('5', CC), Paragraph('Appropriate Load Size', CL), Paragraph('Do not overload porters beyond safe limits', CL)],
], [1.5*cm, 6*cm, 10*cm], hbg=ORANGE)
story += [ippg, sp(8)]
story.append(PageBreak())
# ════ PAGE 2 — THE BIG THREE ALTITUDE ILLNESSES ══════════════════════════════
story += [banner('🏔️ THE BIG THREE ALTITUDE ILLNESSES', bg=NAVY, fs=13), sp(5)]
story += [warnbox('GOLDEN RULE: AMS → HACE or HAPE → DEATH (if ignored) | Only real treatment = DESCEND · DESCEND · DESCEND!'), sp(6)]
# AMS
story += [banner('1. ACUTE MOUNTAIN SICKNESS (AMS)', bg=TEAL), sp(4)]
ams_left = [
banner('Symptoms: "HNVFDS"', bg=TEAL, fs=9),
sp(3),
tbl([
[Paragraph('Letter', CH), Paragraph('Symptom', CH)],
[Paragraph('H', CB), Paragraph('Headache (most important!)', CL)],
[Paragraph('N', CB), Paragraph('Nausea (feeling sick)', CL)],
[Paragraph('V', CB), Paragraph('Vomiting', CL)],
[Paragraph('F', CB), Paragraph('Fatigue', CL)],
[Paragraph('D', CB), Paragraph('Dizziness', CL)],
[Paragraph('S', CB), Paragraph('Sleep disturbance + Poor appetite', CL)],
], [1.5*cm, 6.5*cm], hbg=TEAL),
]
ams_right = [
banner('Action Rules', bg=TEAL, fs=9),
sp(3),
infobox('If headache + 3 or more others → <b>Do NOT go higher</b><br/>'
'If not getting better or getting worse → <b>GO DOWN</b><br/>'
'Descend at least <b>500–1000 m lower</b> for sleeping<br/>'
'Drug: <b>Diamox (Acetazolamide)</b> — sulphonamide<br/>'
'Try one at home first to check for allergy!', bg=LBLUE, border=TEAL),
]
story += [two_col(
Table([[x] for x in ams_left], colWidths=[8.5*cm]),
Table([[x] for x in ams_right], colWidths=[8.5*cm])
), sp(8)]
# HACE
story += [banner('2. HACE — High Altitude Cerebral Edema (BRAIN SWELLING)', bg=PURPLE), sp(4)]
hace_left = [
banner('Symptoms', bg=PURPLE, fs=9), sp(3),
tbl([
[Paragraph('Sign', CH), Paragraph('What it means', CH)],
[Paragraph('Severe headache', CL), Paragraph('Increasing pressure in skull', CL)],
[Paragraph('CLUMSY (Ataxia)', CP), Paragraph('Can\'t walk in straight line', CL)],
[Paragraph('Behaviour change', CP), Paragraph('Unhelpful, violent, lazy, confused', CL)],
[Paragraph('Non-stop vomiting', CL), Paragraph('Severe brain irritation', CL)],
[Paragraph('Blurred vision', CL), Paragraph('Optic nerve pressure', CL)],
[Paragraph('Hallucinations', CP), Paragraph('Sees/hears/smells odd things', CL)],
[Paragraph('Reduced consciousness', CP), Paragraph('Brain failing', CL)],
], [3.5*cm, 4.5*cm], hbg=PURPLE),
]
hace_right = [
banner('Bedside Tests for HACE', bg=PURPLE, fs=9), sp(3),
infobox('1. Touch nose with index finger (eyes closed) — repeat fast<br/>'
'2. Walk heel-to-toe in straight line<br/>'
'3. Stand upright, eyes shut, arms folded<br/>'
'4. Do simple mental maths<br/><br/>'
'<b>FAILS any → SUSPECT HACE</b>', bg=LPURP, border=PURPLE),
sp(4),
banner('Treatment: "DADO"', bg=PURPLE, fs=9), sp(3),
infobox('<b>D</b>escend NOW (not later, not morning!)<br/>'
'<b>A</b>irway — sit upright, keep warm<br/>'
'<b>D</b>rugs: <b>Dexamethasone</b> + Acetazolamide<br/>'
'<b>O</b>xygen: cylinder or Gamow bag<br/><br/>'
'⚠️ <b>Ignored → DEATH within 1 HOUR!</b>', bg=LPURP, border=PURPLE),
]
story += [two_col(
Table([[x] for x in hace_left], colWidths=[8.5*cm]),
Table([[x] for x in hace_right], colWidths=[8.5*cm])
), sp(8)]
# HAPE
story += [banner('3. HAPE — High Altitude Pulmonary Edema (LUNG FLUID)', bg=ICEBLU), sp(4)]
hape_left = [
banner('Symptoms', bg=ICEBLU, fs=9), sp(3),
tbl([
[Paragraph('Sign', CH), Paragraph('What it means', CH)],
[Paragraph('Trouble breathing', CL), Paragraph('Fluid filling lungs', CL)],
[Paragraph('Tired & weary', CL), Paragraph('Low oxygen to muscles', CL)],
[Paragraph('Coughing', CL), Paragraph('Lung irritation from fluid', CL)],
[Paragraph('Frothy → Bloody sputum', S('rr',fontSize=8.5,textColor=RED,fontName='Helvetica-Bold',leading=12,alignment=TA_LEFT)),
Paragraph('Advanced lung oedema', CL)],
[Paragraph('Lips/nails turn BLUE', S('bl',fontSize=8.5,textColor=ICEBLU,fontName='Helvetica-Bold',leading=12,alignment=TA_LEFT)),
Paragraph('Cyanosis — critical sign', CL)],
[Paragraph('Crackling sounds in chest', CL), Paragraph('Ear on back below shoulder blade', CL)],
], [4*cm, 4.5*cm], hbg=ICEBLU),
]
hape_right = [
banner('Check For HAPE', bg=ICEBLU, fs=9), sp(3),
infobox('• Recent ascent?<br/>'
'• Long time to get breath back after exercise?<br/>'
'• Breathless when RESTING?<br/>'
'• Breathing rate increasing?<br/>'
'• Wet/crackling sound in chest?', bg=LBLUE, border=ICEBLU),
sp(4),
banner('Treatment: "DANO"', bg=ICEBLU, fs=9), sp(3),
infobox('<b>D</b>escend NOW<br/>'
'<b>A</b>irway — sit upright, keep warm<br/>'
'<b>N</b>ifedipine (drug for HAPE — NOT dexamethasone!)<br/>'
'<b>O</b>xygen + Acetazolamide<br/><br/>'
'⚠️ <b>Ignored → DEATH within 1 HOUR!</b>', bg=LBLUE, border=ICEBLU),
]
story += [two_col(
Table([[x] for x in hape_left], colWidths=[8.5*cm]),
Table([[x] for x in hape_right], colWidths=[8.5*cm])
), sp(8)]
story.append(PageBreak())
# ════ PAGE 3 — COMPARISON + OXYGEN + COLD INJURIES ══════════════════════════
story += [banner('⚡ AMS vs HACE vs HAPE — MASTER COMPARISON TABLE', bg=NAVY, fs=12), sp(5)]
comp = tbl([
[Paragraph('Feature', CH), Paragraph('AMS', CH), Paragraph('HACE', CH), Paragraph('HAPE', CH)],
[Paragraph('Organ', CL),
Paragraph('General', CC),
Paragraph('BRAIN', CP),
Paragraph('LUNGS', S('lb',fontSize=8.5,textColor=ICEBLU,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))],
[Paragraph('Key symptom', CL),
Paragraph('Headache + nausea', CC),
Paragraph('Ataxia + confusion + hallucinations', CC),
Paragraph('Breathlessness + wet cough + cyanosis', CC)],
[Paragraph('Chest sound', CL), Paragraph('None', CC), Paragraph('None', CC), Paragraph('Crackling/wet', CC)],
[Paragraph('Drug of choice', CL),
Paragraph('Acetazolamide', CC),
Paragraph('DEXAMETHASONE', CP),
Paragraph('NIFEDIPINE', S('nb',fontSize=8.5,textColor=ICEBLU,fontName='Helvetica-Bold',leading=12,alignment=TA_CENTER))],
[Paragraph('Also give', CL),
Paragraph('—', CC),
Paragraph('+ Acetazolamide', CC),
Paragraph('+ Acetazolamide', CC)],
[Paragraph('Oxygen', CL), Paragraph('Helpful', CC), Paragraph('YES — give', CP), Paragraph('YES — give', CP)],
[Paragraph('Treatment', CL), Paragraph('Descend + rest', CC), Paragraph('DESCEND NOW', CR), Paragraph('DESCEND NOW', CR)],
[Paragraph('Death if ignored', CL), Paragraph('Rare directly', CC), Paragraph('Within 1 HOUR', CR), Paragraph('Within 1 HOUR', CR)],
], [3.5*cm, 4*cm, 5.5*cm, 4.5*cm], hbg=NAVY)
story += [comp, sp(4)]
story += [mnembox('DRUG MEMORY TRICK: HACE = DEX (Dexamethasone) ★ HAPE = NIFE (Nifedipine)'
'\n"Brain needs DEX, Lungs need NIFE"'), sp(8)]
story += [warnbox('⚠️ You can have AMS + HACE + HAPE all at the SAME TIME!'), sp(8)]
# OXYGEN DELIVERY
story += [banner('OXYGEN DELIVERY AT ALTITUDE — 2 METHODS', bg=GREEN), sp(4)]
oxy_data = [
[Paragraph('Method', CH), Paragraph('How it works', CH), Paragraph('Duration', CH), Paragraph('Notes', CH)],
[Paragraph('Oxygen Cylinder\n+ face mask', CL),
Paragraph('Constant flow at 2 L/min', CL),
Paragraph('300 L bottle → 2–3 hrs', CG),
Paragraph('Demand flow (on inhale only) → same bottle lasts 6–9 hrs', CL)],
[Paragraph('Gamow Bag\n(Pressure bag)', CL),
Paragraph('Pumped up → simulates being 2000 m LOWER altitude', CL),
Paragraph('1 hour minimum (may need several hours)', CG),
Paragraph('TEMPORARY only — still MUST descend!', CR)],
]
story += [tbl(oxy_data, [3*cm, 5*cm, 4*cm, 5.5*cm], hbg=GREEN), sp(4)]
story += [infobox('<b>Problems with Gamow Bag:</b> Hard to talk to person inside | Unconscious person needs monitor inside | '
'Can damage eardrums | Air needs changing | <b>Recovery is often SHORT-LIVED</b>',
bg=LGREEN, border=GREEN), sp(8)]
# COLD INJURIES comparison
story += [banner('COLD INJURIES — QUICK COMPARISON', bg=BROWN), sp(4)]
cold_comp = tbl([
[Paragraph('Condition', CH), Paragraph('Cause', CH), Paragraph('Temperature', CH),
Paragraph('Reversible?', CH), Paragraph('Key Drug/Treatment', CH)],
[Paragraph('Chilblains\n(Pernio)', CL),
Paragraph('Cold + DAMP air (NOT freezing)', CL),
Paragraph('Just cold', CC),
Paragraph('Yes ✓', CG),
Paragraph('Nifedipine, Betamethasone', CL)],
[Paragraph('Frostnip', CL),
Paragraph('Brief surface freezing only', CL),
Paragraph('Sub-zero', CC),
Paragraph('Yes — fully ✓', CG),
Paragraph('Gradual rewarming', CL)],
[Paragraph('Frostbite', CL),
Paragraph('Tissues actually freeze\n(ice crystals in cells)', CL),
Paragraph('Sub-zero', CC),
Paragraph('Depends on degree', CO),
Paragraph('37–40°C water rewarming;\nAmitriptyline for pain', CL)],
[Paragraph('Hypothermia', CL),
Paragraph('Core body temp drops', CL),
Paragraph('Core <35°C', CR),
Paragraph('If treated early ✓', CO),
Paragraph('Passive/active rewarming\n+ supportive care', CL)],
], [2.8*cm, 4*cm, 2.5*cm, 2.5*cm, 5.7*cm], hbg=BROWN)
story += [cold_comp, sp(8)]
story.append(PageBreak())
# ════ PAGE 4 ─ HYPOTHERMIA + FROSTBITE + CHILBLAINS + CONDITIONS ═════════════
# HYPOTHERMIA
story += [banner('HYPOTHERMIA — Grades & Management', bg=ICEBLU), sp(4)]
hypo_left = [
tbl([
[Paragraph('Grade', CH), Paragraph('Core Temp', CH), Paragraph('Symptoms', CH)],
[Paragraph('Mild', CL), Paragraph('32–35°C', CC),
Paragraph('Shivering, tachycardia, slurred speech', CL)],
[Paragraph('Moderate', CL), Paragraph('28–32°C', CO),
Paragraph('Confusion, muscle rigidity, bradycardia', CL)],
[Paragraph('Severe', CL), Paragraph('<28°C', CR),
Paragraph('Unconscious, arrhythmia, apnea', CL)],
], [2*cm, 2.5*cm, 4.5*cm], hbg=ICEBLU),
]
hypo_right = [
infobox('<b>Management — "RAPS":</b><br/>'
'<b>R</b>emove from cold immediately<br/>'
'<b>A</b>ctive/Passive rewarming:<br/>'
' • Passive: dry blankets, warm room<br/>'
' • Active external: warm packs, heated air<br/>'
' • Active internal: warm IV fluids, heated oxygen<br/>'
'<b>P</b>revent further heat loss (remove wet clothing)<br/>'
'<b>S</b>upportive care: airway, O₂, cardiac monitoring', bg=LBLUE, border=ICEBLU),
]
story += [two_col(
Table([[x] for x in hypo_left], colWidths=[9.5*cm]),
Table([[x] for x in hypo_right], colWidths=[8*cm])
), sp(8)]
# FROSTBITE
story += [banner('FROSTBITE — 4 Degrees', bg=colors.HexColor('#37474f')), sp(4)]
story += [mnembox('MEMORY: "NCHG" → Numbness (1st) | Clear blister (2nd) | Haemorrhagic blister (3rd) | Gangrene (4th)'), sp(4)]
fb = tbl([
[Paragraph('Degree', CH), Paragraph('Depth', CH), Paragraph('Signs', CH), Paragraph('Outcome', CH)],
[Paragraph('1st', CB), Paragraph('Superficial skin only', CL),
Paragraph('Numbness, redness (erythema), NO blister', CL), Paragraph('Full recovery', CG)],
[Paragraph('2nd', CO), Paragraph('Deeper skin layers', CL),
Paragraph('CLEAR blisters, oedema', CL), Paragraph('Usually recovers', CG)],
[Paragraph('3rd', CR), Paragraph('Skin necrosis', CL),
Paragraph('HEMORRHAGIC (blood-filled) blisters, skin death', CL), Paragraph('Scarring', CO)],
[Paragraph('4th', CR), Paragraph('Muscle, tendon, bone', CL),
Paragraph('Gangrene, black necrotic tissue', CL), Paragraph('AMPUTATION', CR)],
], [1.5*cm, 3*cm, 6.5*cm, 3.5*cm], hbg=colors.HexColor('#37474f'))
story += [fb, sp(4)]
story += [infobox('<b>Most affected areas:</b> Hands, feet, nose, ears<br/>'
'<b>Treatment:</b> Gradual rewarming in <b>warm water (37–40°C)</b> for 15–60 min | '
'Amitriptyline for severe pain in late phase<br/>'
'<b>⚠️ NEVER rub frostbitten tissue</b> — breaks ice crystals = more damage!'), sp(8)]
# CHILBLAINS
story += [banner('CHILBLAINS (PERNIO) — Cold + Damp Skin Inflammation', bg=RED), sp(4)]
chil_data = [
[Paragraph('Feature', CH), Paragraph('Detail', CH)],
[Paragraph('Cause', CL), Paragraph('Cold + DAMP air (NOT freezing — different from frostbite!)', CL)],
[Paragraph('Sites', CL), Paragraph('Fingers, toes, cheeks, ears', CL)],
[Paragraph('Appearance', CL), Paragraph('Red, bluish or purplish itchy/painful patches', CL)],
[Paragraph('Mechanism', CL), Paragraph('Cold → blood vessels constrict → less oxygen → inflammation', CL)],
[Paragraph('Oral drug', CL), Paragraph('Nifedipine (dilates blood vessels) OR Pentoxifylline (improves circulation)', CL)],
[Paragraph('Topical drug', CL), Paragraph('Nitroglycerin OR Betamethasone valerate (steroid)', CL)],
[Paragraph('Home care', CL), Paragraph('Warm mittens, layered clothing, moisturize, NSAIDs (ibuprofen), warm water soak', CL)],
]
story += [tbl(chil_data, [3.5*cm, 14*cm], hbg=RED), sp(8)]
# HIGH-ALTITUDE PHARYNGITIS
story += [banner('HIGH-ALTITUDE PHARYNGITIS / BRONCHITIS — "Altitude Cough"', bg=TEAL), sp(4)]
hap_data = [
[Paragraph('Aspect', CH), Paragraph('Detail', CH)],
[Paragraph('Starts at', CL), Paragraph('>8000 ft (~2500 m)', CL)],
[Paragraph('Cause', CL), Paragraph('Cold + dry air → hyperventilation → mouth breathing → dries airways; Smoke exposure', CL)],
[Paragraph('Key symptom', CL), Paragraph('Dry, hacking cough (persistent)', CL)],
[Paragraph('Serious complication', CL), Paragraph('Severe coughing can fracture RIBS! Can be confused with HAPE', CL)],
[Paragraph('Treatment', CL), Paragraph('Hydration | Saline nasal douching | Oil nasal ointment | Steam inhalation | Avoid cold/smoke', CL)],
]
story += [tbl(hap_data, [3.5*cm, 14*cm], hbg=TEAL), sp(8)]
story.append(PageBreak())
# ════ PAGE 5 — PRE-EXISTING CONDITIONS ═══════════════════════════════════════
story += [banner('PRE-EXISTING CONDITIONS AT HIGH ALTITUDE', bg=NAVY, fs=13), sp(5)]
story += [infobox('<b>Before going — ALWAYS:</b> See doctor ≥6 months before trip | Make medical plan | '
'Inform ALL group members | Doctor\'s letter (translated) | Medical insurance | MedicAlert bracelet'), sp(5)]
cond_data = [
[Paragraph('Condition', CH), Paragraph('Key Before-You-Go Points', CH), Paragraph('Key At-Altitude Points', CH)],
[Paragraph('DIABETES', CL),
Paragraph('Eye test before booking (eye damage = avoid going high) | Robust glucose monitor | '
'Plan diet | Spare insulin | Practice managing in cold', CL),
Paragraph('Stop insulin freezing (keep near skin!) | Exercise ↓ insulin need; Rest ↑ insulin need | '
'Always carry emergency glucose | Never stop insulin', CL)],
[Paragraph('HEART /\nHIGH BP', CL),
Paragraph('Get heart checked | BP stable before departure | Learn about BP meds + exercise/altitude/cold effects', CL),
Paragraph('If unwell → stop ascent → consider descent → tell companions', CL)],
[Paragraph('ASTHMA', CL),
Paragraph('Only go if asthma is STABLE | Flu vaccine | Spare inhalers + steroids | Know your triggers', CL),
Paragraph('Carry ALL inhalers at all times | AVOID aspirin and ibuprofen | Some improve at altitude, some worsen', CL)],
[Paragraph('LUNG\nCONDITIONS', CL),
Paragraph('Even mild breathlessness at home = serious at altitude | Flu vaccine | Build up training slowly', CL),
Paragraph('Gain height gradually | Reduce activity + descend if needed', CL)],
[Paragraph('EPILEPSY', CL),
Paragraph('Seizure-free for at least 6 MONTHS before going | Check malaria meds don\'t interact | Companions aware', CL),
Paragraph('Avoid triggers (alcohol, tiredness) | Epilepsy meds mimic altitude illness symptoms → if in doubt, descend | '
'Fits in mountains = life-threatening!', CL)],
[Paragraph('ALLERGIES /\nANAPHYLAXIS', CL),
Paragraph('Get adrenaline (EpiPen) + antihistamines + steroids | MedicAlert bracelet', CL),
Paragraph('Carry EpiPen at ALL TIMES | Reaction can RECUR within 24 hrs without warning → get to medical care fast', CL)],
]
story += [tbl(cond_data, [2.5*cm, 8*cm, 7*cm], hbg=NAVY, fontsize=8), sp(8)]
# SYSTEM-WISE TABLE
story += [banner('BODY SYSTEM CARE AT ALTITUDE — QUICK REFERENCE', bg=GREEN), sp(4)]
sys_data = [
[Paragraph('System', CH), Paragraph('Most Important Advice', CH)],
[Paragraph('Heart / Blood', CL), Paragraph('Walk slowly, plenty of rests, drink fluids — do NOT race', CL)],
[Paragraph('Brain', CL), Paragraph('Headache (AMS) → avoid dehydration, exhaustion, alcohol | Stroke → aspirin + descend', CL)],
[Paragraph('Lungs', CL), Paragraph('Walk slowly, not a competition | Do NOT ignore HAPE signs', CL)],
[Paragraph('Kidney / Bladder', CL), Paragraph('Keep HYDRATED! Keep HYDRATED! Keep HYDRATED!', CL)],
[Paragraph('Stomach / Bowel', CL), Paragraph('Drink plenty, always wash hands, plan clean water source', CL)],
[Paragraph('Joints / Muscles', CL), Paragraph('Slow down, lighten load, take rest day if pain', CL)],
[Paragraph('Eyes', CL), Paragraph('Wear glacier goggles (snow blindness!) — improvise with cardboard slits if lost', CL)],
[Paragraph('Skin / Extremities', CL), Paragraph('Keep dry, sunscreen (SPF 15-30), cover from sun/cold/wind, change wet gloves/socks', CL)],
[Paragraph('Mouth / Teeth', CL), Paragraph('Dental check 6 weeks before | Zinc cream on lips | Antibiotics for dental abscess', CL)],
[Paragraph('Sleep', CL), Paragraph('If sleep not improving after a few nights → do NOT go higher, consider descending', CL)],
[Paragraph('Children', CL), Paragraph('Same treatment as adults; <40 kg = smaller doses | Descent = BEST treatment', CL)],
[Paragraph('Reproductive', CL), Paragraph('Avoid high altitude in first 3 months of pregnancy | Progesterone safe at altitude', CL)],
]
story += [tbl(sys_data, [3*cm, 14.5*cm], hbg=GREEN), sp(8)]
story.append(PageBreak())
# ════ PAGE 6 — FINAL SUMMARY ═════════════════════════════════════════════════
story += [banner('★ 30-SECOND EXAM SUMMARY ★', bg=RED, fs=14), sp(6)]
items = [
'1. <b>Porter</b> = load carrier at HIGH RISK: poor, uneducated, no equipment, heavy loads, lowland native, no help',
'2. <b>IPPG 5 rules:</b> Clothing | Shelter + food | Medical care | Care on descent | Appropriate load',
'3. <b>AMS</b> = Headache + 3 others → do NOT ascend → <b>Diamox (Acetazolamide)</b>',
'4. <b>HACE</b> = Brain swelling → Confusion + Ataxia → <b>DEXAMETHASONE</b> + Descend NOW',
'5. <b>HAPE</b> = Lung fluid → Breathless + Wet cough + Cyanosis → <b>NIFEDIPINE</b> + Descend NOW',
'6. <b>Gamow bag</b> = Portable altitude chamber = TEMPORARY only → must still DESCEND!',
'7. <b>Hypothermia</b> = Mild (32–35°C) | Moderate (28–32°C) | Severe (<28°C) → Rewarm + supportive care',
'8. <b>Frostbite</b> = 4 degrees (numbness → clear blister → bloody blister → gangrene) → 37–40°C rewarming; NEVER rub!',
'9. <b>Chilblains</b> = Cold + damp (NOT freezing) → Nifedipine, Betamethasone (different from frostbite!)',
'10. <b>Altitude cough</b> = Cold dry air + hyperventilation → Hydration + saline nasal wash; can fracture RIBS!',
'11. <b>Diabetes</b> = Keep insulin warm near skin; exercise ↓ insulin need; rest ↑ insulin need',
'12. <b>Asthma</b> = AVOID aspirin/ibuprofen; some improve, some worsen at altitude',
'13. <b>Epilepsy</b> = Seizure-free 6 months before; drug side effects mimic altitude illness → if in doubt, DESCEND',
'14. <b>ALL conditions:</b> See doctor ≥6 months before | Doctor\'s letter | MedicAlert bracelet | Be HONEST with your group',
]
sum_rows = [[Paragraph(item, S('si', fontSize=9, textColor=DGREY, fontName='Helvetica',
leading=14, leftIndent=4))] for item in items]
sum_tbl = Table(sum_rows, colWidths=[W-2*M])
sum_tbl.setStyle(TableStyle([
('ROWBACKGROUNDS', (0,0),(-1,-1), [WHITE, LGREY]),
('TOPPADDING', (0,0),(-1,-1), 4),
('BOTTOMPADDING', (0,0),(-1,-1), 4),
('LEFTPADDING', (0,0),(-1,-1), 8),
('GRID', (0,0),(-1,-1), 0.3, colors.HexColor('#cfd8dc')),
]))
story += [sum_tbl, sp(8)]
story += [mnembox('KEY DRUG SUMMARY: AMS → Acetazolamide | HACE → DEXAMETHASONE + Acetazolamide'
' | HAPE → NIFEDIPINE + Acetazolamide | Chilblains → Nifedipine / Betamethasone'
' | Frostbite severe pain → Amitriptyline | Anaphylaxis → EpiPen'), sp(6)]
story += [infobox('<b>Best of luck for your PSM exam!</b> Remember: When in doubt at altitude → DESCEND! 🏔️ '
'Porter welfare = your responsibility as a trekker/company.', bg=LGREEN, border=GREEN)]
doc.build(story)
print("PDF created successfully!")
python3 /home/daytona/workspace/porter-pdf/make_pdf.py
ls -lh /home/daytona/workspace/porter-pdf/Porters_Altitude_Illness_Summary.pdf
Porters Altitude Illness Summary
PDF Document · PDF
| Page | Content |
|---|---|
| Page 1 | Cover + Porter vs Trekker table + Why porters are at high risk (PULE-NAH) + IPPG 5 guidelines |
| Page 2 | AMS (symptoms + rules) + HACE (tests + DADO treatment) + HAPE (signs + DANO treatment) |
| Page 3 | Master AMS vs HACE vs HAPE comparison table + Drug memory trick + Oxygen delivery (cylinder vs Gamow bag) + Cold injuries comparison table |
| Page 4 | Hypothermia grades + management + Frostbite 4 degrees + Chilblains treatment + Altitude cough |
| Page 5 | All pre-existing conditions (Diabetes, Heart, Asthma, Epilepsy, Allergies, Lungs) + Body system advice at altitude |
| Page 6 | 30-second exam summary (14 key points) + Master drug summary box |
Difference between kwashirkor and marasmus in table from k park only
"Kwashiorkor and marasmus are the two different forms of protein and energy malnutrition."
| Feature | Kwashiorkor | Marasmus |
|---|---|---|
| Full name | Protein-Energy Malnutrition (Protein deficient) | Protein-Energy Malnutrition (Both protein + energy deficient) |
| Main cause | Low protein/energy ratio in diet (mainly protein deficiency) | Inadequate intake of BOTH protein AND energy |
| Simple meaning | Enough calories, BUT not enough protein | Not enough food at all (starvation) |
| Age group | Older infants / toddlers (after weaning, 1–3 years) | Infants (younger, first year of life) |
| Oedema | PRESENT (hallmark feature) | ABSENT (little or no oedema) |
| Wasting (muscle loss) | Present | Severe wasting |
| Weight loss | Present but masked by oedema | Severe — "skin and bones" appearance |
| Subcutaneous fat | Present (retained due to oedema) | Minimal / absent |
| Serum albumin | Low (hypoalbuminaemia) | Non-normal (but less severely low) |
| Liver | Enlarged (hepatomegaly) + fatty liver (steatosis) | Not typically enlarged |
| Skin changes | Depigmentation — "flaky paint" dermatosis | Loose, wrinkled skin (no depigmentation) |
| Hair changes | Depigmentation of hair (reddish / flag sign) | Hair may be sparse but less dramatic |
| Appetite | Poor | Usually present (child is hungry) |
| Behaviour | Miserable, irritable, apathetic | Alert but weak |
| Face | "Moon face" (due to oedema) | "Old man's face" / monkey facies (due to severe wasting) |
| Appearance | Child appears "fat" (oedema masks wasting) | Child appears "wasted" — all bones visible |
| K. Park says about Kwashiorkor | K. Park says about Marasmus |
|---|---|
| Develops on diet with low protein/energy ratio | Caused by inadequate intake of both protein and energy |
| Main symptoms: oedema, wasting, liver enlargement, hypoalbuminaemia, steatosis, skin & hair depigmentation | Main symptoms: severe wasting, little or no oedema, minimal subcutaneous fat, severe muscle wasting, non-normal serum albumin |
| "Severe form of undernutrition" | "Severe cachexia with weight loss due to wasting in infancy and childhood" |
| Kwashiorkor | Marasmus | |
|---|---|---|
| Mnemonic | "K" = Kwelled (swollen) — oedema puffs up | "M" = Melted away — total wasting |
| One-liner | Protein poor → swollen, sad, skin peeling | Starved of everything → shrunken, old-looking |
| Liver | Fat liver (steatosis) — remember K = fatty liver | Normal liver |
| Oedema | YES — the defining feature | NO |
| Skin | Flaky paint, depigmented | Loose and wrinkled |
Source: Park's Textbook of Preventive and Social Medicine, Section: "Kwashiorkor and Marasmus" (Chapter on Nutrition), p. 737
Create a summary PDF comparing Kwashiorkor vs Marasmus for exam revision
mkdir -p /home/daytona/workspace/kwash-pdf && python3 -c "import reportlab; print('ok')"