如何在FHIR Questionnaire中实现个性化问题文本?是否存在其他方案?
FHIR Questionnaire个性化文本的替代技术方案
通常FHIR Questionnaire的问题文本是静态的(比如PHQ-9问卷),但针对诊所的非标准化表单,为提升用户体验需要对问题文本做个性化处理——比如家长为儿科受抚养人填写入院表时,把通用问题改成“请告知我们John的身高”。除了你提到的两种方案,还有以下几种可行的技术方案:
1. 利用FHIR原生的variable元素结合FHIRPath表达式
FHIR规范里的Questionnaire.item自带variable字段,可以直接定义变量和对应的FHIRPath表达式,从关联的上下文资源(比如Patient、RelatedPerson)中动态提取数据。
- 示例:
- Questionnaire.item.text: "请告知我们{patientName}的身高"
- Questionnaire.item.variable: 定义变量
patientName,对应表达式为%patient.name.first().given.first() + ' ' + %patient.name.first().family
- 优势:无需自定义扩展,完全遵循FHIR原生规范,只要消费者支持FHIRPath就能解析,适合基于FHIR生态的系统复用。
2. 渲染层动态替换文本
保持Questionnaire本身的静态性,把个性化逻辑放在前端或渲染服务层。当需要展示问卷时,渲染端根据Questionnaire文本中的标记(比如{dependent_name}),从当前上下文的FHIR资源(比如已加载的Patient信息)中提取对应字段,实时替换后再展示给用户。
- 优势:不修改Questionnaire资源结构,问卷本身保持高度复用性,个性化逻辑集中在渲染侧,适合多系统共享同一基础问卷的场景。
3. 用FHIR Library封装模板逻辑
创建独立的FHIR Library资源,把所有文本替换的规则、变量映射用FHIR Expression定义好,然后让Questionnaire通过relatedArtifact字段引用这个Library。
- 示例:
- Library中定义表达式:
$dependentName = %relatedPerson.name.first().given.first() - Questionnaire.item.text: "请告知我们{$dependentName}的身高"
- Questionnaire.relatedArtifact: 指向该Library资源
- Library中定义表达式:
- 优势:模板逻辑与问卷本体解耦,同一个Library可以被多个问卷复用,消费者通过解析Library获取替换规则,符合FHIR的模块化设计思路。
内容的提问来源于stack exchange,提问作者dajaffe
相关产品推荐
相关产品推荐

