Milking of subcutaneous emphysema full details how it done , action, indication,contrain6
milking subcutaneous emphysema technique procedure indication contraindication
https://pmc.ncbi.nlm.nih.gov/articles/PMC4692895
"subcutaneous emphysema" milking management chest drain
subcutaneous emphysema milking technique chest tube infraclavicular incision blow hole

Two-panel clinical photograph illustrating the management of extensive subcutaneous emphysema (SE). Image A shows an elderly male patient with severe swelling and distension of the face, neck, and upper torso, secondary to trapped air in the subcutaneous tissues (subcutaneous emphysema). The patient is intubated with an endotracheal tube secured for airway protection due to compromise from tissue tension. Image B, taken 24 hours later, demonstrates a significant reduction in soft tissue swelling following the placement of subcutaneous negative pressure wound therapy (NPWT). Two incision sites are visible on the anterior chest wall (bilateral infraclavicular region) where subcutaneous drains are inserted and secured under transparent occlusive dressings. The chest also shows an existing surgical dressing on the right lower quadrant and cardiac monitoring leads. This comparison highlights a surgical intervention technique for rapidly decompressing life-threatening subcutaneous emphysema when conventional drainage fails.

This clinical photograph displays a closed incision negative pressure wound therapy (ciNPWT) system applied to the anterior thoracic region of a patient. Centrally, a rectangular piece of black, reticulated porous foam is visible, secured under a large, wrinkled transparent adhesive drape. A circular suction port with a radial ribbed design is positioned atop the foam, connected to flexible tubing that exits toward the patient's left. The dressing covers loosely approximated 'blow hole' incisions intended to manage massive subcutaneous emphysema. Adjacent to the dressing, several clinical monitoring components are visible, including EKG electrodes (3M Red Dot) and various leads. A purple surgical marking is seen on the lower-left aspect of the chest wall. The image illustrates a specific procedural application for thoracic decompression and wound management in the context of severe chest trauma and air-leak syndromes.

This diagnostic imaging composite displays a case of severe, extensive subcutaneous emphysema. Panel (a) is a portable anteroposterior chest roentgenogram showing radiolucent (dark) air streaks dissecting through the soft tissues of the chest wall and neck, disrupting normal tissue planes. A right-sided chest tube is visible, and the chest wall appears significantly thickened due to air entrapment. Panel (b) is a computed tomography (CT) scout film/topogram of the torso. White arrows highlight the craniocaudal distribution of subcutaneous air extending from the thoracic region down into the abdominal and pelvic subcutaneous tissues. A black arrow indicates a prepectoral 'blowhole' incision on the right chest wall, designed for air decompression. The image illustrates the radiographic manifestations of barotrauma or persistent air leak under positive pressure ventilation, characterized by the 'ginkgo leaf sign' on the chest wall and diffuse mottled low-density areas throughout the trunk's soft tissues.

Anteroposterior (AP) chest X-ray demonstrating severe multi-compartmental air leaks. Extensive subcutaneous emphysema is visible as diffuse, streaky radiolucencies (dark areas) dissecting through the soft tissues of the chest wall, axillae, neck, and upper arms, creating a characteristic 'gingko leaf' appearance over the pectoral regions. A prominent pneumomediastinum is indicated by thin lucent lines outlining the mediastinal borders and a 'continuous diaphragm sign,' where air trapped behind the pericardium allows for visualization of the diaphragm across the midline. A left basilar pneumothorax is present, associated with a malpositioned left-sided thoracostomy tube showing a visible sentinel hole near the lateral chest wall, suggesting partial retraction. These findings illustrate critical complications of thoracic trauma or barotrauma, emphasizing the radiological manifestations of extra-alveolar air in pulmonary pathology and emergency medicine.
"subcutaneous emphysema" management decompression blowhole infraclavicular

| Grade | Extent of Air |
|---|---|
| 1 | Base of neck only |
| 2 | Entire neck |
| 3 | Neck + subpectoral area |
| 4 | Chest wall + entire neck |
| 5 | Chest wall + neck + orbit + scalp + abdomen + upper limbs + scrotum |

| Point | Detail |
|---|---|
| Always treat the source | SE is a sign of an underlying air leak - treat the pneumothorax, bronchial tear, or esophageal injury first |
| Insert a chest tube first | Milking without a functional drain achieves nothing |
| Bronchoscopy if massive air leak | Dramatic or increasing SE with massive chest tube air leak suggests major airway injury - investigate with bronchoscopy |
| POCUS > CXR for pneumothorax | Ultrasound is more sensitive than plain film in detecting the underlying pneumothorax |
| Small SE resolves spontaneously | Grades 1-2 (neck base or neck alone) reabsorb on their own; no milking required |
| Positive-pressure ventilation worsens SE | If the patient is on a ventilator, consider reducing tidal volumes and PEEP where possible |
With gauze roll
milking subcutaneous emphysema gauze roll technique how to perform
| Bare Hands | Gauze Roll |
|---|---|
| Uneven fingertip pressure | Even cylindrical pressure across wide area |
| Skin slippage on sweaty/oedematous tissue | Gauze grips skin surface without slipping |
| Tiring for clinician over large SE | Roll mechanics reduce hand fatigue |
| May cause focal bruising | Distributes force, less trauma |
| Less effective on large body surface area | More efficient for grade 4-5 SE |
| Rule | Reason |
|---|---|
| Never milk without a drain/blowhole | Air has nowhere to go - no benefit, potential harm |
| Never milk if chest tube is clamped | Risk of tension pneumothorax |
| Stop if the patient desaturates | May indicate tension phenomena - reassess immediately |
| Never compress the neck forcefully | Risk of airway compression and vascular injury |
| Avoid milking over fresh surgical wounds | Risk of wound dehiscence |
| If air leak is massive and ongoing | Milking is a temporising measure only - the source must be fixed (bronchial repair, chest tube upsizing, or surgical intervention) |
Subcutaneous emphysema o2 treatment why
high flow oxygen subcutaneous emphysema nitrogen washout reabsorption mechanism treatment
Tissue capillaries carry blood with nitrogen
partially saturated to ~78% of atmospheric
nitrogen pressure (PN₂ ≈ 593 mmHg at sea level)
Trapped subcutaneous air also has PN₂ ≈ 593 mmHg
→ No pressure gradient → Nitrogen stays in tissues → SE persists
Patient breathes near 100% O₂ (FiO₂ → 1.0)
↓ Alveolar nitrogen drops toward ZERO
↓ Arterial blood nitrogen drops (nitrogen "washed out" of lungs)
↓ Venous and tissue capillary PN₂ falls sharply
NOW a steep pressure gradient exists:
Subcutaneous air PN₂ (≈593 mmHg)
>>>>>>
Capillary PN₂ (≈ 0-10 mmHg)
→ Nitrogen diffuses DOWN the gradient from tissue INTO capillaries
→ Nitrogen carried away in blood → exhaled by lungs
→ Trapped air volume shrinks → SE resolves faster
| Parameter | Detail |
|---|---|
| Delivery device | Non-rebreather mask (NRM) - delivers FiO₂ ~0.85-0.95 |
| Flow rate | 10-15 L/min via NRM |
| Duration | Continuous until SE is resolving; typically 24-72 hours for mild-moderate cases |
| Alternative | Oxygen concentrator (delivers up to 95% O₂) for less critical cases |
| Goal | SpO₂ >94%; the higher the FiO₂, the steeper the nitrogen gradient, the faster the reabsorption |
| Caution | Reason |
|---|---|
| Do not use high-flow O₂ in COPD patients without caution | Risk of hypercapnic respiratory failure (hypoxic drive suppression) |
| O₂ alone is NOT sufficient for massive SE | It is an adjunct - drain placement, milking, and source control are still required |
| Evidence base is limited | Current guidelines note supportive evidence for O₂ in SE reabsorption is "lacking" for definitive recommendation, but the physiological rationale is sound and the practice is widely used |
| For CO₂-based SE (post-laparoscopy) | CO₂ dissolves so readily in blood that it reabsorbs within 24 hours regardless; here O₂ mainly treats hypoxia and monitors for respiratory acidosis |
Give a simple explanation to everyone easy to understand
🫧 Think of the blood vessels as tiny vacuum cleaners running past the trapped air bubble.
WITHOUT oxygen treatment:
Blood near bubble: already has nitrogen → can't absorb much → bubble stays
WITH high-flow oxygen:
Blood near bubble: nitrogen flushed out → acts like empty sponge →
sucks nitrogen OUT of bubble → bubble shrinks → skin goes back to normal
🧃 Imagine a juice carton that still has juice in it. If you try to pour more juice in, it won't go in because it's already full.But if you first empty the carton - now it can absorb a lot more.High-flow oxygen empties the blood of nitrogen first, so the blood can then soak up the nitrogen trapped under the skin.
| What oxygen does | What else is still needed |
|---|---|
| Helps the body absorb the trapped air 3-4x faster | Fix the source of the air leak |
| Treats low oxygen levels | Chest tube to drain the pneumothorax |
| Buys time safely | Milking / blowhole incisions for massive cases |
💡 Breathing pure oxygen flushes nitrogen out of the blood, turning the blood vessels into an empty sponge that can then suck the trapped nitrogen out from under the skin - making the subcutaneous emphysema disappear faster.
Create pdf file with protocol and guidelines
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/subcutaneous-emphysema && cat > /tmp/workspace/subcutaneous-emphysema/generate_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, PageBreak ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.pdfgen import canvas from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate import datetime OUTPUT = "/tmp/workspace/subcutaneous-emphysema/Subcutaneous_Emphysema_Protocol.pdf" # ── Colour palette ────────────────────────────────────────────────────────── NAVY = colors.HexColor("#1B3A6B") TEAL = colors.HexColor("#0D7377") LIGHTBLUE = colors.HexColor("#D6EAF8") LIGHTTEAL = colors.HexColor("#D1F2EB") LIGHTYELLOW= colors.HexColor("#FEF9E7") LIGHTRED = colors.HexColor("#FDEDEC") LIGHTGREY = colors.HexColor("#F2F3F4") RED = colors.HexColor("#C0392B") ORANGE = colors.HexColor("#E67E22") GREEN = colors.HexColor("#1E8449") WHITE = colors.white BLACK = colors.black # ── Styles ────────────────────────────────────────────────────────────────── styles = getSampleStyleSheet() def make_style(name, parent='Normal', **kwargs): s = ParagraphStyle(name, parent=styles[parent], **kwargs) return s title_style = make_style('DocTitle', fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=4, fontName='Helvetica-Bold') subtitle_style = make_style('DocSubtitle', fontSize=12, textColor=LIGHTBLUE, alignment=TA_CENTER, spaceAfter=2, fontName='Helvetica') section_style = make_style('Section', fontSize=13, textColor=WHITE, spaceAfter=6, spaceBefore=14, fontName='Helvetica-Bold', backColor=NAVY, leftIndent=-6, rightIndent=-6, borderPad=5) subsection_style = make_style('Subsection', fontSize=11, textColor=NAVY, spaceAfter=4, spaceBefore=8, fontName='Helvetica-Bold') body_style = make_style('Body', fontSize=9.5, textColor=BLACK, spaceAfter=4, leading=14, alignment=TA_JUSTIFY) bullet_style = make_style('Bullet', fontSize=9.5, textColor=BLACK, spaceAfter=3, leading=13, leftIndent=14, firstLineIndent=-10) small_style = make_style('Small', fontSize=8.5, textColor=colors.HexColor("#555555"), spaceAfter=2, leading=12, alignment=TA_CENTER) warning_style = make_style('Warning', fontSize=9.5, textColor=RED, spaceAfter=4, leading=13, fontName='Helvetica-Bold', leftIndent=10) note_style = make_style('Note', fontSize=9, textColor=colors.HexColor("#555555"), spaceAfter=4, leading=12, leftIndent=10, fontName='Helvetica-Oblique') # ── Header / Footer ───────────────────────────────────────────────────────── def header_footer(canvas_obj, doc): canvas_obj.saveState() W, H = A4 # Header bar canvas_obj.setFillColor(NAVY) canvas_obj.rect(0, H - 2.2*cm, W, 2.2*cm, fill=1, stroke=0) canvas_obj.setFillColor(TEAL) canvas_obj.rect(0, H - 2.4*cm, W, 0.2*cm, fill=1, stroke=0) canvas_obj.setFillColor(WHITE) canvas_obj.setFont("Helvetica-Bold", 13) canvas_obj.drawCentredString(W/2, H - 1.35*cm, "SUBCUTANEOUS EMPHYSEMA — CLINICAL PROTOCOL & GUIDELINES") canvas_obj.setFont("Helvetica", 8) canvas_obj.setFillColor(LIGHTBLUE) canvas_obj.drawCentredString(W/2, H - 1.85*cm, "Emergency Medicine | Thoracic Surgery | Critical Care | Nursing") # Footer bar canvas_obj.setFillColor(NAVY) canvas_obj.rect(0, 0, W, 1.2*cm, fill=1, stroke=0) canvas_obj.setFillColor(TEAL) canvas_obj.rect(0, 1.2*cm, W, 0.15*cm, fill=1, stroke=0) canvas_obj.setFillColor(WHITE) canvas_obj.setFont("Helvetica", 8) canvas_obj.drawString(1.5*cm, 0.45*cm, f"Protocol Version 1.0 | Date: {datetime.date.today().strftime('%B %Y')}") canvas_obj.drawCentredString(W/2, 0.45*cm, "For clinical use — always treat underlying cause first") canvas_obj.drawRightString(W - 1.5*cm, 0.45*cm, f"Page {doc.page}") canvas_obj.restoreState() # ── Document setup ─────────────────────────────────────────────────────────── doc = SimpleDocTemplate( OUTPUT, pagesize=A4, topMargin=2.8*cm, bottomMargin=1.8*cm, leftMargin=1.8*cm, rightMargin=1.8*cm, title="Subcutaneous Emphysema Protocol", author="Clinical Protocol Unit", subject="SE Management Guidelines" ) story = [] def section(text): story.append(Spacer(1, 6)) story.append(HRFlowable(width="100%", thickness=2, color=TEAL, spaceAfter=0)) p = Paragraph(f" {text}", section_style) story.append(p) story.append(HRFlowable(width="100%", thickness=1, color=TEAL, spaceBefore=0, spaceAfter=4)) def subsection(text): story.append(Paragraph(text, subsection_style)) def body(text): story.append(Paragraph(text, body_style)) def bullet(text, symbol="•"): story.append(Paragraph(f"{symbol} {text}", bullet_style)) def spacer(h=6): story.append(Spacer(1, h)) def warning(text): story.append(Paragraph(f"⚠ {text}", warning_style)) def note(text): story.append(Paragraph(f"ℹ {text}", note_style)) # ── COVER BLOCK ───────────────────────────────────────────────────────────── cover_data = [[ Paragraph("<b>SUBCUTANEOUS EMPHYSEMA</b>", make_style('CT', fontSize=20, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_CENTER)), "" ],[ Paragraph("Clinical Protocol & Management Guidelines", make_style('CS', fontSize=13, textColor=LIGHTBLUE, fontName='Helvetica', alignment=TA_CENTER)), "" ],[ Paragraph("Emergency Medicine • Thoracic Surgery • ICU • Nursing", make_style('CD', fontSize=10, textColor=colors.HexColor("#A9CCE3"), alignment=TA_CENTER)), "" ]] cover_table = Table(cover_data, colWidths=["100%", 0]) cover_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), NAVY), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ('SPAN', (0,0), (1,0)), ('SPAN', (0,1), (1,1)), ('SPAN', (0,2), (1,2)), ('LINEBELOW', (0,2), (-1,2), 3, TEAL), ])) story.append(cover_table) spacer(10) # ── DEFINITION ────────────────────────────────────────────────────────────── section("1. DEFINITION & PATHOPHYSIOLOGY") body("Subcutaneous emphysema (SE) — also called surgical emphysema — is the accumulation of " "free air within the subcutaneous tissue and deeper soft tissue planes. It is identified " "clinically by <b>crepitus</b> on palpation (a crackling sensation, 'like walking on snow') " "and radiographically by radiolucent striations dissecting tissue planes.") spacer(4) subsection("Common Causes") causes = [ ["Traumatic", "Rib fractures, penetrating chest injury, pneumothorax"], ["Iatrogenic", "Chest tube insertion, tracheostomy, laparoscopic surgery (CO₂), intubation"], ["Barotrauma", "Mechanical ventilation (positive pressure), HFNC"], ["Infection", "Gas-forming organisms (necrotising fasciitis — rare)"], ["Spontaneous", "Ruptured alveoli, Valsalva, forceful coughing"], ["Esophageal", "Boerhaave syndrome, endoscopic perforation"], ] t = Table([["Cause", "Examples"]] + causes, colWidths=[4.5*cm, 12*cm]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TEAL), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHTGREY]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 8), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(t) # ── SEVERITY GRADING ───────────────────────────────────────────────────────── spacer(8) section("2. SEVERITY GRADING (Anatomical Extension)") grades = [ ["Grade", "Extent of Air", "Clinical Urgency", "Action"], ["1", "Base of neck only", "Low", "Observe, O₂, treat cause"], ["2", "Entire neck", "Low–Moderate", "Observe, O₂, treat cause"], ["3", "Neck + subpectoralis area", "Moderate", "Chest tube + O₂ + milking"], ["4", "Chest wall + entire neck", "High", "Bilateral chest tubes + blowhole"], ["5", "Chest wall + neck + face/orbit\n+ abdomen + limbs + scrotum", "CRITICAL", "Immediate decompression\n± surgical intervention"], ] gt = Table(grades, colWidths=[1.5*cm, 5.5*cm, 3.5*cm, 6*cm]) gt.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), NAVY), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('BACKGROUND', (0,1), (-1,2), LIGHTTEAL), ('BACKGROUND', (0,3), (-1,3), LIGHTYELLOW), ('BACKGROUND', (0,4), (-1,4), colors.HexColor("#FAD7A0")), ('BACKGROUND', (0,5), (-1,5), LIGHTRED), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 7), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('FONTNAME', (0,5), (0,5), 'Helvetica-Bold'), ('TEXTCOLOR', (0,5), (0,5), RED), ])) story.append(gt) note("Grades 1–2 are generally not clinically dangerous and resolve with conservative management. " "Grades 3–5 require active intervention.") # ── ASSESSMENT ────────────────────────────────────────────────────────────── section("3. INITIAL ASSESSMENT") subsection("Clinical Signs") bullet("Palpable crepitus — 'crackling' or 'snow crunching' sensation on touch") bullet("Visible swelling of neck, face, chest wall, or limbs") bullet("Dysphagia, hoarseness, stridor (neck involvement)") bullet("Dyspnoea, tachypnoea, hypoxia (chest wall restriction)") bullet("Pain, tenderness over affected area") spacer(4) subsection("Investigations") inv = [ ["Investigation", "Purpose", "Key Finding"], ["Chest X-ray (CXR)", "First-line imaging", "'Ginkgo leaf sign' — streaky radiolucencies in soft tissue"], ["CT Chest", "Extent mapping, source identification", "Dark pockets of gas; identify pneumothorax or mediastinum"], ["POCUS (Ultrasound)", "Bedside pneumothorax detection", "More sensitive than CXR for pneumothorax"], ["ABG", "Respiratory compromise assessment", "Hypoxia, hypercapnia, respiratory acidosis"], ["SpO₂ monitoring", "Continuous oxygenation", "Target SpO₂ ≥94%"], ] it = Table(inv, colWidths=[4*cm, 5*cm, 7.5*cm]) it.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TEAL), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHTGREY]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 7), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(it) # ── OXYGEN TREATMENT ──────────────────────────────────────────────────────── story.append(PageBreak()) section("4. OXYGEN THERAPY — PROTOCOL") subsection("Why Oxygen Works (Nitrogen Washout Mechanism)") body("The trapped air under the skin is 78% nitrogen. The body cannot metabolise nitrogen, " "so it persists. When the patient breathes high-flow oxygen:") bullet("Lung alveoli fill with near-pure oxygen — almost no nitrogen present") bullet("Blood nitrogen is washed out into the lungs and exhaled") bullet("Blood vessels near the trapped air bubble become nitrogen-depleted ('empty sponge')") bullet("Nitrogen diffuses FROM the subcutaneous bubble INTO the blood vessels") bullet("Blood carries nitrogen to the lungs → patient exhales it out") bullet("Trapped air bubble shrinks → SE resolves 3–4× faster than breathing room air") spacer(6) subsection("Oxygen Delivery Protocol") o2_data = [ ["Severity", "Device", "Flow Rate", "FiO₂", "Duration"], ["Mild (Grade 1–2)", "Nasal cannula", "2–4 L/min", "~28–36%", "Until SE resolves"], ["Moderate (Grade 3)", "Simple face mask", "5–8 L/min", "~40–60%", "24–48 hours"], ["Severe (Grade 4–5)", "Non-rebreather mask (NRM)", "10–15 L/min", "~85–95%", "Continuous until decompressed"], ["Post-laparoscopy SE", "NRM or nasal cannula", "As needed", "Variable", "Usually resolves in 24h (CO₂ gas)"], ] o2t = Table(o2_data, colWidths=[3.5*cm, 4.5*cm, 2.5*cm, 2.5*cm, 3.5*cm]) o2t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), NAVY), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [LIGHTTEAL, WHITE]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 7), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(o2t) spacer(4) warning("CAUTION in COPD patients — high-flow oxygen may suppress hypoxic drive and cause " "hypercapnic respiratory failure. Use controlled O₂ (24–28% via Venturi mask) and " "monitor ABG closely.") note("Oxygen alone is NOT sufficient for massive SE. It is an adjunct — " "drain placement and source control remain the priority.") # ── MILKING TECHNIQUE ─────────────────────────────────────────────────────── section("5. MILKING OF SUBCUTANEOUS EMPHYSEMA") subsection("Indications") bullet("Rapidly progressive or massive SE (Grade 3–5)") bullet("Airway compromise — neck SE causing dysphagia, hoarseness, stridor") bullet("Respiratory failure from chest wall restriction") bullet("Worsening SE despite a functioning chest tube") bullet("Haemodynamic compromise or pacemaker malfunction from SE") bullet("Severe patient discomfort or disfigurement") spacer(4) subsection("Contraindications") ctable = [ ["Absolute Contraindications", "Relative Contraindications"], ["No drainage exit in place (chest tube/blowhole)\n— milking is futile without an exit", "Small asymptomatic SE (Grade 1–2)\n— resolves spontaneously"], ["Chest tube is clamped\n— risk of tension pneumothorax", "Uncontrolled coagulopathy (for incision-based methods)"], ["Active necrotising infection at incision site", "SE from oesophageal perforation\n— treat source first"], ] ct = Table(ctable, colWidths=[8.3*cm, 8.3*cm]) ct.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), NAVY), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('BACKGROUND', (0,1), (0,-1), LIGHTRED), ('BACKGROUND', (1,1), (1,-1), LIGHTYELLOW), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ])) story.append(ct) # ── MANUAL MILKING STEPS ───────────────────────────────────────────────────── spacer(8) section("6. STEP-BY-STEP MILKING PROCEDURE") subsection("A. Manual Milking With Gauze Roll") body("<b>Equipment:</b> Gauze roll (7–10 cm wide crepe/cotton roll), gloves, " "functioning chest tube or blowhole incision (mandatory prerequisite).") spacer(4) steps = [ ("Step 1 — Confirm drain patency", "Ensure the chest tube is bubbling freely in the underwater seal. " "NEVER milk with a clamped or non-functional drain."), ("Step 2 — Position patient", "Supine or 30–45° head elevation. Explain the procedure — it is uncomfortable but safe."), ("Step 3 — Map the SE extent", "Palpate the full extent of crepitus: note spread to neck, face, axilla, abdomen, limbs."), ("Step 4 — Prepare gauze roll", "Hold the gauze roll in both hands like a rolling pin. Palms on top, fingers around each end."), ("Step 5 — Start distal, work proximal", "Begin at the furthest point from the drain (e.g. neck, face, upper arm). " "Place gauze roll flat on the skin surface."), ("Step 6 — Rolling stroke", "Apply firm, steady, downward-forward pressure. Roll toward the chest tube site — " "like squeezing toothpaste toward the opening. Work in parallel strips, overlapping each stroke."), ("Step 7 — Direction guide", "Neck SE → roll downward toward clavicles. Chest wall SE → roll toward drain site. " "Abdominal SE → roll upward toward thorax."), ("Step 8 — Confirm effectiveness", "Listen for increased bubbling in underwater seal. Palpate — tissue should feel less tense and crepitant."), ("Step 9 — Repeat passes", "Perform 3–5 passes per zone. Crepitus progressively diminishes. " "Repeat every 1–4 hours as needed for progressive SE."), ("Step 10 — Post-milking check", "Reassess crepitus extent. Check SpO₂, RR, HR. Observe drain for ongoing bubbling."), ] for title, desc in steps: row_data = [[Paragraph(f"<b>{title}</b>", make_style('StepT', fontSize=9.5, textColor=NAVY, fontName='Helvetica-Bold')), Paragraph(desc, make_style('StepD', fontSize=9.5, leading=13))]] st = Table(row_data, colWidths=[4.5*cm, 12*cm]) st.setStyle(TableStyle([ ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (0,0), 8), ('BACKGROUND', (0,0), (0,0), LIGHTBLUE), ('LINEBELOW', (0,0), (-1,0), 0.5, colors.HexColor("#CCCCCC")), ])) story.append(st) # ── BLOWHOLE ──────────────────────────────────────────────────────────────── story.append(PageBreak()) section("7. BLOWHOLE INCISION TECHNIQUE") body("Used when SE is massive, rapidly progressive, and not controlled by chest tube alone. " "Performed under sterile conditions with local anaesthesia.") bh_steps = [ "Mark bilateral infraclavicular positions in the midclavicular line.", "Infiltrate with local anaesthetic (1% lignocaine ± adrenaline).", "Make 2–4 cm incisions DEEP to the external thoracic fascia (superficial to pectoral fascia).", "Blunt dissect to open subcutaneous channel — air escapes spontaneously on fascial opening.", "Leave wounds OPEN (do NOT suture) — this maintains the egress pathway.", "Perform manual milking (gauze roll technique) from periphery toward blowhole sites.", "Optional: Apply negative pressure wound therapy (NPWT/VAC) dressing over blowhole for continuous suction.", "Reassess CXR, SpO₂, and SE extent at 1, 6, and 24 hours.", ] for i, step in enumerate(bh_steps, 1): bullet(f"<b>{i}.</b> {step}") spacer(6) warning("Do NOT suture blowhole wounds — closing them defeats the purpose. " "Air must continue to escape until the source is controlled.") # ── OXYGEN MECHANISM SIMPLE ───────────────────────────────────────────────── section("8. OXYGEN THERAPY — SIMPLE MECHANISM SUMMARY") mech_data = [ ["Without Oxygen (Room Air)", "With High-Flow Oxygen"], ["Blood already carries nitrogen at 78% saturation", "Patient breathes near-pure O₂ — lungs contain almost NO nitrogen"], ["Blood near trapped bubble is 'full' of nitrogen\n→ cannot absorb more from bubble", "Nitrogen washed OUT of blood by the lungs"], ["Bubble stays — nitrogen cannot diffuse into blood\n→ SE persists for days", "Blood vessels near bubble are nitrogen-depleted\n→ act like an empty sponge"], ["Resolution: ~1.25% of bubble volume per day", "Nitrogen rushes from bubble INTO blood → exhaled out\n→ Bubble shrinks 3–4× faster"], ] mt = Table(mech_data, colWidths=[8.3*cm, 8.3*cm]) mt.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), NAVY), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('BACKGROUND', (0,1), (0,-1), LIGHTRED), ('BACKGROUND', (1,1), (1,-1), LIGHTTEAL), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('VALIGN', (0,0), (-1,-1), 'TOP'), ])) story.append(mt) # ── MONITORING ────────────────────────────────────────────────────────────── section("9. MONITORING PROTOCOL") mon_data = [ ["Parameter", "Frequency", "Target / Action"], ["SpO₂", "Continuous", "≥94% — increase O₂ if below target"], ["Crepitus extent", "Every 1–2 hours", "Mark extent on skin with pen — document spread or regression"], ["Respiratory rate", "Every 1 hour", ">25/min → reassess airway and drain function"], ["ABG (arterial blood gas)", "On admission + every 4–6h if ventilated", "Watch for hypercapnia (rising pCO₂) and respiratory acidosis"], ["CXR", "On admission, post-procedure, 24h", "Confirm lung re-expansion, check drain position"], ["Chest drain bubbling", "Every 2 hours", "Active bubbling = ongoing air leak → source not controlled"], ["Airway assessment", "Every 1 hour if neck SE", "Stridor or inability to swallow → immediate senior review"], ["Pacemaker function", "If applicable", "Check device function — SE can cause malfunction"], ["Blood pressure & HR", "Every 30 min if severe", "Haemodynamic compromise → tension phenomena"], ] mont = Table(mon_data, colWidths=[4*cm, 4.5*cm, 8.1*cm]) mont.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TEAL), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHTGREY]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 7), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(mont) # ── MANAGEMENT ALGORITHM ───────────────────────────────────────────────────── story.append(PageBreak()) section("10. MANAGEMENT ALGORITHM") algo = [ ["SUBCUTANEOUS EMPHYSEMA DETECTED"], ["▼"], ["ASSESS SEVERITY (Grade 1–5) + IDENTIFY SOURCE"], ["▼"], ["IMMEDIATE: Airway assessment — Is there stridor, dysphagia, or SpO₂ <94%?"], ["YES → Secure airway (call anaesthetics) | NO → Continue assessment"], ["▼"], ["START HIGH-FLOW OXYGEN (NRM 10–15 L/min)"], ["▼"], ["Is a chest tube/drain already in place?"], ["NO → Insert intercostal chest drain (ICD) | YES → Check patency, apply suction"], ["▼"], ["Grade 1–2: Conservative — O₂ + treat cause + observe"], ["Grade 3: O₂ + unilateral ICD + manual milking every 1–4h"], ["Grade 4: O₂ + bilateral ICD + milking + consider blowholes"], ["Grade 5: O₂ + bilateral ICD + bilateral blowholes + milking + surgical review"], ["▼"], ["MONITOR: SpO₂, RR, crepitus extent, drain output, ABG, CXR at 24h"], ["▼"], ["Is SE improving?"], ["YES → Wean O₂, continue monitoring until full resolution (typically 5–14 days)"], ["NO → Upsize drain / add blowholes / bronchoscopy / surgical source control"], ] at = Table([[Paragraph(row[0], make_style(f'A{i}', fontSize=9 if i not in [0,2,7,17] else 10, fontName='Helvetica-Bold' if i in [0,2,7,17,18] else 'Helvetica', textColor=WHITE if i in [0,2,7,17] else (NAVY if i % 2 == 0 else BLACK), alignment=TA_CENTER, backColor=NAVY if i in [0] else (TEAL if i in [2,7,17] else LIGHTBLUE if i in [4,8,10,13,14,15,19,20] else WHITE)))] for i, row in enumerate(algo)], colWidths=[16.6*cm]) at.setStyle(TableStyle([ ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 10), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(at) # ── KEY CLINICAL RULES ─────────────────────────────────────────────────────── section("11. KEY CLINICAL RULES") rules = [ ("ALWAYS treat the underlying cause", "SE is a sign of an air leak — the pneumothorax, bronchial tear, or oesophageal injury must be addressed first."), ("INSERT CHEST TUBE BEFORE milking", "Milking subcutaneous air without a functional drain achieves nothing and may worsen tension."), ("BRONCHOSCOPY for massive air leak", "Dramatic or increasing SE with massive chest tube output suggests major airway injury — investigate with bronchoscopy."), ("POCUS is more sensitive than CXR", "Ultrasound detects pneumothorax more reliably than plain radiograph, especially in early or small pneumothorax."), ("SMALL SE resolves spontaneously", "Grades 1–2 (neck/base of neck only) reabsorb on their own. No milking or invasive procedure required."), ("POSITIVE PRESSURE VENTILATION WORSENS SE", "Consider reducing tidal volumes and PEEP where clinically safe in ventilated patients with SE."), ("CAUTION: O₂ in COPD", "Use controlled low-flow O₂ in Type 2 respiratory failure — monitor for rising CO₂."), ("NEVER clamp the drain while milking", "This creates a closed system and risks tension pneumothorax."), ] for title, desc in rules: rd = [[ Paragraph(f"<b>{title}</b>", make_style('RT', fontSize=9.5, textColor=NAVY, fontName='Helvetica-Bold')), Paragraph(desc, make_style('RD', fontSize=9.5, leading=13)) ]] rt = Table(rd, colWidths=[5.5*cm, 11.1*cm]) rt.setStyle(TableStyle([ ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (0,0), 8), ('BACKGROUND', (0,0), (0,0), LIGHTYELLOW), ('LINEBELOW', (0,0), (-1,0), 0.5, colors.HexColor("#CCCCCC")), ])) story.append(rt) # ── REFERENCES ─────────────────────────────────────────────────────────────── spacer(10) section("12. REFERENCES & EVIDENCE BASE") refs = [ "Tintinalli JE et al. Tintinalli's Emergency Medicine: A Comprehensive Study Guide, 8th ed. McGraw-Hill.", "Barash PG et al. Barash, Cullen, and Stoelting's Clinical Anesthesia, 9th ed. Wolters Kluwer.", "Nouraei SAR et al. Classification and Management of Subcutaneous Emphysema: a 10-Year Experience. Ann R Coll Surg Engl. 2015; PMC4692895.", "Deakin C. The Management of Subcutaneous Emphysema in Pneumothorax. Current Pulmonology Reports. 2020.", "Cleveland Clinic. Subcutaneous Emphysema: What It Is, Causes & Treatment. my.clevelandclinic.org.", "Herald Open Access. High Flow Oxygen Therapy and Secondary Spontaneous Pneumothorax. 2021.", "ACLSCERTIFICATION.org. Chest Tubes: Indications, Care & Nursing Assessments.", ] for ref in refs: story.append(Paragraph(f"• {ref}", make_style('Ref', fontSize=8.5, leading=12, leftIndent=12, firstLineIndent=-8, spaceAfter=3, textColor=colors.HexColor("#333333")))) # ── DISCLAIMER ─────────────────────────────────────────────────────────────── spacer(8) disc_data = [[Paragraph( "<b>DISCLAIMER:</b> This protocol is for educational and clinical reference purposes. " "Clinical decisions must always be made by qualified healthcare professionals based on " "individual patient assessment, local guidelines, and institutional policies. " "Always follow your institution's current evidence-based protocols.", make_style('Disc', fontSize=8.5, textColor=colors.HexColor("#333333"), alignment=TA_JUSTIFY, leading=12))]] dt = Table(disc_data, colWidths=[16.6*cm]) dt.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHTGREY), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ('BOX', (0,0), (-1,-1), 1, NAVY), ])) story.append(dt) # ── BUILD ──────────────────────────────────────────────────────────────────── doc.build(story, onFirstPage=header_footer, onLaterPages=header_footer) print(f"PDF created: {OUTPUT}") PYEOF echo "Script written successfully"
cd /tmp/workspace/subcutaneous-emphysema && python generate_pdf.py
ls -lh /tmp/workspace/subcutaneous-emphysema/Subcutaneous_Emphysema_Protocol.pdf
Subcutaneous Emphysema Protocol
PDF Document · PDF
| Section | Content |
|---|---|
| 1 | Definition & Pathophysiology — causes table |
| 2 | Severity Grading — colour-coded Grade 1–5 table |
| 3 | Initial Assessment — clinical signs + investigations table |
| 4 | Oxygen Therapy Protocol — delivery devices, flow rates, duration per severity |
| 5 | Milking — Indications & Contraindications (colour-coded table) |
| 6 | Step-by-Step Milking Procedure with Gauze Roll (10 steps) |
| 7 | Blowhole Incision Technique (step-by-step) |
| 8 | Oxygen Mechanism — side-by-side comparison table (simple) |
| 9 | Monitoring Protocol — frequency + targets for all parameters |
| 10 | Management Algorithm — full decision flowchart |
| 11 | 8 Key Clinical Rules (never-miss rules) |
| 12 | References + Disclaimer |