|
1 | 1 | # Aidbox Forms Renderer |
2 | 2 |
|
3 | | -Minimal React renderer for HL7® FHIR® Questionnaires. State is always a canonical `QuestionnaireResponse`, so the data you display is the data you can submit. |
| 3 | +Minimal React renderer for HL7® FHIR® Questionnaires |
4 | 4 |
|
5 | 5 | ```tsx |
6 | 6 | import { Renderer, type Questionnaire, type QuestionnaireResponse } from "aidbox-forms-renderer"; |
@@ -30,4 +30,84 @@ export function IntakeForm() { |
30 | 30 |
|
31 | 31 | Useful scripts: `npm run dev` (playground), `npm run build` (type-check + bundle), `npm test`, `npm run lint`. |
32 | 32 |
|
33 | | -Architecture and rationale live as doc comments in the source (`lib/state/`, `lib/form-provider.tsx`, `lib/questionnaire-renderer.tsx`). |
| 33 | + |
| 34 | + |
| 35 | +# Development Roadmap (Q4 2025) |
| 36 | + |
| 37 | +This roadmap divides implementation milestones by month. |
| 38 | +Each milestone lists the core features and extensions required to reach full compliance with the **HL7 FHIR Structured Data Capture (SDC)** specification. |
| 39 | + |
| 40 | +## 🎯 **October 2025 — Core Questionnaire Rendering** |
| 41 | + |
| 42 | +Focus: Establish baseline FHIR Questionnaire support and base rendering logic. |
| 43 | + |
| 44 | +* [ ] **Core Questionnaire Resource** |
| 45 | + * [ ] Support `Questionnaire.item` elements (text, type, linkId, required, repeats) |
| 46 | + * [ ] Implement display of `prefix`, `text`, `item.type` |
| 47 | + * [ ] Apply constraints: `minLength`, `maxLength`, `minValue`, `maxValue`, `maxOccurs` |
| 48 | + * [ ] Enable `readOnly`, `initial`, and `defaultValue` behavior |
| 49 | + * [ ] Support FHIR `enableWhen` conditions and nested groups |
| 50 | + * [ ] Render `item.control` and `item.control.displayCategory` extensions (basic) |
| 51 | +* [ ] **Questionnaire Navigation & Layout** |
| 52 | + * [ ] Implement group hierarchy rendering |
| 53 | + * [ ] Respect `hidden` and `displayCategory` controls |
| 54 | + * [ ] Add label localization and prefix rendering |
| 55 | +* [ ] **Input Controls** |
| 56 | + * [ ] Map FHIR types → UI components (`string`, `boolean`, `integer`, `choice`, `date`, `quantity`, etc.) |
| 57 | + * [ ] Render choice options (`answerOption`, `answerValueSet`) |
| 58 | + * [ ] Support open-choice types |
| 59 | +* [ ] **Basic Validation** |
| 60 | + * [ ] Validate required questions |
| 61 | + * [ ] Validate numeric and string bounds |
| 62 | + * [ ] Validate answer cardinality (`repeats`, `maxOccurs`) |
| 63 | + |
| 64 | +## ⚙️ **November 2025 — Advanced Form Rendering & Behavior** |
| 65 | + |
| 66 | +Focus: Interactive logic, calculations, adaptive elements, and modular assembly. |
| 67 | + |
| 68 | +* [ ] **Advanced Form Rendering** |
| 69 | + * [ ] Implement `sdc-questionnaire-itemControl` full support |
| 70 | + * [ ] Handle `appearance` extension rendering hints |
| 71 | + * [ ] Support `rendering-style`, `rendering-xhtml`, and `markdown` items |
| 72 | +* [ ] **Form Behavior & Calculation** |
| 73 | + * [ ] Implement calculated expressions via `calculatedExpression` |
| 74 | + * [ ] Dynamic enablement: `enableWhenExpression` |
| 75 | + * [ ] Validation expressions: `constraint`, `constraintExpression` |
| 76 | + * [ ] Item visibility & computed display expressions |
| 77 | + * [ ] Value propagation (`derivedFrom`, `answerExpression`) |
| 78 | +* [ ] **Adaptive & Modular Forms** |
| 79 | + * [ ] Implement `assemble-expectation` and sub-questionnaire resolution |
| 80 | + * [ ] Support adaptive `next-question` operations (`sdc-questionnaireresponse-adapt`) |
| 81 | + * [ ] Dynamic loading of next sections via adaptive operation (`Questionnaire/$next-question`) |
| 82 | + * [ ] Support inclusion of external subforms and library dependencies |
| 83 | +* [ ] **User Interaction Layer** |
| 84 | + * [ ] Autosave progress to `QuestionnaireResponse` |
| 85 | + * [ ] Support for resuming saved sessions |
| 86 | + * [ ] Dynamic updates to visible fields based on answers |
| 87 | + |
| 88 | +## 🧩 **December 2025 — Data Population & Extraction** |
| 89 | + |
| 90 | +Focus: Form prefill, structured output mapping, and integration services. |
| 91 | + |
| 92 | +* [ ] **Form Population** |
| 93 | + * [ ] Implement population via: |
| 94 | + * [ ] `initialExpression` |
| 95 | + * [ ] `itemPopulationContext` |
| 96 | + * [ ] `candidateExpression` |
| 97 | + * [ ] Support FHIR `$populate` operation (StructureMap-based) |
| 98 | + * [ ] Integrate population service from external data sources (Patient, Observation, etc.) |
| 99 | +* [ ] **Form Data Extraction** |
| 100 | + * [ ] Implement FHIR `$extract` operation |
| 101 | + * [ ] Map responses → resources using `structureMap` |
| 102 | + * [ ] Handle `extract` extensions: `sdc-questionnaire-extract`, `itemExtractionContext` |
| 103 | +* [ ] **Export and Serialization** |
| 104 | + * [ ] Generate valid `QuestionnaireResponse` |
| 105 | + * [ ] Support export in JSON and XML |
| 106 | + * [ ] Validate `QuestionnaireResponse` against source `Questionnaire` |
| 107 | +* [ ] **Polish & QA** |
| 108 | + * [ ] Test all `must-support` extensions from SDC profiles |
| 109 | + * [ ] Ensure conformance with: |
| 110 | + * [ ] `sdc-questionnaire-render` |
| 111 | + * [ ] `sdc-questionnaire-adapt` |
| 112 | + * [ ] `sdc-questionnaire-extract` |
| 113 | + * [ ] Accessibility and internationalization compliance |
0 commit comments