
Building SDC-based clinical forms that clinicians actually use requires specific design patterns. Four cover most production form-authoring workflows.
Pattern 1: Item-linked to StructureDefinition. Each Questionnaire item references a specific element in a target StructureDefinition (e.g., Observation.valueQuantity.value). SDC $extract uses these links to create structured resources.
Pattern 2: Conditional item visibility. Use enableWhen for simple conditions, enableWhenExpression (FHIRPath) for complex logic. Real intake forms need both.
Pattern 3: Calculated fields. calculatedExpression computes derived values (BMI, PHQ-9 total). Reduces clinician data entry.
Pattern 4: Multi-page navigation. Long forms need progressive disclosure. Group items into groups; render one group per page.
Renderer capability requirements
| Feature | Renderer must support |
|---|---|
| Item-to-resource linkage | Extract via definition extension |
| enableWhen expressions | FHIRPath execution |
| Calculated expressions | FHIRPath execution |
| Multi-page navigation | Group-level render |
| Progress save | in-progress status handling |
Vendor state (mid-2026)
| Renderer | Definition linkage | enableWhen expr | Calculated | Multi-page |
|---|---|---|---|---|
| LHC-Forms | Full | Full | Full | Yes |
| Aidbox Formbox | Full | Full | Full | Yes |
| Smile CDR SDC | Full | Full | Full | Yes |
| Firely SDC.NET | Full | Partial | Partial | Yes |
Common form-building mistakes
1. Ignoring definition extension → can't auto-extract. 2. Using only basic enableWhen → breaks on multi-condition logic. 3. Computing derived values client-side → inconsistent with server extraction. 4. Single-page long forms → clinician friction.
SDC form building is production-mature. Get the four patterns right and the forms fit clinical workflow.
