MAS数据处理_Procedure
2022-10-21 17:15:51 9 举报
MAS数据处理_Procedure
作者其他创作
大纲/内容
Procedure Processor
抛出异常,中止后续处理
resource转换为Bundle.Entry,Method属性是POST
focus中该resourceList[0]会包含右侧Bundle中第二个Entry,以及该Entry涉及的其他存储具体内容的Entry,即Resource id
toBundle
不存在且bundle中没有patientResource 或者 存在多个
fail
should update
构建MessageContext
验证Resource是否为null and 当前resourceType是否是Procedure
转为http的patch binary格式
完成输出bundle构造
返回Bundle.Entry
获取到FhirOrgId、和org id(这两个值主要为了后续创建org进行区别)
not update
会与FhirApi交互验证org、patient,然后构建MessageContext
存在1条 或者 不存在且bundle中有patientResource
通过对比两个Resource差异获取PatchBodyElement
success
不存在且配置允许创建 或 存在1个orgid
如果配置中允许创建composition且bundle meta/profile中不存在【StructureDefinition/uapi-bundle-status-update】则添加composition
perfrom any patch operations,添加到FhirDB已存在的entry中,用于PATCH request
else(更新resource)
generateContext
getTransactionListResource获取MessageHeader->focus->resourceList[0],赋值给对象transactionListEntry
Resource
与FhirApi交互,获取FhirDB中该Identifier对应的Procedure
add Identifier 到resource中
根据transactionListEntry中每个resource updateOrAdd meta->extension sourceMessageTimestamp、sourceMessageId
转为Bundle.class对象
与FhirAPI交互,save bundle
如果FhirOrgId!=null and FhirOrg是以urn:uuid开头(说明库中不存在该org),则调用FhirApi存储organization数据
Verify message
Mas输入Bundle格式见右侧图1.Bundle type为message2.必有一个Resource:Message Header3.Message Header -> focus必须是Resource.List
与FhirApi交互,验证库中是否有该org id
符合下面三种情况之一,则需要更新1. Existing Resource Time is empty2. The incoming resource meta time is equal to the existing resource3. The incoming resource meta time is after the existing resource
Mas整体处理流程
构建entry for Post
bundle对象数据转为MessageBundleWrapper
check项:1. isEmpty(json)2. 是否是json格式3. bundleId是否存在
bundle由Document、Message两类type,此处以Message为例介绍
与FhirApi交互,验证库中是否有该patient id
FhirDB中不存在 或者 resource中没有Identifier(新增resource)
get org identifier from MessageHeader->sender
for each ResourceupdateOrAdd meta->extension
只update subject,如果Fhir database中存在该patientid,则使用该patient id赋值
ValidateResource
MessageContent:String
针对每个resource,Resource通过工厂模式(ResourceProcessorFactory)调用对应resourceProcessor进行处理,然后获取List<Bundle.BundleEntryComponent>(此处不同的resource有不同的processor)
Composition check and 添加到transactionListEntry
收尾,发送消息给DIP,等待下个请求
不存在且配置中不允许创建org 或存在多个org id
创建bundle entry 用于POST request
for each ResourceprocessResource
收尾,等待下个请求
构建entry for patch
processBundle
Loop
构造bundle,type为transaction
processBundle会有重试机制,如果因网络问题导致与FhirApi交互失败,则根据配置文件中重试次数,重新执行processBundle方法
updateResource
与FhirApi交互,check and save org data
合并firedb和传入的Resource->Meta
如果sender->identifier存在,则取该值。如果不存在,则根据sender.reference从bundle中查找identifier。如果都没有则抛出异常,中止处理
message字符串(json格式)转为bundle对象
收藏
0 条评论
下一页