CtrlK
BlogDocsLog inGet started
Tessl Logo

exporting-bulk-fhir

Kick off and harvest a FHIR Bulk Data $export (system-, group-, or patient-level) and stream the resulting NDJSON into a batch OpenMed de-identification + NER pipeline at cohort scale. Covers the async kickoff (Prefer respond-async) -> poll Content-Location -> download NDJSON flow, the Bulk Data Access IG, _type/_since filters, and feeding DocumentReference/DiagnosticReport notes into openmed.deidentify in batch. Use when the user needs population-scale note extraction from an EHR or data warehouse to feed OpenMed, mentions bulk export, $export, NDJSON, Flat FHIR, or cohort de-identification. Pairs before the OpenMed de-id/NER pipeline.

74

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

High

Do not use without reviewing

SKILL.md
Quality
Evals
Security

Quality

Content

82%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, highly actionable body: executable curl and Python for the entire kickoff → poll → download → de-id → NER chain, a numbered workflow with real checkpoints (poll-until-200, Retry-After, leakage-gate verification), and dense, well-signaled gotchas. It loses a little to redundancy between the Workflow, Hand-off, and Edge cases sections and keeps all detail inline rather than splitting some into reference files.

Suggestions

Tighten the overlap between the Workflow, Quick start, and Hand-off sections — e.g. reduce the Workflow to the step names and let the Quick start carry the commands — to trim repeated content.

Promote the de-id verification into an explicit workflow step with a feedback loop (e.g. 'Step 5: verify with openmed.eval leakage gates; if leakage is detected, adjust method/policy and re-run') instead of leaving it as an edge-case note.

Consider moving the Edge cases & gotchas detail (or the full streaming example) into a references/ file, keeping SKILL.md as a tighter overview with one-level-deep links.

DimensionReasoningScore

Conciseness

The body is efficient and assumes competence ('NDJSON is one resource per line — stream it; do not load the whole file'), but there is redundancy: the Workflow section restates the Quick start steps and the Hand-off section repeats the de-id-first point already made in the code comment and edge cases. This matches the 4 anchor ('efficient; minor instances of over-explanation that could be trimmed') rather than the fully lean 5 anchor.

4 / 5

Actionability

Guidance is fully executable: copy-paste curl commands for kickoff, polling, and download with the exact headers ('Prefer: respond-async', 'Content-Location'), and a complete Python note_text() extractor covering DocumentReference.content[].attachment.data and DiagnosticReport.presentedForm[].data, wired into openmed.deidentify and analyze_text. This matches the 5 anchor ('fully executable; copy-paste ready… covers the common cases'); not 4 because there are no gaps in the common path.

5 / 5

Workflow Clarity

A clear 7-step sequence exists with most checkpoints present: poll until 200, honour Retry-After/X-Progress, check requiresAccessToken, and 'Verify de-id with openmed.eval leakage gates… not F1 alone'. This avoids the missing-validation cap (verification is explicitly present for this batch operation), but the validate → fix → retry loop is described in prose in Edge cases rather than as explicit workflow steps, matching the 4 anchor rather than the 5 anchor's explicit validation steps and feedback loops.

4 / 5

Progressive Disclosure

Sections are well organized with clearly signaled one-level-deep pointers (scaffolding-smart-on-fhir, exporting-to-fhir, evaluating-with-leakage-gates, and the standards URLs). However, the ~145-line body inlines everything — the edge cases and the full streaming code could reasonably live in reference files — matching the 4 anchor ('good structure; most content appropriately placed; minor organization gaps') rather than a well-split 5.

4 / 5

Total

17

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An exemplary description: it states concrete, multi-step capabilities in third person, names the exact protocol flow and filters, and closes with an explicit 'Use when…' clause containing natural trigger terms with synonyms. Distinctiveness is high because the FHIR Bulk Data / OpenMed niche is unmistakable.

DimensionReasoningScore

Specificity

The description enumerates multiple concrete actions — 'Kick off and harvest a FHIR Bulk Data $export (system-, group-, or patient-level)', 'stream the resulting NDJSON into a batch OpenMed de-identification + NER pipeline', the 'async kickoff (Prefer respond-async) -> poll Content-Location -> download NDJSON flow', and '_type/_since filters' — giving comprehensive, non-generic coverage. It clearly matches the 5 anchor; there are no significant gaps in action coverage that would pull it to 4.

5 / 5

Completeness

It explicitly answers both 'what' (kickoff → poll → download NDJSON → batch feed into openmed.deidentify/NER) and 'when' ('Use when the user needs population-scale note extraction… mentions bulk export, $export, NDJSON, Flat FHIR, or cohort de-identification'). Both are present with concrete trigger phrases, exactly the 5 anchor; not 4 because the 'when' clause is fully explicit rather than merely adequate.

5 / 5

Trigger Term Quality

Trigger terms are natural and varied: 'bulk export, $export, NDJSON, Flat FHIR, or cohort de-identification', plus 'population-scale note extraction from an EHR or data warehouse'. These are the exact phrases a user needing this skill would say, including synonyms ($export/bulk export, NDJSON/Flat FHIR), matching the comprehensive 5 anchor rather than the 'a few natural terms missing' 4 anchor.

5 / 5

Distinctiveness Conflict Risk

The niche is clear — FHIR Bulk Data $export feeding an OpenMed batch de-id/NER pipeline — with distinctive tokens ($export, NDJSON, Flat FHIR, cohort de-identification) that are unlikely to fire for unrelated skills. It sits at the 'clear niche with distinct triggers; minimal conflict risk' 5 anchor; nothing in it is generic enough to warrant 4.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository
maziyarpanahi/openmed
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.