C# 试图使用OOPFactory使用EligibilityBenefitDocument分析271项好处
我正在尝试使用OOPFactory解析271个文件。(这里的源代码:)我目前正在努力的部分是获取福利信息。(我可以很好地获得订户和源信息) 我遵循了这篇文章中的说明: ()我可以获取包含订阅者和源信息的EligibilityBenefitDocument,但文档上的福利信息最终为null、空或其他一些没有帮助的值 我已经查看了原始的271个数据,并验证了我要查找的信息确实在那里。(作为参考,我从多个付款人处运行了多个文件) 我已经在X12SteamReader和X12Parser运行时对它们进行了跟踪,并验证了数据是否一直通过解析器。看起来解析器工作得很好。我不完全确定EligiblityBenefit文档应该如何生成。它似乎使用了某种xslt翻译,但对我的271个文件来说似乎效果不太好。我已将此调整应用于xslt文件()——它清除了一些空值,但仍然无法正确解析 接下来我应该看什么C# 试图使用OOPFactory使用EligibilityBenefitDocument分析271项好处,c#,xml,xslt,edi,C#,Xml,Xslt,Edi,我正在尝试使用OOPFactory解析271个文件。(这里的源代码:)我目前正在努力的部分是获取福利信息。(我可以很好地获得订户和源信息) 我遵循了这篇文章中的说明: ()我可以获取包含订阅者和源信息的EligibilityBenefitDocument,但文档上的福利信息最终为null、空或其他一些没有帮助的值 我已经查看了原始的271个数据,并验证了我要查找的信息确实在那里。(作为参考,我从多个付款人处运行了多个文件) 我已经在X12SteamReader和X12Parser运行时对它们进行
- 我可能正在使用不受支持的EDI格式。我不知道如何判断是否是这样
- 我已经编程很长时间了,但是我从来没有使用过.NET的XSLT特性。有没有人有关于从哪里开始的好链接
- 如果有人有一个快速的解决方案,那就太棒了李>
Dim ediFileString = path_to_my_file
Dim fstream = New FileStream(ediFileString, FileMode.Open, FileAccess.Read)
Dim service = New EligibilityTransformationService()
Dim benefitDoc = service.Transform271ToBenefitResponse(fstream)
Dim responses = benefitDoc.EligibilityBenefitResponses
我从VB.NET而不是C#调用它,但是考虑到它都编译成MSIL,并且源、接收器和订户属性都正常工作,我不认为这是BenefitInfos失败的原因
=========
编辑2:包括更多的代码,以响应请求,获取我正在尝试做的事情的更多细节
Dim ediFileString = path_to_my_file
Dim fstream = New FileStream(ediFileString, FileMode.Open, FileAccess.Read)
Dim service = New EligibilityTransformationService()
Dim benefitDoc = service.Transform271ToBenefitResponse(fstream)
Dim responses = benefitDoc.EligibilityBenefitResponses
Dim strClient = ""
For Each client In benefitDoc.EligibilityBenefitResponses
Try
strClient = "MemberID: " + tidyNull(client.Subscriber.MemberId) + " Transaction Control Number: " + tidyNull(client.TransactionControlNumber) + Constants.vbCrLf
Catch ex As Exception
End Try
Try
strClient += "Member Name: " + tidyNull(client.Subscriber.Name.FirstName) + " " + tidyNull(client.Subscriber.Name.MiddleName) + " " + tidyNull(client.Subscriber.Name.LastName) + Constants.vbCrLf
Catch ex As Exception
End Try
Try
strClient += "Payer Name: " + tidyNull(client.Source.Name.LastName) + Constants.vbCrLf
Catch ex As Exception
End Try
Try
strClient += "Date of Birth: " + tidyNull(client.Subscriber.SerializableDateOfBirth) + Constants.vbCrLf
Catch ex As Exception
End Try
Try
strClient += "Address: " + tidyNull(client.Subscriber.Address.Line1)
strClient += " " + tidyNull(client.Subscriber.Address.Line2) + " " + Constants.vbCrLf
strClient += "Address: " + tidyNull(client.Subscriber.Address.City) + ", " + tidyNull(client.Subscriber.Address.StateCode) + ", " + tidyNull(client.Subscriber.Address.PostalCode) + Constants.vbCrLf
Catch ex As Exception
End Try
Dim results As List(Of EligibilityBenefitInformation)
Try
results = client.BenefitInfos.FindAll(AddressOf searchPlanActive)
If results.Count > 0 Then
strClient += "Active Coverage!" + Constants.vbCrLf
End If
Catch ex As Exception
strClient += "Coverage Type: Couldn't be found"
End Try
For Each benefit In client.BenefitInfos
If benefit.Amount IsNot Nothing Then
strClient &= " Code: " & benefit.Amount
End If
strClient &= " Percentage: " & benefit.Percentage
Try
strClient &= " CoverageLevel: " & benefit.CoverageLevel.Description
Catch ex As Exception
End Try
Try
strClient &= " InPlanNetwork: " & benefit.InPlanNetwork.Description
Catch
End Try
Try
strClient &= " PlanCoverageDescription: " & benefit.PlanCoverageDescription
Catch ex As Exception
End Try
'strClient &= " Messages: " & benefit.Messages.FindLast()
Try
strClient &= " Amount: " & benefit.Amount.Value
Catch ex As Exception
End Try
'strClient &= " Amount: " & benefit.AdditionalInfos
strClient &= Constants.vbCrLf
Next
MsgBox(strClient)
Next
============
编辑3:
我正在尝试处理一个5010文件;OOPFactory表示,“内置规范包含所有4010标准和一些5010规范”https://x12parser.codeplex.com/(由于缺乏信誉点,还无法发布其他工作链接)
=======
编辑4:
故障似乎发生在第35行的EligibilityTransformationService.cs中。正确的信息正在将其转换为XML,但没有正确地进行反序列化
var response = EligibilityBenefitDocument.Deserialize(responseXml);
我正在调查原因
=====
编辑5:
在EligiblityTransformationService.cs中,从第32行开始,XML被转换,然后反序列化。有问题的数据最后一次出现在responseXml变量的第35行,但它从未进入response对象
看起来XSLT文件有问题
transform.Transform(XmlReader.Create(new StringReader(xml)), new XsltArgumentList(), outputStream);
outputStream.Position = 0;
string responseXml = new StreamReader(outputStream).ReadToEnd();
var response = EligibilityBenefitDocument.Deserialize(responseXml);
实际上,我在办公室的工作中也使用了同样的方法。我们经常遇到的问题是,我们收到的响应是
null
或随机值。我们要做的是继续搜索患者信息,直到找到尽可能多的可能的结果。例如,如果我们想查找保单日期信息,我们使用:
var service = new EligibilityTransformationService();
EligibilityBenefitDocument eligibilityBenefitDocument = service.Transform271ToBenefitResponse(response271Stream);
eligibilityBenefitDocument.EligibilityBenefitResponses = eligibilityBenefitDocument.EligibilityBenefitResponses;
foreach (EligibilityBenefitInformation benefitInfo in eligibilityBenefitDocument.EligibilityBenefitResponses[0].BenefitInfos)
{
if (benefitInfo.InfoType.Code == "V")
return Tuple.Create(false, "Medicare cannot process");
if (benefitInfo.InfoType.Code == "6")
return Tuple.Create(false, "Inactive Policy");
if (benefitInfo.InsuranceType.Code == "HN" || benefitInfo.InsuranceType.Code == "12")
{
try
{
return Tuple.Create(false, "MADV " + benefitInfo.Identifications[0].Id + " " + benefitInfo.RelatedEntities[0].Name.LastName);
}
catch
{
return Tuple.Create(false, "MADV");
}
}
}
我们仍在不断地处理这些响应,以尽可能准确地获取它们,但不幸的是,代码似乎可以针对不同的付款人进行更改,在得到它们可能的响应变化之前,找出每个响应的工作方式有点费时
编辑:
如果响应中没有benefitInfos,则表示您提交的患者信息不正确。我的程序中有以下检查:
if(eligiblityBenefitDocument.EligiblityBenefitResponses[0].BenefitInfos.Count() < 1)
return "Subscriber Info Invalid"
if(eligiblityBenefitDocument.EligiblityBenefitResponses[0].BenefitInfos.Count()<1)
返回“订户信息无效”
是。这和我现在做的很相似。然而,所有响应的BenefitInfos属性总是空的。你见过吗?我更新了我的答案。如果你能给我一个你在你的项目中所做的例子,我也许能在一个更具体的答案上帮助你。确保您也输入了关于患者的所有可能的政策信息。例如,我使用firstname、lastname、policy#、dateOfBirth和ServiceType18(因为这是专门针对我的目的的),听起来您已经习惯了应用程序往返进行EDI调用并实时解析响应。我计划最终将两者结合起来,但要等到解析部分开始工作之后。现在,我正在处理一个.txt文件,其中271个响应,每行存储1个响应。我制作了这个文件,我可以检查它以查看响应是否完整。因此,我不认为这是一个不准确的政策信息的问题,因为我没有在这个小应用程序处理任何政策信息。然而,我已经继续编辑了最初的帖子,以包含我正在做的更多细节。