Skip to content

Commit

Permalink
fixed issue phatboyg#58 and issue phatboyg#62
Browse files Browse the repository at this point in the history
  • Loading branch information
ahives committed Aug 28, 2018
1 parent a6c2fbe commit e1bf736
Show file tree
Hide file tree
Showing 51 changed files with 752 additions and 360 deletions.
18 changes: 15 additions & 3 deletions src/Machete.Benchmarking/LayoutParserBenchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,22 @@ public void QueryLayoutBenchmark()
Result<Cursor<X12Entity>, HC837I> result = _parse1.Query(query);

int controlNumber1 = result.Select(x => x.InterchangeControlHeader).Select(x => x.ControlNumber).ValueOrDefault();
string controlNumber2 = result.Select(x => x.TransactionSetHeader).Select(x => x.ControlNumber).ValueOrDefault();
int controlNumber3 = result.Select(x => x.FunctionalGroupHeader).Select(x => x.ControlNumber).ValueOrDefault();
string controlNumber2 = result.Select(x => x.Transactions)[0]
.Select(x => x.TransactionSetHeader)
.Select(x => x.ControlNumber)
.ValueOrDefault();
int controlNumber3 = result
.Select(x => x.Transactions)[0]
.Select(x => x.FunctionalGroupHeader)
.Select(x => x.ControlNumber)
.ValueOrDefault();

string firstName = result.Select(x => x.Submitter)[0].Select(x => x.Name).Select(x => x.FirstName).ValueOrDefault();
string firstName = result
.Select(x => x.Transactions)[0]
.Select(x => x.Submitter)[0]
.Select(x => x.Name)
.Select(x => x.FirstName)
.ValueOrDefault();
}

// [Benchmark]
Expand Down
41 changes: 41 additions & 0 deletions src/Machete.HL7.Tests/ParserTests/StreamingLayoutParserTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
namespace Machete.HL7.Tests.ParserTests
{
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using HL7Schema.V26;
using NUnit.Framework;
using Testing;
using TestSchema;
Expand Down Expand Up @@ -264,5 +266,44 @@ public async Task Should_be_able_to_parse_file_with_multiple_messages2()
Console.WriteLine(i);
}
}


[Test, Explicit]
public async Task Test()
{
var sw = new Stopwatch();

sw.Start();
using (var stream = File.OpenRead("/users/albert/Documents/BigAssFile.txt"))
{
StreamText text = await new StreamTextReader(stream).Text;

ParseResult<HL7Entity> result = await Parser.ParseStream(text, new TextSpan(0, text.Length));

if (!Schema.TryGetLayout(out ILayoutParserFactory<O01Event, HL7Entity> layout))
return;

int i = 0;
while (result.HasResult)
{
IParser<HL7Entity, O01Event> query = result.CreateQuery(layout);
Result<Cursor<HL7Entity>, O01Event> queryResult = result.Query(query);

if (queryResult.HasResult)
{
Console.WriteLine(queryResult.Result.PID.Select(x => x.PatientId).Select(x => x.IdNumber).ValueOrDefault());
i++;
}

result = await result.NextAsync();
}

sw.Stop();
// Console.WriteLine(segments);
Console.WriteLine(i);
}

Console.WriteLine($"00:{sw.Elapsed.TotalMinutes}:{sw.Elapsed.TotalSeconds}:{sw.Elapsed.TotalMilliseconds}");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@ public async Task Test()

ParseResult<HL7Entity> result = await Parser.ParseStream(text, new TextSpan(0, text.Length));


int index = 0;
int segments = 0;
int messages = 0;
Expand Down
8 changes: 5 additions & 3 deletions src/Machete.X12.Tests/Layouts/Layout270Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,18 @@ public void Verify_can_parse_270()
Result<Cursor<X12Entity>, HEBI270> result = entityResult.Query(query);

var interchangeSegment = result.Select(x => x.InterchangeControlHeader);
var transactionSetHeader = result.Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.FunctionalGroupHeader);
var transactionSetHeader = result.Select(x => x.Transactions)[0].Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.Transactions)[0].Select(x => x.FunctionalGroupHeader);

Assert.IsTrue(result.HasResult);
Assert.IsNotNull(interchangeSegment);
Assert.IsTrue(interchangeSegment.HasValue);
Assert.IsTrue(groupSegment.HasValue);
Assert.IsTrue(transactionSetHeader.HasValue);

string organizationName = result.Select(x => x.InformationSourceDetail)[0]
string organizationName = result
.Select(x => x.Transactions)[0]
.Select(x => x.InformationSourceDetail)[0]
.Select(x => x.InformationSourceDetail)
.Select(x => x.InformationSource)
.Select(x => x.LastNameOrOrganizationName).ValueOrDefault();
Expand Down
11 changes: 7 additions & 4 deletions src/Machete.X12.Tests/Layouts/Layout271Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,22 @@ public void Verify_can_parse_271()
Result<Cursor<X12Entity>, HEBI270> result = entityResult.Query(query);

var interchangeSegment = result.Select(x => x.InterchangeControlHeader);
var transactionSetHeader = result.Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.FunctionalGroupHeader);
var transactionSetHeader = result.Select(x => x.Transactions)[0].Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.Transactions)[0].Select(x => x.FunctionalGroupHeader);

Assert.IsTrue(result.HasResult);
Assert.IsNotNull(interchangeSegment);
Assert.IsTrue(interchangeSegment.HasValue);
Assert.IsTrue(groupSegment.HasValue);
Assert.IsTrue(transactionSetHeader.HasValue);

string organizationName = result.Select(x => x.InformationSourceDetail)[0]
string organizationName = result
.Select(x => x.Transactions)[0]
.Select(x => x.InformationSourceDetail)[0]
.Select(x => x.InformationSourceDetail)
.Select(x => x.InformationSource)
.Select(x => x.LastNameOrOrganizationName).ValueOrDefault();
.Select(x => x.LastNameOrOrganizationName)
.ValueOrDefault();

Assert.AreEqual("ABC COMPANY", organizationName);
}
Expand Down
29 changes: 1 addition & 28 deletions src/Machete.X12.Tests/Layouts/Layout835Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,7 @@ public class Layout835Tests :
public void Test()
{
string message =
@"ISA*00* *00* *ZZ*EMEDNYBAT *ZZ*00DJ *180625*0712*^*00501*176073292*0*P*:
GS*HP*EMEDNYBAT*00DJ*20180625*07121200*176073292*X*005010X221A1
ST*835*212900796
BPR*I*98229.13*C*ACH*CCP*01*021300556*DA*320993201765*1141797357**01*222370440*DA*7900644837*20180627
TRN*1*021300078111613*1141797357
REF*EV*00DJ
DTM*405*20180611
N1*PR*NYSDOH
N3*OFFICE OF HEALTH INSURANCE PROGRAMS*CORNING TOWER, EMPIRE STATE PLAZA
N4*ALBANY*NY*122370080
PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org
N1*PE*OPERATIONS ASSOCIATES LLC*XX*3333333333
N4*NEW YORK*NY*104701104
REF*TJ*8524556
LX*1
CLP*555555555555*1*1269.55*0**MC*11111111111*21*4
CAS*CO*26*1269.55
NM1*QC*1*SMITH*BOB****MI*CH21785G
NM1*74*1*SMITH*BOB*E
NM1*82*1******XX*8888888888888
REF*EA*00446771
REF*9A*3839
DTM*232*20171216
DTM*233*20171221
QTY*CA*5
SE*1301*212900796
GE*1*176073292
IEA*1*176073292";
@"ISA*00* *00* *ZZ*EMEDNYBAT *ZZ*00DJ *180625*0712*^*00501*176073292*0*P*:~GS*HP*EMEDNYBAT*00DJ*20180625*07121200*176073292*X*005010X221A1~ST*835*212900796~BPR*I*98229.13*C*ACH*CCP*01*021300556*DA*320993201765*1141797357**01*222370440*DA*7900644837*20180627~TRN*1*021300078111613*1141797357~REF*EV*00DJ~DTM*405*20180611~N1*PR*NYSDOH~N3*OFFICE OF HEALTH INSURANCE PROGRAMS*CORNING TOWER, EMPIRE STATE PLAZA~N4*ALBANY*NY*122370080~PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org~N1*PE*OPERATIONS ASSOCIATES LLC*XX*3333333333~N4*NEW YORK*NY*104701104~REF*TJ*8524556~LX*1~CLP*555555555555*1*1269.55*0**MC*11111111111*21*4~CAS*CO*26*1269.55~NM1*QC*1*SMITH*BOB****MI*CH21785G~NM1*74*1*SMITH*BOB*E~NM1*82*1******XX*8888888888888~REF*EA*00446771~REF*9A*3839~DTM*232*20171216~DTM*233*20171221~QTY*CA*5~SE*1301*212900796~GE*1*176073292~IEA*1*176073292";

EntityResult<X12Entity> entityResult = Parser.Parse(message);

Expand Down
20 changes: 14 additions & 6 deletions src/Machete.X12.Tests/Layouts/Layout837Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,20 @@ public void Verify_can_parse_837_Institutional()
Result<Cursor<X12Entity>, HC837I> result = entityResult.Query(query);

var interchangeSegment = result.Select(x => x.InterchangeControlHeader);
var transactionSetHeader = result.Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.FunctionalGroupHeader);
var transactionSetHeader = result.Select(x => x.Transactions)[0].Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.Transactions)[0].Select(x => x.FunctionalGroupHeader);

Assert.IsTrue(result.HasResult);
Assert.IsNotNull(interchangeSegment);
Assert.IsTrue(interchangeSegment.HasValue);
Assert.IsTrue(groupSegment.HasValue);
Assert.IsTrue(transactionSetHeader.HasValue);

string firstName = result.Select(x => x.Submitter)[0].Select(x => x.Name).Select(x => x.FirstName).ValueOrDefault();
string firstName = result.Select(x => x.Transactions)[0]
.Select(x => x.Submitter)[0]
.Select(x => x.Name)
.Select(x => x.FirstName)
.ValueOrDefault();

Assert.AreEqual("Joe", firstName);
}
Expand Down Expand Up @@ -145,16 +149,20 @@ public void Verify_can_parse_837_Dental()
Result<Cursor<X12Entity>, HC837D> result = entityResult.Query(query);

var interchangeSegment = result.Select(x => x.InterchangeControlHeader);
var transactionSetHeader = result.Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.FunctionalGroupHeader);
var transactionSetHeader = result.Select(x => x.Transactions)[0].Select(x => x.TransactionSetHeader);
var groupSegment = result.Select(x => x.Transactions)[0].Select(x => x.FunctionalGroupHeader);

Assert.IsTrue(result.HasResult);
Assert.IsNotNull(interchangeSegment);
Assert.IsTrue(interchangeSegment.HasValue);
Assert.IsTrue(groupSegment.HasValue);
Assert.IsTrue(transactionSetHeader.HasValue);

string firstName = result.Select(x => x.Submitter)[0].Select(x => x.Name).Select(x => x.FirstName).ValueOrDefault();
string firstName = result.Select(x => x.Transactions)[0]
.Select(x => x.Submitter)[0]
.Select(x => x.Name)
.Select(x => x.FirstName)
.ValueOrDefault();

Assert.AreEqual("Joe", firstName);
}
Expand Down
14 changes: 1 addition & 13 deletions src/Machete.X12Schema/Generated/V5010/Layouts/ACK997.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,7 @@ public interface ACK997 :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<AK1> FunctionalGroupResponseHeader { get; }

LayoutList<L2000_ACK997> TransactionSetResponseHeader { get; }

Segment<AK9> FunctionalGroupResponseTrailer { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<T997> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down
14 changes: 1 addition & 13 deletions src/Machete.X12Schema/Generated/V5010/Layouts/ACK999.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,7 @@ public interface ACK999 :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<AK1> FunctionalGroupResponseHeader { get; }

LayoutList<L2000_ACK999> TransactionSetResponseHeader { get; }

Segment<AK9> FunctionalGroupResponseTrailer { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<T999> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down
20 changes: 1 addition & 19 deletions src/Machete.X12Schema/Generated/V5010/Layouts/HC837D.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,7 @@ public interface HC837D :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<BHT> BeginningOfHeirarchicalTransaction { get; }

LayoutList<L1000A_837D> Submitter { get; }

LayoutList<L1000B_837D> Receiver { get; }

LayoutList<L2000A_837D> BillingProviderDetail { get; }

LayoutList<L2000B_837D> SubscriberDetail { get; }

LayoutList<L2000C_837D> PatientDetail { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<T837D> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down
20 changes: 1 addition & 19 deletions src/Machete.X12Schema/Generated/V5010/Layouts/HC837I.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,7 @@ public interface HC837I :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<BHT> BeginningOfHeirarchicalTransaction { get; }

LayoutList<L1000A_837I> Submitter { get; }

LayoutList<L1000B_837I> Receiver { get; }

LayoutList<L2000A_837I> BillingProviderDetail { get; }

LayoutList<L2000B_837I> SubscriberDetail { get; }

LayoutList<L2000C_837I> PatientDetail { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<T837I> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down
20 changes: 1 addition & 19 deletions src/Machete.X12Schema/Generated/V5010/Layouts/HC837P.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,7 @@ public interface HC837P :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<BHT> BeginningOfHeirarchicalTransaction { get; }

LayoutList<L1000A_837P> Submitter { get; }

LayoutList<L1000B_837P> Receiver { get; }

LayoutList<L2000A_837P> BillingProviderDetail { get; }

LayoutList<L2000B_837P> SubscriberDetail { get; }

LayoutList<L2000C_837P> PatientDetail { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<T837P> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down
18 changes: 1 addition & 17 deletions src/Machete.X12Schema/Generated/V5010/Layouts/HCA277.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,7 @@ public interface HCA277 :
{
Segment<ISA> InterchangeControlHeader { get; }

Segment<GS> FunctionalGroupHeader { get; }

Segment<ST> TransactionSetHeader { get; }

Segment<BHT> BeginningOfHeirarchicalTransaction { get; }

LayoutList<L2000A_277ACK> InformationSourceDetail { get; }

LayoutList<L2000B_277ACK> InformationReceiverDetail { get; }

LayoutList<L2000C_277ACK> BillingProviderOfServiceDetail { get; }

LayoutList<L2000D_277ACK> PatientDetail { get; }

Segment<SE> TransactionSetTrailer { get; }

Segment<GE> FunctionalGroupTrailer { get; }
LayoutList<CAT277> Transactions { get; }

Segment<IEA> InterchangeControlTrailer { get; }
}
Expand Down

0 comments on commit e1bf736

Please sign in to comment.