2016-07-11 24 views
2

我試圖使用OOPFactory來解析271個文件。 (源代碼在這裏:https://x12parser.codeplex.com/SourceControl/latest)我目前正在努力的部分是獲取好處信息。 (我可以獲得訂閱者和源代碼信息)。嘗試使用OOPFactory解析271好處使用EligibilityBenefitDocument

我跟着這個帖子的說明: (Anyone translate a X12 271 Healthcare response)我可以與認購人及來源的信息得到一個EligibilityBenefitDocument,但文件上的優惠信息捲起是要麼空,空,或其他一些無益的價值。

我已經通過了原始271的數據,並驗證我正在尋找的信息確實在那裏。 (作爲參考,我已經運行多個付款人的多個文件)

我在追蹤X12SteamReader和X12Parser的同時運行它們,並驗證數據是否完全通過解析器。看起來事情在解析器中運行良好。我不完全確定應該如何生成EligiblityBenefitDocument。它看起來像它使用某種xslt翻譯,似乎不適合我的271文件。我已將此調整應用於我的xslt文件(https://x12parser.codeplex.com/workitem/2765) - 它清除了一些空值,但仍然無法正確解析。

接下來應該看什麼?

  • 有可能我使用的是不支持的EDI格式。我不知道如何判斷是否是這種情況
  • 我一直在編程很長一段時間,但我從來沒有使用過.NET的XSLT功能有沒有人有從哪裏開始的好鏈接呢?
  • 如果有人有一個快速解決方案將是真棒。

Thx!

========= 編輯1:

這裏是我的代碼,踢東西了:

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,並且Source,Receiver和Subscriber屬性都工作正常,我不認爲這就是爲什麼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行中顯示,但它永遠不會將它放入響應對象中。

它看起來像一個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); 

回答

0

我實際上在辦公室用我自己的工作。我們總是遇到的問題是我們收到的迴應是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" 
+0

是的。這與我所做的非常相似。但是,所有響應的BenefitInfos屬性始終爲空。你見過嗎? – vesuvian7

+0

我更新了我的答案。如果你給我一個關於你在程序中做什麼的例子,我可以幫助你做出更具體的答案。確保您輸入了您對患者所有可能的政策信息。對於實例,我使用名字,姓氏,政策#,dateOfBirth和ServiceType18(因爲這是特定於我的目的) – Rinktacular

+0

這聽起來像你習慣於往返應用程序,並進行EDI調用和解析響應即時的。我打算最終將這兩者結合起來,但直到解析部分工作之後。現在,我正在處理一個包含271個響應的.txt文件,每行存儲1個響應。我創建了該文件,並且可以檢查該文件以查看完成的響應。因此,我不認爲這是一個不準確的政策信息問題,因爲我沒有處理這個小應用程序中的任何政策信息。但是,我已經提前編輯了最初的帖子,以包含我正在做的更多細節。 – vesuvian7

相關問題