Only validate fields with cardinality starting with "1" as required.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionfhir-developer-skillExecute the skills CLI command in your project's root directory to begin installation:
Fetches fhir-developer-skill from anthropics/healthcare and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate fhir-developer-skill. Access via /fhir-developer-skill in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
191
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
191
stars
| Code | When to Use |
|---|---|
200 OK |
Successful read, update, or search |
201 Created |
Successful create (include Location header) |
204 No Content |
Successful delete |
400 Bad Request |
Malformed JSON, wrong resourceType |
401 Unauthorized |
Missing, expired, revoked, or malformed token (RFC 6750) |
403 Forbidden |
Valid token but insufficient scopes |
404 Not Found |
Resource doesn't exist |
412 Precondition Failed |
If-Match ETag mismatch (NOT 400!) |
422 Unprocessable Entity |
Missing required fields, invalid enum values, business rule violations |
| Resource | Required Fields | Everything Else |
|---|---|---|
| Patient | (none) | All optional |
| Observation | status, code |
Optional |
| Encounter | status, class |
Optional (including subject, period) |
| Condition | subject |
Optional (including code, clinicalStatus) |
| MedicationRequest | status, intent, medication[x], subject |
Optional |
| Medication | (none) | All optional |
| Bundle | type |
Optional |
Only validate fields with cardinality starting with "1" as required.
| Cardinality | Required? |
|---|---|
0..1, 0..* |
NO |
1..1, 1..* |
YES |
Common mistake: Making subject or period required on Encounter. They are 0..1 (optional).
Invalid enum values must return 422 Unprocessable Entity.
male | female | other | unknown
registered | preliminary | final | amended | corrected | cancelled | entered-in-error | unknown
planned | arrived | triaged | in-progress | onleave | finished | cancelled | entered-in-error | unknown
| Code | Display | Use |
|---|---|---|
AMB |
ambulatory | Outpatient visits |
IMP |
inpatient encounter | Hospital admissions |
EMER |
emergency | Emergency department |
VR |
virtual | Telehealth |
active | recurrence | relapse | inactive | remission | resolved
unconfirmed | provisional | differential | confirmed | refuted | entered-in-error
active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
document | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Python/FastAPI:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
def operation_outcome(severity: str, code: str, diagnostics: str):
return {
"resourceType": "OperationOutcome",
"issue": [{"severity": severity, "code": code, "diagnostics": diagnostics}]
}
VALID_OBS_STATUS = {"registered", "preliminary", "final", "amended",
"corrected", "cancelled", "entered-in-error", "unknown"}
@app.post("/Observation", status_code=201)
async def create_observation(data: dict):
if not data.get("status"):
return JSONResponse(status_code=422, content=operation_outcome(
"error", "required", "Observation.status is required"
), media_type="application/fhir+json")
if data["status"] not in VALID_OBS_STATUS:
return JSONResponse(status_code=422, content=operation_outcome(
"error", "value", f"Invalid status '{data['status']}'"
), media_type="application/fhir+json")
# ... create resource
TypeScript/Express:
const VALID_OBS_STATUS = new Set(['registered', 'preliminary', 'final', 'amended',
'corrected', 'cancelled', 'entered-in-error', 'unknown']);
app.post('/Observation', (req, res) => {
if (!req.body.status) {
return res.status(422).contentType('application/fhir+json')
.json(operationOutcome('error', 'required', 'Observation.status is required'));
}
if (!VALID_OBS_STATUS.has(req.body.status)) {
return res.status(422).contentType('application/fhir+json')
.json(operationOutcome('error', 'value', `Invalid status '${req.body.status}'`));
}
// ... create resource
});
Pydantic v2 Models (use Literal, not const=True):
from typing import Literal
from pydantic import BaseModel
class Patient(BaseModel):
resourceType: Literal["Patient"] = "Patient"
id: str | None = None
gender: Literal["male", "female", "other", "unknown"] | None = None
| System | URL |
|---|---|
| LOINC | http://loinc.org |
| SNOMED CT | http://snomed.info/sct |
| RxNorm | http://www.nlm.nih.gov/research/umls/rxnorm |
| ICD-10 | http://hl7.org/fhir/sid/icd-10 |
| v3-ActCode | http://terminology.hl7.org/CodeSystem/v3-ActCode |
| Observation Category | http://terminology.hl7.org/CodeSystem/observation-category |
| Condition Clinical | http://terminology.hl7.org/CodeSystem/condition-clinical |
| Condition Ver Status | http://terminology.hl7.org/CodeSystem/condition-ver-status |
| Code | Description |
|---|---|
8867-4 |
Heart rate |
8480-6 |
Systolic blood pressure |
8462-4 |
Diastolic blood pressure |
8310-5 |
Body temperature |
2708-6 |
Oxygen saturation (SpO2) |
Coding - Used by Encounter.class:
{"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "AMB"}
CodeableConcept - Used by Observation.code, Condition.code:
{"coding": [{"system": "http://loinc.org", "code": "8480-6"}], "text": "Systolic BP"}
{"reference": "Patient/123", "display": "John Smith"}
{"system": "http://hospital.example.org/mrn", "value": "12345"}
| Mistake | Correct Approach |
|---|---|
Making subject or period required on Encounter |
Both are 0..1 (optional). Only status and class are required |
Using CodeableConcept for Encounter.class |
class uses Coding directly: {"system": "...", "code": "AMB"} |
| Returning 400 for ETag mismatch | Use 412 Precondition Failed for If-Match failures |
| Returning 400 for invalid enum values | Use 422 Unprocessable Entity for validation errors |
| Forgetting Content-Type header | Always set Content-Type: application/fhir+json |
| Missing Location header on create | Return Location: /Patient/{id} with 201 Created |
For complete JSON examples of all resources, see Make data-driven prioritization decisions faster Draft PRDs, status updates, and stakeholder presentations Example Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement Save 3-5 hours/week on communication overhead Prerequisites Time Estimate 30-60 minutes to see productivity improvements Steps Common Pitfalls ✓ Do ✗ Don't 💡 Pro Tips ✓ Use when Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work. ✗ Avoid when Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed. mattpocock/skills parcadei/continuous-claude-v3 cursor/plugins ailabs-393/ai-labs-claude-skills pproenca/dot-skills ailabs-393/ai-labs-claude-skills I recommend fhir-developer-skill for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area. We added fhir-developer-skill from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront. fhir-developer-skill fits our agent workflows well — practical, well scoped, and easy to wire into existing repos. Useful defaults in fhir-developer-skill — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows. fhir-developer-skill fits our agent workflows well — practical, well scoped, and easy to wire into existing repos. fhir-developer-skill has been reliable in day-to-day use. Documentation quality is above average for community skills. Registry listing for fhir-developer-skill matched our evaluation — installs cleanly and behaves as described in the markdown. Keeps context tight: fhir-developer-skill is the kind of skill you can hand to a new teammate without a long onboarding doc. fhir-developer-skill reduced setup friction for our internal harness; good balance of opinion and flexibility. Registry listing for fhir-developer-skill matched our evaluation — installs cleanly and behaves as described in the markdown. showing 1-10 of 69✓Stakeholder Communication
✓Implementation Guide
Best Practices
When to Use This
Learning Path
Related Skills
grill-me
711Productivitysame categorypremortem
218Productivitysame categorydeslop
165Productivitysame categorytravel-planner
147Productivitysame categoryframer-motion
141Productivitysame categorynutritional-specialist
141Productivitysame categoryReviews
4.5★★★★★69 reviewsNNaina Verma★★★★★Dec 28, 2024MMaya Lopez★★★★★Dec 28, 2024KKofi Taylor★★★★★Dec 12, 2024OOmar Sharma★★★★★Dec 12, 2024DDhruvi Jain★★★★★Dec 8, 2024MMaya White★★★★★Dec 8, 2024OOshnikdeep★★★★★Nov 27, 2024OOmar Mehta★★★★★Nov 19, 2024KKofi Lopez★★★★★Nov 19, 2024LLayla Patel★★★★★Nov 3, 20241 / 7Discussion
Comments — not star reviews