如何在FHIR中添加自定义约束 实现巴西CPF标识符有效性校验
CPF校验规则在FHIR Profile中的实现方案
一、是否可以通过FhirPath实现CPF校验?
可以实现。CPF的核心校验逻辑包含数字过滤、长度校验、重复值排除、两位校验位计算比对四个核心步骤,这些逻辑都可以通过FhirPath内置的字符串处理、数学运算、集合操作能力完成。
针对Patient资源下类型为CPF的标识符,示例FhirPath校验表达式如下:
identifier.where(type.coding.exists(system = '你方Profile定义的CPF编码体系地址' and code = 'CPF')).all( // 提取所有数字字符 let cpfDigits: replaceMatches(value, '[^0-9]', '').toCharArray().select(toInteger()) in cpfDigits.count() = 11 // 排除全相同数字的无效CPF and not cpfDigits.all($this = cpfDigits[0]) // 校验第一个校验位 and cpfDigits[9] = ( (cpfDigits.subset(0,8).reverse().select($this * ($index + 2)).sum() * 10) mod 11 mod 10 ) // 校验第二个校验位 and cpfDigits[10] = ( (cpfDigits.subset(0,9).reverse().select($this * ($index + 2)).sum() * 10) mod 11 mod 10 ) )
注:表达式中的CPF标识符类型编码系统可替换为你本地Profile中定义的对应编码体系。
二、若FhirPath支持度有限,如何在Profile中定义该约束?
如果你的FHIR实现栈对复杂FhirPath表达式兼容性不足,可通过以下方式定义约束:
- 在Profile对应标识符字段下添加
constraint(约束)节点:- 设置
severity为error标记为强制校验 - 填写
human字段为人类可读的约束描述,例如当标识符类型为CPF时,取值必须符合巴西官方CPF编码校验规则 - 可通过官方扩展
http://hl7.org/fhir/StructureDefinition/structuredefinition-constraint-expression绑定自定义校验规则的唯一标识,供自研校验服务识别
- 设置
- 在本地化实现指南中明确该约束的校验要求,配套提供对应语言的校验实现工具包,供对接方集成
- 如有集中式的FHIR校验中间件,可在中间件层统一添加CPF校验逻辑,无需在Profile中内置复杂FhirPath表达式
内容的提问来源于stack exchange,提问作者Rodrigo Sendin
相关产品推荐
相关产品推荐

