Ask OpenMed
Use this skill as the first pass when a request does not name a focused OpenMed
workflow. It selects an existing skill identifier; it does not process input,
download a model, call a service, or make a clinical decision. No mandatory
network call is part of this route.
Deterministic routing contract
Apply these rules in order:
- Normalize only the stated goal: lowercase it, trim surrounding whitespace,
and collapse repeated whitespace. Do not inspect or copy the data payload.
- Apply the intake boundary. If the goal matches an Intake row, select the
first matching intake skill even when the goal also names a later stage. If
sensitivity is unclear, its next handoff is the privacy gate:
deidentifying-clinical-text, before
extraction, exchange, or verification sees the parsed content.
- For a goal with no intake cue, apply the privacy override. If it asks to
analyze, extract, exchange, share, upload, or verify clinical or personal
content and is not explicitly marked safe, start at the privacy gate. The
only safe markers are
synthetic input, synthetic note, synthetic record, synthetic dataset, input is synthetic, data is synthetic,
already de-identified, and already deidentified. A marker does not count
when no, not, never, unknown, or uncertain occurs in the four
normalized words before it. Treat every ambiguous safety statement as
sensitive.
- Otherwise inspect the remaining tables in the fixed handoff order shown
below. Treat
each comma-separated cue as a case-insensitive substring of the normalized
goal, and select the first matching row. Every cue cell is a comma-separated
list of alternatives; conjunctions have no special meaning. Do not add
synonyms or infer cues from the payload. This stage order and row order
break every tie.
- If no row matches, use building-with-openmed
as the orientation fallback.
Route output should contain only the selected category, skill identifier,
matched rule index, and next handoff. Never echo the request, input values,
exception text, or detected spans into a log or report.
For a multi-stage request, route one stage at a time in this fixed handoff
order: intake → privacy → extraction → exchange → verification. A later
stage does not bypass the privacy gate merely because it was named first.
Intake
Choose the first skill for turning an external document or record format into
local, processable input.
| Goal cues |
First skill |
Continue with |
| laboratory table, lab table |
extracting-lab-tables |
privacy, then verification |
| scan, fax, image, PDF, CSV, table, document OCR |
ingesting-clinical-documents |
privacy, then extraction |
| C-CDA, CCD, CDA XML |
parsing-ccda-documents |
privacy, then extraction |
| HL7 v2, ADT, ORU, MDM, OBX, pipe-delimited feed |
parsing-hl7v2-messages |
privacy, then extraction |
| DICOM header, DICOM-SR metadata |
extracting-dicom-metadata |
privacy, then extraction |
| pull FHIR records, page FHIR records, FHIR server |
fetching-fhir-resources |
privacy, then extraction |
Privacy
Use the privacy table both for an explicit privacy goal and for the privacy
override. The first row is the default gate for unspecified sensitive input.
| Goal cues |
First skill |
Continue with |
| remove clinical identifiers, mask clinical identifiers, redact clinical text, anonymize clinical text, de-identify clinical text |
deidentifying-clinical-text |
extraction or exchange |
| find identifiers, detect identifiers, PII entities |
extracting-pii-entities |
de-identification or review |
| privacy policy, privacy profile |
configuring-privacy-policies |
de-identification |
| PHI in logs, PHI in errors, PHI in telemetry, no-PHI logging |
enforcing-nophi-logging |
verification |
| de-identify non-English text, multilingual de-identification |
deidentifying-multilingual-text |
extraction |
| stable pseudonyms, approved linkage pseudonyms |
pseudonymizing-for-gdpr |
verification |
Extraction
Choose the focused skill after intake and privacy handling when the request is
about finding or structuring clinical meaning.
| Goal cues |
First skill |
Continue with |
| diseases, drugs, anatomy, genes, clinical NER |
extracting-clinical-entities |
exchange or verification |
| custom entity labels, zero-shot extraction |
running-zeroshot-ner |
exchange or verification |
| housing, food, work, transport, SDOH |
extracting-sdoh |
verification |
| lab values, units, reference ranges, abnormal flags |
parsing-lab-values |
terminology or exchange |
| radiology findings, radiology measurements, radiology impression |
structuring-radiology-reports |
exchange or verification |
| note sections, clinical sections, section segmentation |
segmenting-clinical-sections |
extraction |
Exchange
Choose an exchange skill only after the source is safe to handle. These skills
may use a user-supplied endpoint or terminology service; this router itself
performs no network call.
Verification
Use verification routes for a stated release, safety, leakage, audit, risk, or
conformance check. If the source is not explicitly safe, the privacy override
still wins first.
Ambiguous goals and escalation examples
Use the privacy override and the fixed handoff order for ambiguous requests:
These are routing examples only. Keep all demonstrations synthetic or
placeholder-based, and keep route diagnostics free of source content.
1---2name: ask-openmed3description: Choose the first OpenMed workflow skill for an intake, privacy, extraction, exchange, or verification request using deterministic local routing. Use when a goal is broad, spans several clinical-data stages, or leaves the data-sensitivity status unclear; the privacy gate is selected before downstream work when raw clinical or personal content may be present.4license: Apache-2.05---67# Ask OpenMed89Use this skill as the first pass when a request does not name a focused OpenMed10workflow. It selects an existing skill identifier; it does not process input,11download a model, call a service, or make a clinical decision. No mandatory12network call is part of this route.1314## Deterministic routing contract1516Apply these rules in order:17181. Normalize only the stated goal: lowercase it, trim surrounding whitespace,19 and collapse repeated whitespace. Do not inspect or copy the data payload.202. Apply the intake boundary. If the goal matches an Intake row, select the21 first matching intake skill even when the goal also names a later stage. If22 sensitivity is unclear, its next handoff is the **privacy gate**:23 [deidentifying-clinical-text](../deidentifying-clinical-text/SKILL.md), before24 extraction, exchange, or verification sees the parsed content.253. For a goal with no intake cue, apply the privacy override. If it asks to26 analyze, extract, exchange, share, upload, or verify clinical or personal27 content and is not explicitly marked safe, start at the privacy gate. The28 only safe markers are `synthetic input`, `synthetic note`, `synthetic29 record`, `synthetic dataset`, `input is synthetic`, `data is synthetic`,30 `already de-identified`, and `already deidentified`. A marker does not count31 when `no`, `not`, `never`, `unknown`, or `uncertain` occurs in the four32 normalized words before it. Treat every ambiguous safety statement as33 sensitive.344. Otherwise inspect the remaining tables in the fixed handoff order shown35 below. Treat36 each comma-separated cue as a case-insensitive substring of the normalized37 goal, and select the first matching row. Every cue cell is a comma-separated38 list of alternatives; conjunctions have no special meaning. Do not add39 synonyms or infer cues from the payload. This stage order and row order40 break every tie.415. If no row matches, use [building-with-openmed](../building-with-openmed/SKILL.md)42 as the orientation fallback.4344Route output should contain only the selected category, skill identifier,45matched rule index, and next handoff. Never echo the request, input values,46exception text, or detected spans into a log or report.4748For a multi-stage request, route one stage at a time in this fixed handoff49order: **intake → privacy → extraction → exchange → verification**. A later50stage does not bypass the privacy gate merely because it was named first.5152## Intake5354Choose the first skill for turning an external document or record format into55local, processable input.5657| Goal cues | First skill | Continue with |58| --- | --- | --- |59| laboratory table, lab table | [extracting-lab-tables](../extracting-lab-tables/SKILL.md) | privacy, then verification |60| scan, fax, image, PDF, CSV, table, document OCR | [ingesting-clinical-documents](../ingesting-clinical-documents/SKILL.md) | privacy, then extraction |61| C-CDA, CCD, CDA XML | [parsing-ccda-documents](../parsing-ccda-documents/SKILL.md) | privacy, then extraction |62| HL7 v2, ADT, ORU, MDM, OBX, pipe-delimited feed | [parsing-hl7v2-messages](../parsing-hl7v2-messages/SKILL.md) | privacy, then extraction |63| DICOM header, DICOM-SR metadata | [extracting-dicom-metadata](../extracting-dicom-metadata/SKILL.md) | privacy, then extraction |64| pull FHIR records, page FHIR records, FHIR server | [fetching-fhir-resources](../fetching-fhir-resources/SKILL.md) | privacy, then extraction |6566## Privacy6768Use the privacy table both for an explicit privacy goal and for the privacy69override. The first row is the default gate for unspecified sensitive input.7071| Goal cues | First skill | Continue with |72| --- | --- | --- |73| remove clinical identifiers, mask clinical identifiers, redact clinical text, anonymize clinical text, de-identify clinical text | [deidentifying-clinical-text](../deidentifying-clinical-text/SKILL.md) | extraction or exchange |74| find identifiers, detect identifiers, PII entities | [extracting-pii-entities](../extracting-pii-entities/SKILL.md) | de-identification or review |75| privacy policy, privacy profile | [configuring-privacy-policies](../configuring-privacy-policies/SKILL.md) | de-identification |76| PHI in logs, PHI in errors, PHI in telemetry, no-PHI logging | [enforcing-nophi-logging](../enforcing-nophi-logging/SKILL.md) | verification |77| de-identify non-English text, multilingual de-identification | [deidentifying-multilingual-text](../deidentifying-multilingual-text/SKILL.md) | extraction |78| stable pseudonyms, approved linkage pseudonyms | [pseudonymizing-for-gdpr](../pseudonymizing-for-gdpr/SKILL.md) | verification |7980## Extraction8182Choose the focused skill after intake and privacy handling when the request is83about finding or structuring clinical meaning.8485| Goal cues | First skill | Continue with |86| --- | --- | --- |87| diseases, drugs, anatomy, genes, clinical NER | [extracting-clinical-entities](../extracting-clinical-entities/SKILL.md) | exchange or verification |88| custom entity labels, zero-shot extraction | [running-zeroshot-ner](../running-zeroshot-ner/SKILL.md) | exchange or verification |89| housing, food, work, transport, SDOH | [extracting-sdoh](../extracting-sdoh/SKILL.md) | verification |90| lab values, units, reference ranges, abnormal flags | [parsing-lab-values](../parsing-lab-values/SKILL.md) | terminology or exchange |91| radiology findings, radiology measurements, radiology impression | [structuring-radiology-reports](../structuring-radiology-reports/SKILL.md) | exchange or verification |92| note sections, clinical sections, section segmentation | [segmenting-clinical-sections](../segmenting-clinical-sections/SKILL.md) | extraction |9394## Exchange9596Choose an exchange skill only after the source is safe to handle. These skills97may use a user-supplied endpoint or terminology service; this router itself98performs no network call.99100| Goal cues | First skill | Continue with |101| --- | --- | --- |102| FHIR R4 resources, export to FHIR | [exporting-to-fhir](../exporting-to-fhir/SKILL.md) | bundle or conformance verification |103| FHIR transaction Bundle, FHIR batch Bundle | [assembling-fhir-bundles](../assembling-fhir-bundles/SKILL.md) | conformance verification |104| FHIR Bulk Data export, bulk FHIR | [exporting-bulk-fhir](../exporting-bulk-fhir/SKILL.md) | privacy, then extraction |105| SMART-on-FHIR app, SMART-on-FHIR launch | [scaffolding-smart-on-fhir](../scaffolding-smart-on-fhir/SKILL.md) | conformance verification |106| terminology validation, terminology expansion, terminology translation, terminology server | [querying-terminology-service](../querying-terminology-service/SKILL.md) | exchange or verification |107108## Verification109110Use verification routes for a stated release, safety, leakage, audit, risk, or111conformance check. If the source is not explicitly safe, the privacy override112still wins first.113114| Goal cues | First skill | Decision or handoff |115| --- | --- | --- |116| residual identifiers, de-identification leakage | [auditing-deid-leakage](../auditing-deid-leakage/SKILL.md) | block release on a finding |117| de-identification audit trail, no-PHI audit trail | [auditing-deidentification-runs](../auditing-deidentification-runs/SKILL.md) | retain offsets, hashes, and provenance |118| leakage gate, release leakage | [evaluating-with-leakage-gates](../evaluating-with-leakage-gates/SKILL.md) | fail closed on leakage |119| re-identification risk, k-anonymity, quasi-identifiers | [reviewing-reidentification-risk](../reviewing-reidentification-risk/SKILL.md) | review residual risk |120| Safe Harbor | [auditing-safe-harbor-checklist](../auditing-safe-harbor-checklist/SKILL.md) | review the no-PHI report |121| FHIR US Core, USCDI conformance | [validating-us-core](../validating-us-core/SKILL.md) | correct the resource before exchange |122| HIPAA privacy checklist, HIPAA security checklist | [checking-hipaa-compliance](../checking-hipaa-compliance/SKILL.md) | address gaps before release |123124## Ambiguous goals and escalation examples125126Use the privacy override and the fixed handoff order for ambiguous requests:127128- **“Turn this clinical note into FHIR.”** The sensitivity is unstated, so129 start at [deidentifying-clinical-text](../deidentifying-clinical-text/SKILL.md),130 then hand off to [extracting-clinical-entities](../extracting-clinical-entities/SKILL.md)131 and [exporting-to-fhir](../exporting-to-fhir/SKILL.md).132- **“Extract medications from a synthetic note.”** The input is explicitly133 synthetic, so route directly to134 [extracting-clinical-entities](../extracting-clinical-entities/SKILL.md).135- **“OCR this image and extract findings.”** Route to136 [ingesting-clinical-documents](../ingesting-clinical-documents/SKILL.md),137 then apply the privacy gate before extraction.138- **“Is this dataset safe to share?”** If de-identification is not stated,139 start with [deidentifying-clinical-text](../deidentifying-clinical-text/SKILL.md)140 and then use [auditing-deid-leakage](../auditing-deid-leakage/SKILL.md).141- **“Verify this clinical dataset; it is not de-identified.”** The negated142 safety statement does not count as a safe marker, so start at143 [deidentifying-clinical-text](../deidentifying-clinical-text/SKILL.md).144- **“Which OpenMed workflow fits?”** Use the orientation fallback145 [building-with-openmed](../building-with-openmed/SKILL.md), then re-route once146 the goal and sensitivity status are explicit.147148These are routing examples only. Keep all demonstrations synthetic or149placeholder-based, and keep route diagnostics free of source content.