2016-07-11 8 views
2

OOPFactoryを使用して271個のファイルを解析しようとしています。 (ソースコードはこちら:https://x12parser.codeplex.com/SourceControl/latest)現時点で私が苦労している部分は、利益情報を得ることです。 (私は加入者とソース情報をうまく取得できます)。OOPFactoryを使用してEligibilityBenefitDocumentを使用して271の利点を解析しようとしています

私はこの記事の手順に従ってきた:私は加入者とソース情報とEligibilityBenefitDocumentを得ることができます (Anyone translate a X12 271 Healthcare response)が、ドキュメント上の利益の情報は、ヌル、空、または他のいくつかの役に立たない値のいずれかであること巻き上げます。

私は生の271データを見て、私が探している情報が本当にそこにあることを確認しました。 (参考のため、私は複数の支払人から複数のファイルを実行しました)

実行中にX12SteamReaderとX12Parserの両方をトレースして、データがパーサーを通過したことを確認しました。パーサとうまくやっているようです。私はEligiblityBenefitDocumentがどのように生成されるべきかについて完全にはわかりません。それは私の271のファイルのためにうまく動作していないようなxslt翻訳のいくつかの並べ替えを使用するように見えます。私は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にコンパイルされ、ソース、受信者、およびサブスクライバのプロパティがすべて動作していることを考えると、それが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 

をやろうとしているかの詳細の要求に応じて、より多くのコードを含む======= EDIT 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"); 
       } 
      } 
     } 

我々はまだオフ動作すると上のこれらの応答をできるだけ正確にそれらを試してみて、取得するには、残念ながら、それはのように思えますコードはさまざまな支払人のために変わる可能性があります。また、応答のバリエーションが得られるまで、各自がどのように動作するかを少し時間を掛けて消費します。

EDIT:何benefitInfosが応答で存在しない場合

、それはあなたが間違った患者の情報を提出していることを意味します。私は私のプログラムで次の点を確認しています:

if(eligiblityBenefitDocument.EligiblityBenefitResponses[0].BenefitInfos.Count() < 1) 
    return "Subscriber Info Invalid" 
+0

はい。それは私がやっていることに非常に似ています。ただし、すべての応答のBenefitInfosプロパティは常に空になります。あなたはそれを見たことがありますか? – vesuvian7

+0

答えを更新しました。私があなたのプログラムで何をしているかの例を私に教えれば、より具体的な答えをお手伝いできるかもしれません。あなたは、患者についても可能なすべてのポリシー情報を入力していることを確認してください。インスタンスの場合は、firstname、lastname、policy#、dateOfBirth、およびServiceType18を使用します(これは目的に合っているためです)。 – Rinktacular

+0

往復してEDIコールを行い、応答を解析するアプリケーションに慣れているようですリアルタイム。私は結局2つを組み合わせるつもりですが、解析部分を動かすまではそうではありません。今のところ、1行に1つずつ格納された271応答の.txtファイルを使って作業しています。私はファイルを作ったので、応答が完全であることを調べるために調べることができます。したがって、私はこの小さなアプリでポリシー情報を扱っていないので、不正確なポリシー情報を持つ問題ではないと私は考えています。しかし、最初の投稿を編集して、自分が行っていることの詳細を追加しました。 – vesuvian7

関連する問題