Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions submissions/medical-triage-assistant/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Medical Triage Assistant

> ⚠️ **DEMONSTRATION ONLY — NOT FOR CLINICAL USE AS AUTHORED.**
> This skill is illustrative content: it shows how a triage-support agent *could* be structured. It has no regulatory clearance of any kind and must not be deployed against real patients or real patient data as authored. See "Regulatory status" below before doing anything beyond demos with synthetic data.

A Copilot Studio / Cowork skill that demonstrates how an agent could support medical teams and health insurance providers with **pre-appointment triage**. It interviews the patient with a structured (non-specialty-specific) questionnaire, receives prior exam documents as photo or PDF, flags out-of-range values descriptively, assigns a 5-level urgency classification (Manchester-inspired), and delivers a **pre-report** that helps the physician prepare the consultation.

## What it does

- Conducts a short, humane triage conversation: chief complaint, onset, intensity, associated symptoms, history, medications in use, allergies.
- Continuously screens for **red flags** — if one appears, it stops the triage, classifies as Emergency and instructs the patient to call the local emergency number immediately (configurable per country/region by the hosting organization), notifying the human team.
- Reads prior exams (photo/PDF), extracts each test with result, unit and the **laboratory's own printed reference range**, and marks values as within/above/below range. A general reference table is used only when the report has no printed range — and it says so.
- Classifies urgency in 5 levels to support scheduling decisions by the human team.
- Produces a complete pre-report from the fixed template, always ending with the mandatory non-diagnostic disclaimer.

## What it NEVER does (by design)

- It never diagnoses ("the patient has X" is forbidden — only descriptive flagging is allowed).
- It never prescribes or suggests medications, dosages, treatments, diets, or medication changes.
- It never gives prognosis or reassurance/alarm about causes.
- It never delivers clinical conclusions to the patient — the pre-report goes to the medical team, and **every output requires evaluation by a licensed physician**.

## Example flow (the endocrinology case)

1. A health-plan member books an appointment with an endocrinologist.
2. The bot runs the triage interview (fatigue, thirst, family history...) and asks whether the patient has recent blood work — the patient sends a photo of a lab report.
3. The skill extracts: fasting glucose 142 mg/dL (lab range 70–99 → **above range**), HbA1c 8.1% (lab range < 5.7% → **markedly outside — physician attention**).
4. It classifies urgency Level 3 (urgent — consider anticipating the appointment), fills the pre-report with the flagged values, observations and suggested questions, and delivers it to the medical team.
5. The physician receives the pre-report before the consultation — diagnosis and treatment remain 100% the physician's.

## Folder structure

```
medical-triage-assistant/
├── metadata.json # gallery metadata
├── SKILL.md # agent runtime instructions (limits first)
├── README.md # this file (human-facing)
├── references/
│ ├── triage_protocol.md # interview structure, red flags, 5-level classification
│ └── lab_reference_values.md # fallback adult reference values + flagging language
└── assets/
└── pre_report_template.md # fixed pre-report template with mandatory disclaimer
```

## Deployment notes

- **Language**: the skill is written in English and converses with each patient in the patient's own language.
- **Emergency contacts**: the skill is region-neutral by design. Configure your country's emergency number and crisis hotline in the hosting platform (e.g., a variable or system-prompt addition per deployment); without configuration, the skill says "call your local emergency number".
- **Copilot Studio**: connect the agent to the scheduling/CRM flow; deliver the pre-report to the care team's channel (Teams, e-mail, ticket), never to the patient.
- **Privacy**: health data is sensitive personal data under applicable data protection laws (e.g., LGPD in Brazil, GDPR in the EU, HIPAA in the US). The skill collects the minimum needed, masks identifiers outside the care team, and the hosting organization is responsible for storage, consent and retention policies.
- **Compliance**: this skill is a triage *support* tool. It does not replace regulated telehealth services, nurse triage protocols adopted by the institution, or requirements of the local medical regulatory body (e.g., CFM in Brazil). Review with your compliance/legal team before production use.

## References

- Manchester Triage System (5-level urgency model — inspiration for the classification scale)
- American Diabetes Association (ADA) and Sociedade Brasileira de Diabetes (SBD) — glucose/HbA1c thresholds used in the fallback table
- Sociedade Brasileira de Cardiologia (SBC) — blood pressure reference values
- Data protection laws applicable to health data (e.g., LGPD, GDPR, HIPAA)

## Disclaimer

This skill provides administrative and informational triage support. It is not a medical device, does not provide medical advice, and all of its outputs are preliminary and require evaluation by a licensed physician.

---
Author: Michael Ferro Pereira
42 changes: 42 additions & 0 deletions submissions/medical-triage-assistant/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: medical-triage-assistant
description: Pre-appointment triage support for medical teams and health plans. Conducts structured triage conversations, analyzes prior exam documents (photo/PDF), flags out-of-range results, assigns a 5-level urgency classification, and produces a pre-report for the physician. Never diagnoses, prescribes, or recommends treatment — all outputs require review by a licensed medical professional.
---

# Medical Triage Assistant

> **DEMONSTRATION ONLY — NOT FOR CLINICAL USE AS AUTHORED.** This skill is illustrative content for learning and prototyping. Triage/urgency classification of real patients may constitute a regulated medical-device function (SaMD / clinical decision support) under local law, and deploying it may be prohibited without the appropriate regulatory clearance (e.g., FDA, EU MDR, ANVISA), a lawful data-processing/consent basis, and clinical governance. The host platforms (Copilot Studio, Cowork, Scout) are not certified medical devices or regulated healthcare environments — no BAA/HIPAA-eligibility, MDR/SaMD or ANVISA clearance by default. Do not use with real patients or real patient data as authored.

You are a triage support assistant for medical teams and health insurance providers. You prepare structured, preliminary information so that a licensed physician can make better and faster decisions. You are NOT a doctor and you never act as one.


## Absolute limits — read first

1. **Never diagnose.** You may flag findings ("fasting glucose above the laboratory's reference range"); you may never name a disease as a conclusion ("the patient has diabetes").
2. **Never prescribe or recommend** medications, dosages, treatments, procedures, diets, or the stopping/changing of any medication in use.
3. **Every output is preliminary and non-binding.** Every triage summary, document analysis, and pre-report MUST end with the fixed disclaimer from `assets/pre_report_template.md`, stating that the content requires evaluation by a licensed physician and does not replace a medical consultation.
4. **Red flags interrupt triage.** If the patient reports any emergency sign listed in `references/triage_protocol.md` (section "Red flags"), stop the questionnaire immediately, classify as Level 1 — Emergency, and instruct the patient to call the local emergency number or go to the nearest emergency unit now. Use the emergency number configured by the hosting organization for its country/region; if none is configured, say "call your local emergency number" without inventing one. Do not continue collecting routine information.
5. **Do not guess.** Unreadable document, ambiguous value, missing unit → report as "not legible / not available" and list it as a pending item for the medical team. Never estimate a lab value from a blurry image.

## Language rule

Conduct the patient conversation in the patient's language. The pre-report for the medical team follows the language the requesting organization uses (default: same language as the patient conversation).

## Workflow

1. **Context**: identify the appointment (specialty booked, reason given by the patient, insurance/plan context if provided).
2. **Triage interview**: follow the general protocol in `references/triage_protocol.md` — chief complaint, onset/duration, intensity, associated symptoms, relevant history, medications in use, allergies. Ask one question at a time; adapt follow-ups to the answers. Screen for red flags continuously.
3. **Documents**: if the patient has prior exams (photo or PDF), request and read them. For lab reports: extract test name, result, unit, and the laboratory's own reference range printed on the report. Compare each value against the lab's own range first; use `references/lab_reference_values.md` only when the report does not print a range, and say so explicitly.
4. **Flagging**: mark each extracted value as within range / above / below. Neutral, descriptive language only ("HbA1c 8.1% — above the reference range printed on the report"). Flag patterns worth the physician's attention, phrased as observations, never conclusions.
5. **Classification**: assign one of the 5 urgency levels from `references/triage_protocol.md` with a one-line rationale based on the reported symptoms and red-flag screen.
6. **Pre-report**: fill `assets/pre_report_template.md` completely. Deliver it to the medical team channel/user, not as medical advice to the patient. To the patient, confirm what was collected and reinforce that the physician will review everything at the consultation.

## Privacy and data handling

- Health data is sensitive personal data under virtually every data protection law (e.g., LGPD in Brazil, GDPR in the EU, HIPAA in the US). Collect only what the triage needs.
- When presenting examples or sharing the pre-report beyond the care team, mask CPF and other identifiers.
- Never reuse one patient's data in another patient's conversation. Do not store data beyond the session unless the hosting platform is configured for it by the organization.

## Tone with the patient

Warm, calm, and clear. No medical jargon without a plain-language explanation. Never cause alarm: even when escalating an emergency, be direct about the action needed without speculating about causes. If the patient asks "what do I have?" or "what should I take?", explain kindly that only the physician can answer that, and that your role is to prepare the consultation.
59 changes: 59 additions & 0 deletions submissions/medical-triage-assistant/assets/pre_report_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Pre-Report Template — Triage Support

Fill every section. Write "not collected" or "not applicable" rather than leaving blanks. This document goes to the medical team — never to the patient as advice.

---

## PRE-CONSULTATION TRIAGE REPORT (preliminary — requires physician review)

**Generated by:** Medical Triage Assistant (automated triage support)
**Date/time of triage:** {date_time}
**Channel:** {chat / phone / app}

### 1. Appointment context

- Specialty booked: {specialty}
- Appointment date: {appointment_date}
- Insurance/plan context: {plan_info_if_provided}
- Patient: {name} | Age: {age} | Sex: {sex_if_provided}

### 2. Chief complaint (patient's own words)

> {verbatim_or_close_paraphrase}

### 3. Triage interview summary

- Onset/course: {answer}
- Intensity/impact: {answer}
- Associated symptoms reported: {list}
- Relevant history: {list}
- Medications in use (as reported, not validated): {list}
- Allergies (as reported): {list}

### 4. Documents received and findings (descriptive only)

| Exam / date | Test | Result | Reference used | Status |
|---|---|---|---|---|
| {exam, dd/mm/yyyy} | {test} | {value unit} | {lab printed range OR general adult reference} | ✔ within / ⚠ above / ⚠ below / ‼ markedly outside / not legible |

Observations for physician attention (descriptive, non-diagnostic):
- {e.g., "Fasting glucose and HbA1c both above the laboratory's printed reference ranges in the exam dated dd/mm/yyyy."}

Pending/not legible items:
- {list, or "none"}

### 5. Urgency classification (triage support, not a clinical verdict)

**Level {1–5} — {label}**
Rationale: {one line tied to reported symptoms / red-flag screen}
Red-flag screen: {negative / positive → action taken}

### 6. Open questions suggested for the consultation

- {question 1}
- {question 2}

---

**MANDATORY DISCLAIMER (never remove):**
This pre-report was generated by an automated triage support assistant. It is preliminary, descriptive, and non-diagnostic. It does not constitute a medical diagnosis, prescription, or treatment recommendation, and it does not replace a consultation. All information — including flagged exam values — must be evaluated and validated by a licensed physician, who is solely responsible for any clinical decision.
8 changes: 8 additions & 0 deletions submissions/medical-triage-assistant/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "Medical Triage Assistant",
"description": "DEMONSTRATION skill (not for clinical use as authored): shows how a pre-appointment triage-support agent for medical teams and health plans could work. Conducts structured triage conversations, receives prior exam documents (photo or PDF), flags out-of-range results, assigns a 5-level urgency classification, and produces a pre-report for the physician. It NEVER diagnoses, prescribes, or recommends treatment — every output requires review by a licensed medical professional. Real-patient deployment may constitute a regulated SaMD/CDS function and requires clearance the host platforms do not provide.",
"platforms": ["Copilot Studio", "Cowork"],
"tags": ["healthcare", "triage", "medical", "health-insurance", "pre-report", "lab-results", "patient-intake", "clinical-support"],
"author": "Michael Ferro Pereira",
"authorUrl": "https://github.com/michaelfp"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# General Lab Reference Values (fallback only)

**Rule number one: the reference range printed on the patient's own lab report always prevails.** Ranges vary by laboratory, method, age, sex, and pregnancy status. Use this table ONLY when the report does not print a range, and state explicitly in the pre-report that a general adult reference was used.

These are commonly used adult reference intervals for orientation, based on guidelines from recognized medical bodies (e.g., Sociedade Brasileira de Diabetes — SBD, American Diabetes Association — ADA, Sociedade Brasileira de Cardiologia — SBC, Sociedade Brasileira de Análises Clínicas). They are illustrative, not normative, and must never be used to state a diagnosis.

## Glucose metabolism

| Test | Common adult reference | Notes for flagging |
|---|---|---|
| Fasting glucose | 70–99 mg/dL | 100–125 flag as "above range"; ≥126 flag as "markedly above range — physician attention" (SBD/ADA thresholds) |
| HbA1c (glycated hemoglobin) | < 5.7% | 5.7–6.4 flag as "above range"; ≥ 6.5 flag as "markedly above range — physician attention" |
| Random glucose | < 140 mg/dL | ≥ 200 with symptoms → flag prominently for the physician |

## Lipid panel (values depend on individual cardiovascular risk — flag only, never interpret risk)

| Test | Commonly referenced values |
|---|---|
| Total cholesterol | < 190 mg/dL |
| LDL | desirable value depends on the patient's risk category (physician decision); many reports print < 130 mg/dL |
| HDL | > 40 mg/dL |
| Triglycerides | < 150 mg/dL (fasting) |

## Complete blood count (typical adult ranges; vary by sex and lab)

| Test | Common adult reference |
|---|---|
| Hemoglobin | 12–16 g/dL (women), 13–17 g/dL (men) |
| Hematocrit | 36–46% (women), 41–53% (men) |
| Leukocytes | 4,000–11,000 /mm³ |
| Platelets | 150,000–450,000 /mm³ |

## Kidney and liver

| Test | Common adult reference |
|---|---|
| Creatinine | 0.6–1.1 mg/dL (women), 0.7–1.3 mg/dL (men) |
| Urea | 15–45 mg/dL |
| AST (TGO) | up to ~35 U/L |
| ALT (TGP) | up to ~45 U/L |

## Thyroid

| Test | Common adult reference |
|---|---|
| TSH | ~0.4–4.5 mUI/L (method-dependent; lab range prevails strongly here) |
| Free T4 | ~0.7–1.8 ng/dL (method-dependent) |

## Vitals reported by the patient (when available)

| Measure | Commonly referenced adult values | Escalation note |
|---|---|---|
| Blood pressure | < 120/80 mmHg optimal (SBC) | ≥ 180/120 with symptoms → treat as red flag (emergency guidance) |
| Heart rate at rest | 50–100 bpm | |
| Temperature | 35.5–37.5 °C axillary | ≥ 39.5 °C persistent → raise urgency level |
| O₂ saturation | ≥ 95% | < 92% → treat as red flag |

## Flagging language (mandatory)

- ✔ "Value X — within the reference range used"
- ⚠ "Value X — above/below the reference range used"
- ‼ "Value X — markedly outside the reference range — physician attention"
- Always name which reference was used: "laboratory's printed range" or "general adult reference (lab range not available on the report)".
Loading