From 69cc503802f6c5c09e6cdcd427bf7b033ac54f2f Mon Sep 17 00:00:00 2001 From: Albert Hives Date: Tue, 4 Sep 2018 17:38:46 -0700 Subject: [PATCH] failing unit test for issue #58 with condition logic in place fixed test issue add more conditions to X12 maps added conditional logic to several X12 maps created more conditions in maps and created failing unit test for issue #65 added new failing test for issue #65 updated readme and added tests for issue #65 --- README.md | 295 +++++++++ .../QueryTests/AdvancedQueryTests.cs | 11 + .../Layouts/Layout277Tests.cs | 592 ++++++++++++++++++ .../Layouts/Layout835Tests.cs | 273 +++++++- .../ParsingMultipleSegmentOfSameTypeTests.cs | 61 ++ .../TestSchema/LayoutConditionIssue.cs | 24 + .../TestSchema/LayoutConditionIssueMap.cs | 28 + .../TestSchema/PERSegment.cs | 22 + .../TestSchema/PERSegmentMap.cs | 24 + .../Generated/V5010/Layouts/L2000D_277ACK.cs | 2 +- .../Generated/V5010/Layouts/L2200D_277ACK.cs | 2 +- .../Generated/V5010/Layouts/L2220D_277.cs | 2 + .../Generated/V5010/Layouts/L2220D_277ACK.cs | 2 - .../V5010/Layouts/Maps/L1000A_835Map.cs | 9 +- .../V5010/Layouts/Maps/L2000A_277ACKMap.cs | 3 +- .../V5010/Layouts/Maps/L2000A_277Map.cs | 3 +- .../V5010/Layouts/Maps/L2000B_277ACKMap.cs | 3 +- .../V5010/Layouts/Maps/L2000B_277Map.cs | 3 +- .../V5010/Layouts/Maps/L2000C_277ACKMap.cs | 3 +- .../V5010/Layouts/Maps/L2000C_277Map.cs | 3 +- .../V5010/Layouts/Maps/L2000D_277ACKMap.cs | 5 +- .../V5010/Layouts/Maps/L2000D_277Map.cs | 3 +- .../V5010/Layouts/Maps/L2010AA_837DMap.cs | 8 +- .../V5010/Layouts/Maps/L2010AA_837PMap.cs | 8 +- .../V5010/Layouts/Maps/L2010AC_837DMap.cs | 8 +- .../V5010/Layouts/Maps/L2010AC_837IMap.cs | 8 +- .../V5010/Layouts/Maps/L2010AC_837PMap.cs | 8 +- .../V5010/Layouts/Maps/L2010BA_837DMap.cs | 9 +- .../V5010/Layouts/Maps/L2010BA_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2010BA_837PMap.cs | 6 +- .../V5010/Layouts/Maps/L2010BB_837DMap.cs | 10 +- .../V5010/Layouts/Maps/L2010BB_837IMap.cs | 10 +- .../V5010/Layouts/Maps/L2010BB_837PMap.cs | 10 +- .../V5010/Layouts/Maps/L2010CA_837DMap.cs | 7 +- .../V5010/Layouts/Maps/L2010CA_837IMap.cs | 7 +- .../V5010/Layouts/Maps/L2010CA_837PMap.cs | 7 +- .../V5010/Layouts/Maps/L2110C_270Map.cs | 4 +- .../V5010/Layouts/Maps/L2200A_277ACKMap.cs | 6 +- .../V5010/Layouts/Maps/L2200B_277ACKMap.cs | 8 +- .../V5010/Layouts/Maps/L2200C_277ACKMap.cs | 8 +- .../V5010/Layouts/Maps/L2200D_277ACKMap.cs | 9 +- .../V5010/Layouts/Maps/L2200D_277Map.cs | 18 +- .../V5010/Layouts/Maps/L2220D_277ACKMap.cs | 7 +- .../V5010/Layouts/Maps/L2220D_277Map.cs | 7 +- .../V5010/Layouts/Maps/L2300_837DMap.cs | 36 +- .../V5010/Layouts/Maps/L2300_837PMap.cs | 114 ++-- .../V5010/Layouts/Maps/L2310A_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2310B_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2310C_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2320_837DMap.cs | 9 +- .../V5010/Layouts/Maps/L2330B_837DMap.cs | 21 +- .../V5010/Layouts/Maps/L2330B_837PMap.cs | 18 +- .../V5010/Layouts/Maps/L2330C_837DMap.cs | 5 +- .../V5010/Layouts/Maps/L2330D_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2330D_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2330E_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2330E_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2330F_837DMap.cs | 4 +- .../V5010/Layouts/Maps/L2330F_837IMap.cs | 5 +- .../V5010/Layouts/Maps/L2330G_837DMap.cs | 5 +- .../V5010/Layouts/Maps/L2330G_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2330H_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2330H_837IMap.cs | 5 +- .../V5010/Layouts/Maps/L2330I_837IMap.cs | 4 +- .../V5010/Layouts/Maps/L2400_837DMap.cs | 54 +- .../V5010/Layouts/Maps/L2400_837IMap.cs | 15 +- .../V5010/Layouts/Maps/L2400_837PMap.cs | 130 ++-- .../V5010/Layouts/Maps/L2410_837IMap.cs | 4 +- .../V5010/Layouts/Maps/L2420A_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2420A_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2420B_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2420B_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2420C_837DMap.cs | 6 +- .../V5010/Layouts/Maps/L2420C_837IMap.cs | 6 +- .../V5010/Layouts/Maps/L2420D_837DMap.cs | 5 +- .../V5010/Layouts/Maps/L2420D_837IMap.cs | 5 +- .../V5010/Layouts/Maps/L2430_837IMap.cs | 3 +- .../Generated/V5010/Layouts/Maps/T835Map.cs | 6 +- 78 files changed, 1855 insertions(+), 235 deletions(-) create mode 100644 src/Machete.X12.Tests/Layouts/Layout277Tests.cs create mode 100644 src/Machete.X12.Tests/ParserTests/ParsingMultipleSegmentOfSameTypeTests.cs create mode 100644 src/Machete.X12.Tests/TestSchema/LayoutConditionIssue.cs create mode 100644 src/Machete.X12.Tests/TestSchema/LayoutConditionIssueMap.cs create mode 100644 src/Machete.X12.Tests/TestSchema/PERSegment.cs create mode 100644 src/Machete.X12.Tests/TestSchema/PERSegmentMap.cs diff --git a/README.md b/README.md index 21aa5e5d6..d82f0ff0b 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ ![Machete](machete_thin_outline_small.png) +[![Join the chat at https://gitter.im/PhatBoyG-Machete/Lobby](https://badges.gitter.im/Machete/Lobby.svg)](https://gitter.im/Machete/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + Machete is a parser, object mapper, and query engine for processing sophisticated text. > Machete will also include translation and formatting, but those features have yet to be developed. @@ -27,3 +29,296 @@ Machete was also designed to support X12 messages, support will be coming soon. Machete is written entirely in C# and was developed using JetBrains Rider. It supports the standard .NET framework, as well as .NET Standard, allowing it to be used on any .NET compatible platform. +## NuGet the Bits + +If you are working in HL7, you need the following NuGet packages:
+Machete.NET
+Machete.HL7
+Machete.HL7Schema +

+If you are working in X12, you need the following NuGet packaged:
+Machete.NET
+Machete.X12
+Machete.X12Schema + +## Registering Machete Components + +Before using any Machete API the components must be registered. Below represents which components that must be registered. + +
+ +**Step 1:** Register the Machete components you need

+*If parsing and/or translating a message, register a schema and parser like so...* + +**HL7** +```c# +var schema = Machete.Schema.Factory.CreateHL7(cfg => cfg.AddFromNamespaceContaining()); +var parser = Machete.Parser.Factory.CreateHL7(schema); +``` +**X12** +```c# +var schema = Machete.Schema.Factory.CreateX12(cfg => cfg.AddFromNamespaceContaining()); +var parser = Machete.Parser.Factory.CreateX12(schema); +``` + +Since registering the schema is expensive you would want to use the singleton pattern and register this once in your application. You can use your favorite DI container or do those do yourselfers, you can look at HL7MacheteTestHarness or X12MacheteTestHarness for examples.

+ +*If using the formatter to encode in-memory schema objects into other formats, register these formatters like so...* + +**HL7** +```c# +var formatter = Machete.Formatter.Factory.CreateHL7(schema); +``` +**X12** +```c# +var formatter = Machete.Formatter.Factory.CreateX12(schema); +``` +
+ +## Parsing Text Data + +Parsing is the most fundamental operation that can be performed within Machete. Below are the various ways for the various specifications for which a parsing operation can be performed. + +
+ +**Step 1:** Initialize a parser + +*If parsing a single message, then call the parser like so...* +```c# +var parse = parser.Parse(message); +``` + +
+ +*If parsing a string of multiple messages, then call the streaming parser like so...* +```c# +using (var stream = new StringReader(message)) +{ + StreamText text = await new TextReaderStreamTextReader(stream, Environment.NewLine).Text; + var parse = await parser.ParseStream(text, new TextSpan(0, text.Length)); + + ... +} +``` +
+ +*If parsing a file of a single message or multiple messages, then call the streaming parser like so...* +```c# +using (var stream = File.OpenRead(file)) +{ + StreamText text = await new StreamTextReader(stream).Text; + var parse = await parser.ParseStream(text, new TextSpan(0, text.Length)); + + ... +} +``` +
+ +**Step 2:** Query the message + +*If querying entities, then do the following...* + +**HL7** +```c# +while (parse.HasResult) +{ + while (parse.TryGetEntity(index, out HL7Segment segment)) + { + ... + } + + result = await parse.NextAsync(); +} +``` +**X12** +```c# +while (parse.HasResult) +{ + while (parse.TryGetEntity(index, out X12Segment segment)) + { + ... + } + + result = await parse.NextAsync(); +} +``` + +
+ +*If querying using layout patterns, then do the following...* + +**HL7** +```c# +using (var stream = File.OpenRead(file)) +{ + var text = await new StreamTextReader(stream).Text; + var parse = await parser.ParseStream(text, new TextSpan(0, text.Length)); + + if (!schema.TryGetLayout(out ILayoutParserFactory layout)) + return; + + while (parse.HasResult) + { + IParser query = parse.CreateQuery(layout); + Result, ORM_O01> queryResult = parse.Query(query); + + if (queryResult.HasResult) + { + ... + } + + result = await result.NextAsync(); + } +} +``` +**X12** +```c# +using (var stream = File.OpenRead(file)) +{ + var text = await new StreamTextReader(stream).Text; + var parse = await parser.ParseStream(text, new TextSpan(0, text.Length)); + + if (!schema.TryGetLayout(out ILayoutParserFactory layout)) + return; + + while (parse.HasResult) + { + IParser query = parse.CreateQuery(layout); + Result, HCPA835> queryResult = parse.Query(query); + + if (queryResult.HasResult) + { + ... + } + + result = await result.NextAsync(); + } +} +``` + +
+ +*If querying using LINQ, then do the following...* + +**LINQ to HL7** +```c# +var query = parse.Query(q => + { + var obxQuery = from obx in q.Select() + from nte in q.Select().ZeroOrMore() + select new + { + OBX = obx, + NTE = nte + }; + + var obrQuery = from obr in q.Select() + from dg1 in q.Select().Optional() + from obx in obxQuery.Optional() + select new + { + OBR = obr, + DG1 = dg1, + OBX = obx + }; + + var testQuery = from orc in q.Select() + from obr in obrQuery.ZeroOrMore() + select new + { + ORC = orc, + OBR = obr + }; + + return from msh in q.Select() + from nte in q.Select().ZeroOrMore() + from skip in q.Except().ZeroOrMore() + from tests in testQuery.ZeroOrMore() + select new + { + MSH = msh, + Notes = nte, + Tests = tests + }; + }); +``` + +**LINQ to X12** +```c# +var query = schema.CreateQuery(q => + from isa in q.Select() + from skip in q.Except().ZeroOrMore() + from nm1 in q.Select() + select nm1); +``` + +
+ +**Step 3:** Accessing data + +```c# +string placerGroupNumber = result.Result.Tests[0].ORC.PlacerGroupNumber.Select(x => x.EntityIdentifier).ValueOrDefault(); +``` + +Note: Use the *Select* and *ValueOrDefault* methods to prevent exceptions from bubbling up to the caller when attempting to access fields. + +## Translating Parsed Data + +If you need to change the parsed data, then Machete provides a separate API from the parsing API since the message being parsed is immutable. Below are the steps necessary to translate the data. + +
+ +**Step 1:** Define a translate +```c# +public class MessageTranslation : + HL7Translation +{ + public MessageTranslation() + { + Translate(x => x.Using()); + } +} + +public class ReplaceSendingApplication : + HL7SegmentTranslation +{ + public ReplaceSendingApplication() + { + Copy(x => x.ReceivingApplication, x => x.SendingApplication); + + Set(x => x.CreationDateTime, x => DateTimeOffset.UtcNow); + } +} +``` + +
+ +**Step 2:** Get a translator from the schema based on the translate defined in step 1 +```c# +var translator = schema.GetTranslator(); +``` + +
+ +**Step 3:** Translate the parsed data using the translator created in step 2 + + +```c# +var translateResult = await translator.Translate(parse); +``` + +## Formatting Objects + +It is common to use in-memory objects within algorithms but those objects need to encoded before they can be transmitted with other systems. In Machete, this is how you would use the default formatter to output a text string representation of in-memory objects. +```c# +using (var memoryStream = new MemoryStream()) +{ + var formatted = await formatter.FormatAsync(memoryStream, input); + + string text = Encoding.UTF8.GetString(memoryStream.ToArray()); + + ... +} +``` + +
\ No newline at end of file diff --git a/src/Machete.HL7.Tests/QueryTests/AdvancedQueryTests.cs b/src/Machete.HL7.Tests/QueryTests/AdvancedQueryTests.cs index 699dd5da5..aebe0168c 100644 --- a/src/Machete.HL7.Tests/QueryTests/AdvancedQueryTests.cs +++ b/src/Machete.HL7.Tests/QueryTests/AdvancedQueryTests.cs @@ -86,6 +86,17 @@ select new }; }); + foreach (var orc in result.Result.Tests) + { + if (orc.ORC.PlacerGroupNumber.Select(x => x.EntityIdentifier).IsEqualTo("X0934N")) + { + string placerGroupNumber = orc.ORC + .PlacerGroupNumber + .Select(x => x.EntityIdentifier) + .ValueOrDefault(); + } + } + Assert.That(result.HasResult, Is.True); Assert.AreEqual(3, result.Result.Tests.Count); Assert.AreEqual(4, result.Result.Notes.Count); diff --git a/src/Machete.X12.Tests/Layouts/Layout277Tests.cs b/src/Machete.X12.Tests/Layouts/Layout277Tests.cs new file mode 100644 index 000000000..268a25080 --- /dev/null +++ b/src/Machete.X12.Tests/Layouts/Layout277Tests.cs @@ -0,0 +1,592 @@ +namespace Machete.X12.Tests.Layouts +{ + using NUnit.Framework; + using Testing; + using X12Schema.V5010; + + + [TestFixture] + public class Layout277Tests : + X12MacheteTestHarness + { + [Test] + public void Verify_can_parse_multiple_REF_segments_condition() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].Select(x => x.PatientDetail).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].Select(x => x.PatientDetail)[0].HasValue); + + string institutionalBillTypeIdentification = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.InstitutionalBillTypeIdentification) + .Select(x => x.ReferenceIdentificationQualifier) + .ValueOrDefault(); + + string payerClaimControlNumber = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.PayerClaimControlNumber) + .Select(x => x.ReferenceIdentificationQualifier) + .ValueOrDefault(); + + string claimIdNumberForClearinghouseAndOtherTransmissionItermediaries = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ClaimIdNumberForClearinghouseAndOtherTransmissionItermediaries) + .Select(x => x.ReferenceIdentificationQualifier) + .ValueOrDefault(); + + Assert.IsNotNull(institutionalBillTypeIdentification); + Assert.IsNotNull(payerClaimControlNumber); + Assert.IsNotNull(claimIdNumberForClearinghouseAndOtherTransmissionItermediaries); + Assert.IsNotEmpty(institutionalBillTypeIdentification); + Assert.IsNotEmpty(payerClaimControlNumber); + Assert.IsNotEmpty(claimIdNumberForClearinghouseAndOtherTransmissionItermediaries); + Assert.AreEqual("BLT", institutionalBillTypeIdentification); + Assert.AreEqual("1K", payerClaimControlNumber); + Assert.AreEqual("D9", claimIdNumberForClearinghouseAndOtherTransmissionItermediaries); + } + + [Test] + public void Verify_can_parse_TotalRejectedQuantity_when_TotalAcceptedQuantity_missing_condition() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + string totalRejectedQuantity = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalRejectedQuantity) + .Select(x => x.QuantityQualifier) + .ValueOrDefault(); + + Assert.AreEqual("AA", totalRejectedQuantity); + + Value totalAcceptedQuantity = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalAcceptedQuantity) + .Select(x => x.QuantityQualifier); + + Assert.IsFalse(totalAcceptedQuantity.HasValue); + } + + [Test] + public void Verify_can_parse_TotalAcceptedQuantity_when_TotalRejectedQuantity_missing_condition() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + string totalAcceptedQuantity = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalAcceptedQuantity) + .Select(x => x.QuantityQualifier) + .ValueOrDefault(); + + Assert.AreEqual("90", totalAcceptedQuantity); + + Value totalRejectedQuantity = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalRejectedQuantity) + .Select(x => x.QuantityQualifier); + + Assert.IsFalse(totalRejectedQuantity.HasValue); + } + + [Test] + public void Verify_can_parse_TotalAcceptedAmount_and_TotalRejectedAmount_condition() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + Value totalAcceptedAmount = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalAcceptedAmount) + .Select(x => x.AmountQualifierCode); + + Assert.IsTrue(totalAcceptedAmount.HasValue); + Assert.IsTrue(totalAcceptedAmount.IsPresent); + Assert.AreEqual("YU", totalAcceptedAmount.ValueOrDefault()); + + Value totalRejectedAmount = result + .Select(x => x.Transactions)[0] + .Select(x => x.InformationReceiverDetail)[0] + .Select(x => x.InformationReceiverApplicationTraceIdentifier) + .Select(x => x.TotalRejectedAmount) + .Select(x => x.AmountQualifierCode); + + Assert.IsTrue(totalRejectedAmount.HasValue); + Assert.IsTrue(totalRejectedAmount.IsPresent); + Assert.AreEqual("YY", totalRejectedAmount.ValueOrDefault()); + } + + [Test] + public void METHOD() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +REF*XZ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + var itemIdentification = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.ItemIdentification) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(itemIdentification.HasValue); + Assert.IsTrue(itemIdentification.IsPresent); + Assert.AreEqual("FJ", itemIdentification.ValueOrDefault()); + + var pharmacyPrescriptionNumber = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.PharmacyPrescriptionNumber) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(pharmacyPrescriptionNumber.HasValue); + Assert.IsTrue(pharmacyPrescriptionNumber.IsPresent); + Assert.AreEqual("XZ", pharmacyPrescriptionNumber.ValueOrDefault()); + } + + [Test] + public void Verify_can_parse_ServiceLineItemIdentification_and_PharmacyPresciptionNumber() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +REF*XZ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + var itemIdentification = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.ItemIdentification) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(itemIdentification.HasValue); + Assert.IsTrue(itemIdentification.IsPresent); + Assert.AreEqual("FJ", itemIdentification.ValueOrDefault()); + + var pharmacyPrescriptionNumber = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.PharmacyPrescriptionNumber) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(pharmacyPrescriptionNumber.HasValue); + Assert.IsTrue(pharmacyPrescriptionNumber.IsPresent); + Assert.AreEqual("XZ", pharmacyPrescriptionNumber.ValueOrDefault()); + } + + [Test] + public void Verify_can_parse_ServiceLineItemIdentification_with_PharmacyPresciptionNumber_missing() + { + string message = @"ISA*03*6327 *01*NFMC01 *ZZ*MACHETE *ZZ*PERSEPVS *090601*0406*^*00501*000026531*0*P*:~ +GS*HB*FL0738*PERSEPVS*20090601*040612*1*X*005010X279~ +ST*277*0001*005010X214~ +BHT*0085*08*277X2140001*20060205*1635*TH~ +HL*1**20*1~ +NM1*AY*2*FIRST CLEARINGHOUSE*****46*CLHR00~ +TRN*1*200102051635S00001ABCDEF~ +DTP*050*D8*20060205~ +DTP*009*D8*20060205~ +HL*2*1*21*1~ +NM1*41*2*BEST BILLING SERVICE*****46*S00001~ +TRN*2*2002020542857~ +STC*A0:16:PR*20060205*WQ*1000~ +QTY*90*1~ +QTY*AA*2~ +AMT*YU*200~ +AMT*YY*800~ +HL*3*2*19*1~ +NM1*85*2*SMITH CLINIC*****FI*123456789~ +HL*4*3*PT~ +NM1*QC*1*DOE*JOHN****MI*00ABCD1234~ +TRN*2*DOE01428~ +STC*A0:16:PR*20060205*WQ*200~ +REF*1K*22029500123407X~ +REF*D9*22029500123407X~ +REF*BLT*22029500123407X~ +DTP*472*RD8*20060128-20060131~ +SVC*HC:22305:22*350*****1~ +STC*A3:122**U*******A3:153:82~ +REF*FJ*11~ +SE*37*0001~ +GE*1*1~ +IEA*1*000026531~"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCA277> result = entityResult.Query(query); + + var interchangeSegment = result.Select(x => x.InterchangeControlHeader); + 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); + + Assert.IsTrue(result.Select(x => x.Transactions).HasValue); + Assert.IsTrue(result.Select(x => x.Transactions)[0].HasValue); + + var itemIdentification = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.ItemIdentification) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(itemIdentification.HasValue); + Assert.IsTrue(itemIdentification.IsPresent); + Assert.AreEqual("FJ", itemIdentification.ValueOrDefault()); + + var pharmacyPrescriptionNumber = result + .Select(x => x.Transactions)[0] + .Select(x => x.PatientDetail)[0] + .Select(x => x.ClaimStatusTrackingNumber)[0] + .Select(x => x.ServiceLineInformation)[0] + .Select(x => x.PharmacyPrescriptionNumber) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsFalse(pharmacyPrescriptionNumber.HasValue); + Assert.IsFalse(pharmacyPrescriptionNumber.IsPresent); + } + } +} \ No newline at end of file diff --git a/src/Machete.X12.Tests/Layouts/Layout835Tests.cs b/src/Machete.X12.Tests/Layouts/Layout835Tests.cs index 32051b0aa..6064100ba 100644 --- a/src/Machete.X12.Tests/Layouts/Layout835Tests.cs +++ b/src/Machete.X12.Tests/Layouts/Layout835Tests.cs @@ -1,5 +1,6 @@ namespace Machete.X12.Tests.Layouts { + using System.Linq; using NUnit.Framework; using Testing; using X12Schema.V5010; @@ -10,13 +11,40 @@ public class Layout835Tests : X12MacheteTestHarness { [Test] - public void Test() + public void Verify_can_parse_optional_segment_succeeded_by_segment_list_of_same_type() { // this data doesn't have a valid PER segment before 'PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org' so it fails // because it is defined in L1000A_835 as Segment BusinessContactInformation { get; } which is optional followed by // SegmentList TechnicalContactInformation { get; } which is required 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 entityResult = Parser.Parse(message); @@ -40,6 +68,247 @@ public void Test() Assert.AreEqual("EMEDNYBAT", functionalIdentifierGroup); } + [Test] + public void Verify_can_parse_VersionIdentification_when_ReceiverIdentification_missing() + { + 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*F2*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 entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCPA835> result = entityResult.Query(query); + + Assert.IsTrue(result.HasResult); + + var transactions = result.Select(x => x.Transactions)[0]; + + Assert.IsTrue(transactions.HasValue); + + Value versionIdentification = result + .Select(x => x.Transactions)[0] + .Select(x => x.VersionIdentification) + .Select(x => x.ReferenceIdentificationQualifier); + + Assert.IsTrue(versionIdentification.HasValue); + Assert.IsTrue(versionIdentification.IsPresent); + Assert.AreEqual("F2", versionIdentification.ValueOrDefault()); + } + + [Test] + [Explicit("Issue #65")] + public void Verify_can_parse_PayerWebsite_when_multiple_TechnicalContactInformation_segments_present() + { + 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*F2*00DJ +DTM*405*20180611 +N1*PR*NYSDOH +N3*OFFICE OF HEALTH INSURANCE PROGRAMS*CORNING TOWER, EMPIRE STATE PLAZA +N4*ALBANY*NY*122370080 +PER*CX*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*IC*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 entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCPA835> result = entityResult.Query(query); + + Assert.IsTrue(result.HasResult); + + var transactions = result.Select(x => x.Transactions)[0]; + + Assert.IsTrue(transactions.HasValue); + + Value businessContactInformation = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.BusinessContactInformation) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(businessContactInformation.HasValue); + Assert.IsTrue(businessContactInformation.IsPresent); + Assert.AreEqual("CX", businessContactInformation.ValueOrDefault()); + + var contacts = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.TechnicalContactInformation); + + Assert.IsTrue(contacts.HasValue); + + var technicalContacts = contacts.ToEnumerable().ToList(); + + foreach (var contactInfo in technicalContacts) + { + Assert.IsTrue(contactInfo.HasValue); + + var contact = contactInfo.Select(x => x.ContactFunctionCode); + + Assert.IsTrue(contact.HasValue); + Assert.IsTrue(contact.IsPresent); + Assert.AreEqual("BL", contact.ValueOrDefault()); + } + + var payerWebsite = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.PayerWebsite) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(payerWebsite.HasValue); + Assert.IsTrue(payerWebsite.IsPresent); + Assert.AreEqual("IC", payerWebsite.ValueOrDefault()); + } + + [Test] + [Explicit("Issue #65")] + public void Verify_can_parse_PayerWebsite_when_single_TechnicalContactInformation_segments_present() + { + 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*F2*00DJ +DTM*405*20180611 +N1*PR*NYSDOH +N3*OFFICE OF HEALTH INSURANCE PROGRAMS*CORNING TOWER, EMPIRE STATE PLAZA +N4*ALBANY*NY*122370080 +PER*CX*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*IC*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 entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, HCPA835> result = entityResult.Query(query); + + Assert.IsTrue(result.HasResult); + + var transactions = result.Select(x => x.Transactions)[0]; + + Assert.IsTrue(transactions.HasValue); + + Value businessContactInformation = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.BusinessContactInformation) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(businessContactInformation.HasValue); + Assert.IsTrue(businessContactInformation.IsPresent); + Assert.AreEqual("CX", businessContactInformation.ValueOrDefault()); + + var contacts = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.TechnicalContactInformation); + + Assert.IsTrue(contacts.HasValue); + + var technicalContacts = contacts.ToEnumerable().ToList(); + + foreach (var contactInfo in technicalContacts) + { + Assert.IsTrue(contactInfo.HasValue); + + var contact = contactInfo.Select(x => x.ContactFunctionCode); + + Assert.IsTrue(contact.HasValue); + Assert.IsTrue(contact.IsPresent); + Assert.AreEqual("BL", contact.ValueOrDefault()); + } + + var payerWebsite = result + .Select(x => x.Transactions)[0] + .Select(x => x.PayerIdentification)[0] + .Select(x => x.PayerWebsite) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(payerWebsite.HasValue); + Assert.IsTrue(payerWebsite.IsPresent); + Assert.AreEqual("IC", payerWebsite.ValueOrDefault()); + } + [Test] public void Verify_can_parse_segment_succeeded_by_segment_list_of_same_type() { diff --git a/src/Machete.X12.Tests/ParserTests/ParsingMultipleSegmentOfSameTypeTests.cs b/src/Machete.X12.Tests/ParserTests/ParsingMultipleSegmentOfSameTypeTests.cs new file mode 100644 index 000000000..b13e3c25e --- /dev/null +++ b/src/Machete.X12.Tests/ParserTests/ParsingMultipleSegmentOfSameTypeTests.cs @@ -0,0 +1,61 @@ +namespace Machete.X12.Tests.ParserTests +{ + using NUnit.Framework; + using Testing; + using TestSchema; + + + [TestFixture] + public class ParsingMultipleSegmentOfSameType : + X12MacheteTestHarness + { + [Test] + 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 +PER*CX*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*BL*PROVIDER SERVICES*TE*321321321*UR*www.default.org +PER*IC*PROVIDER SERVICES*TE*321321321*UR*www.default.org +SE*1301*212900796 +GE*1*176073292 +IEA*1*176073292"; + + EntityResult entityResult = Parser.Parse(message); + + Assert.IsTrue(Schema.TryGetLayout(out ILayoutParserFactory layout)); + + IParser query = entityResult.CreateQuery(layout); + + Result, LayoutConditionIssue> result = entityResult.Query(query); + + Assert.IsTrue(result.HasResult); + + Value businessContactInformation = result + .Select(x => x.BusinessContactInformation) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(businessContactInformation.HasValue); + Assert.IsTrue(businessContactInformation.IsPresent); + Assert.AreEqual("CX", businessContactInformation.ValueOrDefault()); + + var technicalContact = result + .Select(x => x.TechnicalContactInformation) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(technicalContact.HasValue); + Assert.IsTrue(technicalContact.IsPresent); + Assert.AreEqual("BL", technicalContact.ValueOrDefault()); + + var payerWebsite = result + .Select(x => x.PayerWebsite) + .Select(x => x.ContactFunctionCode); + + Assert.IsTrue(payerWebsite.HasValue); + Assert.IsTrue(payerWebsite.IsPresent); + Assert.AreEqual("IC", payerWebsite.ValueOrDefault()); + } + } +} \ No newline at end of file diff --git a/src/Machete.X12.Tests/TestSchema/LayoutConditionIssue.cs b/src/Machete.X12.Tests/TestSchema/LayoutConditionIssue.cs new file mode 100644 index 000000000..585851c54 --- /dev/null +++ b/src/Machete.X12.Tests/TestSchema/LayoutConditionIssue.cs @@ -0,0 +1,24 @@ +namespace Machete.X12.Tests.TestSchema +{ + public interface LayoutConditionIssue : + X12Layout + { + Segment InterchangeControlHeader { get; } + + Segment FunctionalGroupHeader { get; } + + Segment TransactionSetHeader { get; } + + Segment BusinessContactInformation { get; } + + Segment TechnicalContactInformation { get; } + + Segment PayerWebsite { get; } + + Segment TransactionSetTrailer { get; } + + Segment FunctionalGroupTrailer { get; } + + Segment InterchangeControlTrailer { get; } + } +} \ No newline at end of file diff --git a/src/Machete.X12.Tests/TestSchema/LayoutConditionIssueMap.cs b/src/Machete.X12.Tests/TestSchema/LayoutConditionIssueMap.cs new file mode 100644 index 000000000..1730d5965 --- /dev/null +++ b/src/Machete.X12.Tests/TestSchema/LayoutConditionIssueMap.cs @@ -0,0 +1,28 @@ +namespace Machete.X12.Tests.TestSchema +{ + using Configuration; + + + public class LayoutConditionIssueMap : + X12LayoutMap + { + public LayoutConditionIssueMap() + { + Id = "LayoutConditionIssue"; + Name = "Payer Identification"; + + Segment(x => x.InterchangeControlHeader, 0); + Segment(x => x.FunctionalGroupHeader, 1); + Segment(x => x.TransactionSetHeader, 2, x => x.IsRequired()); + Segment(x => x.BusinessContactInformation, 3, + x => x.Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("CX"))); + Segment(x => x.TechnicalContactInformation, 4, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("BL"))); + Segment(x => x.PayerWebsite, 5, + x => x.Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("IC"))); + Segment(x => x.TransactionSetTrailer, 6, x => x.IsRequired()); + Segment(x => x.FunctionalGroupTrailer, 7); + Segment(x => x.InterchangeControlTrailer, 8); + } + } +} \ No newline at end of file diff --git a/src/Machete.X12.Tests/TestSchema/PERSegment.cs b/src/Machete.X12.Tests/TestSchema/PERSegment.cs new file mode 100644 index 000000000..c84d58cb3 --- /dev/null +++ b/src/Machete.X12.Tests/TestSchema/PERSegment.cs @@ -0,0 +1,22 @@ +namespace Machete.X12.Tests.TestSchema +{ + public interface PERSegment : + X12Segment + { + Value ContactFunctionCode { get; } + + Value Name { get; } + + Value CommunicationNumberQualifier1 { get; } + + Value CommunicationNumber1 { get; } + + Value CommunicationNumberQualifier2 { get; } + + Value CommunicationNumber2 { get; } + + Value CommunicationNumberQualifier3 { get; } + + Value CommunicationNumber3 { get; } + } +} \ No newline at end of file diff --git a/src/Machete.X12.Tests/TestSchema/PERSegmentMap.cs b/src/Machete.X12.Tests/TestSchema/PERSegmentMap.cs new file mode 100644 index 000000000..0939f83dc --- /dev/null +++ b/src/Machete.X12.Tests/TestSchema/PERSegmentMap.cs @@ -0,0 +1,24 @@ +namespace Machete.X12.Tests.TestSchema +{ + using Configuration; + + + public class PERSegmentMap : + X12SegmentMap + { + public PERSegmentMap() + { + Id = "PER"; + Name = "Administrative Communications Contact"; + + Value(x => x.ContactFunctionCode, 1, x => x.FixedLength(2).IsRequired()); + Value(x => x.Name, 2, x => x.MinLength(1).MaxLength(60)); + Value(x => x.CommunicationNumberQualifier1, 3, x => x.FixedLength(2)); + Value(x => x.CommunicationNumber1, 4, x => x.MinLength(1).MaxLength(80)); + Value(x => x.CommunicationNumberQualifier2, 5, x => x.FixedLength(2)); + Value(x => x.CommunicationNumber2, 6, x => x.MinLength(1).MaxLength(80)); + Value(x => x.CommunicationNumberQualifier3, 7, x => x.FixedLength(2)); + Value(x => x.CommunicationNumber3, 8, x => x.MinLength(1).MaxLength(80)); + } + } +} \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/L2000D_277ACK.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/L2000D_277ACK.cs index 13288edd4..bf0b4bbf5 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/L2000D_277ACK.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/L2000D_277ACK.cs @@ -10,6 +10,6 @@ public interface L2000D_277ACK : Layout PatientName { get; } - LayoutList ProviderOfServiceInformationTraceIdentifier { get; } + LayoutList ClaimStatusTrackingNumber { get; } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/L2200D_277ACK.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/L2200D_277ACK.cs index 7f00b77cb..a25ef3f4a 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/L2200D_277ACK.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/L2200D_277ACK.cs @@ -12,7 +12,7 @@ public interface L2200D_277ACK : Segment PayerClaimControlNumber { get; } - Segment ClaimIdentifierNumberForClearinghouseAndOtherTransmissionIternmediaries { get; } + Segment ClaimIdNumberForClearinghouseAndOtherTransmissionItermediaries { get; } Segment InstitutionalBillTypeIdentification { get; } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277.cs index e051be733..4e047debb 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277.cs @@ -12,6 +12,8 @@ public interface L2220D_277 : Segment ItemIdentification { get; } + Segment PharmacyPrescriptionNumber { get; } + Segment Date { get; } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277ACK.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277ACK.cs index 438f87a11..63b33acfc 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277ACK.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/L2220D_277ACK.cs @@ -14,8 +14,6 @@ public interface L2220D_277ACK : Segment PharmacyPrescriptionNumber { get; } - Segment InstitutionalBillTypeIdentification { get; } - Segment Date { get; } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L1000A_835Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L1000A_835Map.cs index aa4001f84..650228fd3 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L1000A_835Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L1000A_835Map.cs @@ -16,9 +16,12 @@ public L1000A_835Map() Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); Segment(x => x.AdditionalIdentification, 3); - Segment(x => x.BusinessContactInformation, 4, x => x.Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("CX"))); - Segment(x => x.TechnicalContactInformation, 5, x => x.IsRequired().Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("BL"))); - Segment(x => x.PayerWebsite, 6); + Segment(x => x.BusinessContactInformation, 4, + x => x.Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("CX"))); + Segment(x => x.TechnicalContactInformation, 5, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("BL"))); + Segment(x => x.PayerWebsite, 6, + x => x.Condition = parser => parser.Where(p => p.ContactFunctionCode.IsEqualTo("IC"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277ACKMap.cs index fa99d0926..41a323223 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277ACKMap.cs @@ -12,7 +12,8 @@ public L2000A_277ACKMap() Id = "277ACK"; Name = "Information Source Detail"; - Segment(x => x.InformationSourceLevel, 0, x => x.IsRequired()); + Segment(x => x.InformationSourceLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("20"))); Layout(x => x.InformationSourceName, 1); Layout(x => x.TransmissionReceiptControlIdentifier, 2); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277Map.cs index dddfab081..f2129c52f 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000A_277Map.cs @@ -12,7 +12,8 @@ public L2000A_277Map() Id = "2000A"; Name = "Information Source Name"; - Segment(x => x.InformationSourceLevel, 0, x => x.IsRequired()); + Segment(x => x.InformationSourceLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("20"))); Layout(x => x.PayerName, 1); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277ACKMap.cs index a2183d4f6..cd307262c 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277ACKMap.cs @@ -12,7 +12,8 @@ public L2000B_277ACKMap() Id = "2000B"; Name = "Information Receiver Detail"; - Segment(x => x.InformationSourceLevel, 0, x => x.IsRequired()); + Segment(x => x.InformationSourceLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("21"))); Layout(x => x.InformationSourceName, 1); Layout(x => x.InformationReceiverApplicationTraceIdentifier, 2); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277Map.cs index bb4908d27..9419553ad 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000B_277Map.cs @@ -12,7 +12,8 @@ public L2000B_277Map() Id = "2000B"; Name = "Information Receiver Detail"; - Segment(x => x.InformationReceiverLevel, 0, x => x.IsRequired()); + Segment(x => x.InformationReceiverLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("21"))); Layout(x => x.InformationReceiverName, 1); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277ACKMap.cs index 20484da6c..85ce94159 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277ACKMap.cs @@ -12,7 +12,8 @@ public L2000C_277ACKMap() Id = "2000C"; Name = "Billing Provider of Service Detail"; - Segment(x => x.BillingPRoviderOfServiceLevel, 0); + Segment(x => x.BillingPRoviderOfServiceLevel, 0, + x => x.Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("19"))); Layout(x => x.BillingProviderName, 1); Layout(x => x.ProviderOfServiceInformationTraceIdentifier, 2); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277Map.cs index 48b0460ee..786913081 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000C_277Map.cs @@ -12,7 +12,8 @@ public L2000C_277Map() Id = "2000C"; Name = "Service Provider Detail"; - Segment(x => x.ServiceProviderLevel, 0, x => x.IsRequired()); + Segment(x => x.ServiceProviderLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("19"))); Layout(x => x.ServiceProviderName, 1); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277ACKMap.cs index c62b5ca3b..822b67eb7 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277ACKMap.cs @@ -12,9 +12,10 @@ public L2000D_277ACKMap() Id = "2000D"; Name = "Patient Level"; - Segment(x => x.PatientLevel, 0); + Segment(x => x.PatientLevel, 0, + x => x.Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("PT"))); Layout(x => x.PatientName, 1); - Layout(x => x.ProviderOfServiceInformationTraceIdentifier, 2); + Layout(x => x.ClaimStatusTrackingNumber, 2); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277Map.cs index 9f564f4c6..349a721a4 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2000D_277Map.cs @@ -12,7 +12,8 @@ public L2000D_277Map() Id = "2000D"; Name = "Patient Level"; - Segment(x => x.ServiceProviderLevel, 0, x => x.IsRequired()); + Segment(x => x.ServiceProviderLevel, 0, + x => x.IsRequired().Condition = parser => parser.Where(p => p.LevelCode.IsEqualTo("PT"))); Layout(x => x.ServiceProviderName, 1); Layout(x => x.PayerClaimControlNumber, 2); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837DMap.cs index 92bc143f2..efc160567 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837DMap.cs @@ -15,8 +15,12 @@ public L2010AA_837DMap() Segment(x => x.BillingProvider, 0, x => x.IsRequired()); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.TaxIdNumber, 3, x => x.IsRequired()); - Segment(x => x.UPINOrLicenseInformation, 4); + Segment(x => x.TaxIdNumber, 3, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); + Segment(x => x.UPINOrLicenseInformation, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("OB") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G"))); Segment(x => x.ContactInformation, 5); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837PMap.cs index 5e2d34a29..54b0af64b 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AA_837PMap.cs @@ -15,8 +15,12 @@ public L2010AA_837PMap() Segment(x => x.BillingProvider, 0, x => x.IsRequired()); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.TaxIdNumber, 3, x => x.IsRequired()); - Segment(x => x.LicenseInformation, 4); + Segment(x => x.TaxIdNumber, 3, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); + Segment(x => x.LicenseInformation, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("O8") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G"))); Segment(x => x.ContactInformation, 5); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837DMap.cs index aa79659b2..783c4032c 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837DMap.cs @@ -15,8 +15,12 @@ public L2010AC_837DMap() Segment(x => x.Plan, 0); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.TaxIdNumber, 4, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.TaxIdNumber, 4, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EI"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837IMap.cs index e0cce54d1..a7f22ffea 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837IMap.cs @@ -15,8 +15,12 @@ public L2010AC_837IMap() Segment(x => x.Plan, 0); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.TaxIdNumber, 4, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.TaxIdNumber, 4, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EI"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837PMap.cs index 5d3500b6d..fb793002f 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010AC_837PMap.cs @@ -15,8 +15,12 @@ public L2010AC_837PMap() Segment(x => x.Plan, 0); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.TaxIdNumber, 4, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.TaxIdNumber, 4, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EIB"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837DMap.cs index 2d9d2edbe..20d0116a2 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837DMap.cs @@ -16,8 +16,13 @@ public L2010BA_837DMap() Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); Segment(x => x.DemographicInformation, 3); - Segment(x => x.SecondaryIdentification, 4); - Segment(x => x.PropertyAndCasualtyClaimNumber, 5); + Segment(x => x.SecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.PropertyAndCasualtyClaimNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837IMap.cs index 8999e505b..8743ae619 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837IMap.cs @@ -16,8 +16,10 @@ public L2010BA_837IMap() Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); Segment(x => x.DemographicInformation, 3); - Segment(x => x.SecondaryIdentification, 4); - Segment(x => x.PropertyAndCasualtyClaimNumber, 5); + Segment(x => x.SecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); + Segment(x => x.PropertyAndCasualtyClaimNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837PMap.cs index 82c45002f..7441ec688 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BA_837PMap.cs @@ -16,8 +16,10 @@ public L2010BA_837PMap() Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); Segment(x => x.DemographicInformation, 3); - Segment(x => x.SecondaryIdentification, 4); - Segment(x => x.PropertyAndCasualtyClaimNumber, 5); + Segment(x => x.SecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); + Segment(x => x.PropertyAndCasualtyClaimNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); Segment(x => x.PropertyAndCasualtyContactInformation, 6); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837DMap.cs index 95866399e..b519659d4 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837DMap.cs @@ -15,8 +15,14 @@ public L2010BB_837DMap() Segment(x => x.Payer, 0, x => x.IsRequired()); Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.BillingProviderSecondaryIdentification, 4); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.BillingProviderSecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837IMap.cs index 8673643bc..adbbe6d02 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837IMap.cs @@ -15,8 +15,14 @@ public L2010BB_837IMap() Segment(x => x.Payer, 0, x => x.IsRequired()); Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.BillingProviderSecondaryIdentification, 4); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.BillingProviderSecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837PMap.cs index eb90e7754..f224be4a0 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010BB_837PMap.cs @@ -15,8 +15,14 @@ public L2010BB_837PMap() Segment(x => x.Payer, 0, x => x.IsRequired()); Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); - Segment(x => x.SecondaryIdentification, 3); - Segment(x => x.BillingProviderSecondaryIdentification, 4); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.BillingProviderSecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837DMap.cs index f85a84392..5073ad6f3 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837DMap.cs @@ -16,8 +16,11 @@ public L2010CA_837DMap() Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); Segment(x => x.DemographicInformation, 3, x => x.IsRequired()); - Segment(x => x.PropertyAndCasualtyClaimNumber, 4); - Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5); + Segment(x => x.PropertyAndCasualtyClaimNumber, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); + Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1W") || + p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837IMap.cs index 03b7b9708..a7bef47da 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837IMap.cs @@ -16,8 +16,11 @@ public L2010CA_837IMap() Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); Segment(x => x.DemographicInformation, 3, x => x.IsRequired()); - Segment(x => x.PropertyAndCasualtyClaimNumber, 4); - Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5); + Segment(x => x.PropertyAndCasualtyClaimNumber, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); + Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1W") || + p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837PMap.cs index cb6fc43ea..56af19932 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2010CA_837PMap.cs @@ -16,8 +16,11 @@ public L2010CA_837PMap() Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); Segment(x => x.DemographicInformation, 3, x => x.IsRequired()); - Segment(x => x.PropertyAndCasualtyClaimNumber, 4); - Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5); + Segment(x => x.PropertyAndCasualtyClaimNumber, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("Y4"))); + Segment(x => x.PropertyAndCasualtyPatientIdentifier, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1W") || + p.ReferenceIdentificationQualifier.IsEqualTo("SY"))); Segment(x => x.PropertyAndCasualtyPatientContactInformation, 6); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2110C_270Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2110C_270Map.cs index 0f9262573..db5091702 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2110C_270Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2110C_270Map.cs @@ -13,8 +13,8 @@ public L2110C_270Map() Name = "Subscriber Eligibility or Benefit Inquiry"; Segment(x => x.EligibilityOrBenefitInquiry, 0); - Segment(x => x.SpendDownAmount, 1); - Segment(x => x.SpendDownTotalBilledAmount, 2); + Segment(x => x.SpendDownAmount, 1, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("R"))); + Segment(x => x.SpendDownTotalBilledAmount, 2, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("PB"))); Segment(x => x.AdditionalInquiryInformation, 3); Segment(x => x.AdditionalInformation, 4); Segment(x => x.EligibilityOrBenefitDate, 5); diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200A_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200A_277ACKMap.cs index 0ed355869..7033e809b 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200A_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200A_277ACKMap.cs @@ -13,8 +13,10 @@ public L2200A_277ACKMap() Name = "Transmission Receipt Control Identifier"; Segment(x => x.TransmissionReceiptControlIdentifier, 0, x => x.IsRequired()); - Segment(x => x.InformationSourceReceiptDate, 1, x => x.IsRequired()); - Segment(x => x.InformationSourceProcessDate, 2, x => x.IsRequired()); + Segment(x => x.InformationSourceReceiptDate, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("050"))); + Segment(x => x.InformationSourceProcessDate, 2, + x => x.IsRequired().Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("009"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200B_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200B_277ACKMap.cs index 44136ca30..1e194df7c 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200B_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200B_277ACKMap.cs @@ -14,10 +14,10 @@ public L2200B_277ACKMap() Segment(x => x.ApplicationTraceIdentifier, 0, x => x.IsRequired()); Segment(x => x.StatusInformation, 1, x => x.IsRequired()); - Segment(x => x.TotalAcceptedQuantity, 2); - Segment(x => x.TotalRejectedQuantity, 3); - Segment(x => x.TotalAcceptedAmount, 4); - Segment(x => x.TotalRejectedAmount, 5); + Segment(x => x.TotalAcceptedQuantity, 2, x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("90"))); + Segment(x => x.TotalRejectedQuantity, 3, x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("AA"))); + Segment(x => x.TotalAcceptedAmount, 4, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("YU"))); + Segment(x => x.TotalRejectedAmount, 5, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("YY"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200C_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200C_277ACKMap.cs index 6beeaad9a..14fd65b36 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200C_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200C_277ACKMap.cs @@ -15,10 +15,10 @@ public L2200C_277ACKMap() Segment(x => x.ProviderOfServiceInformationTraceIdentifier, 0); Segment(x => x.StatusInformation, 1); Segment(x => x.SecondaryIdentifier, 2); - Segment(x => x.TotalAcceptedQuantity, 3); - Segment(x => x.TotalRejectedQuantity, 4); - Segment(x => x.TotalAcceptedAmount, 5); - Segment(x => x.TotalRejectedAmount, 6); + Segment(x => x.TotalAcceptedQuantity, 3, x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("QA"))); + Segment(x => x.TotalRejectedQuantity, 4, x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("QC"))); + Segment(x => x.TotalAcceptedAmount, 5, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("YU"))); + Segment(x => x.TotalRejectedAmount, 6, x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("YY"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277ACKMap.cs index 4a2bb3419..1d750ed10 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277ACKMap.cs @@ -14,9 +14,12 @@ public L2200D_277ACKMap() Segment(x => x.TrackingNumber, 0, x => x.IsRequired()); Segment(x => x.StatusInformation, 1, x => x.IsRequired()); - Segment(x => x.PayerClaimControlNumber, 2); - Segment(x => x.ClaimIdentifierNumberForClearinghouseAndOtherTransmissionIternmediaries, 3); - Segment(x => x.InstitutionalBillTypeIdentification, 4); + Segment(x => x.PayerClaimControlNumber, 2, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1K"))); + Segment(x => x.ClaimIdNumberForClearinghouseAndOtherTransmissionItermediaries, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("D9"))); + Segment(x => x.InstitutionalBillTypeIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("BLT"))); Segment(x => x.ClaimLevelServiceDate, 5); Layout(x => x.ServiceLineInformation, 6, x => x.IsRequired()); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277Map.cs index 88336e307..eb502c5d7 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2200D_277Map.cs @@ -14,12 +14,18 @@ public L2200D_277Map() Segment(x => x.PayerClaimControlNumber, 0, x => x.IsRequired()); Segment(x => x.ClaimLevelStatusInformation, 1); - Segment(x => x.PatientControlNumber, 2, x => x.IsRequired()); - Segment(x => x.InstitutionalTypeOfBill, 3); - Segment(x => x.MedicalRecordIdentificationNumber, 4); - Segment(x => x.ClaimIdentificationNumberForClearinghousesAndOtherTransmissionIntermediaries, 5); - Segment(x => x.ClaimServiceDate, 6); - Segment(x => x.ResponseDueDate, 7); + Segment(x => x.PatientControlNumber, 2, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EJ"))); + Segment(x => x.InstitutionalTypeOfBill, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("BLT"))); + Segment(x => x.MedicalRecordIdentificationNumber, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EA"))); + Segment(x => x.ClaimIdentificationNumberForClearinghousesAndOtherTransmissionIntermediaries, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("D9"))); + Segment(x => x.ClaimServiceDate, 6, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("472"))); + Segment(x => x.ResponseDueDate, 7, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("106"))); Layout(x => x.ClaimSupplementalInformation, 8); Layout(x => x.ServiceLineInformation, 9, x => x.IsRequired()); } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277ACKMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277ACKMap.cs index 3b9a23cf3..818993c8b 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277ACKMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277ACKMap.cs @@ -14,9 +14,10 @@ public L2220D_277ACKMap() Segment(x => x.Information, 0); Segment(x => x.LevelStatusInformation, 1, x => x.IsRequired()); - Segment(x => x.ItemIdentification, 2, x => x.IsRequired()); - Segment(x => x.PharmacyPrescriptionNumber, 3); - Segment(x => x.InstitutionalBillTypeIdentification, 4); + Segment(x => x.ItemIdentification, 2, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("FJ"))); + Segment(x => x.PharmacyPrescriptionNumber, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("XZ"))); Segment(x => x.Date, 5); } } diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277Map.cs index 38cf710c9..8034e9365 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2220D_277Map.cs @@ -14,8 +14,11 @@ public L2220D_277Map() Segment(x => x.Information, 0); Segment(x => x.StatusInformation, 1, x => x.IsRequired()); - Segment(x => x.ItemIdentification, 2, x => x.IsRequired()); - Segment(x => x.Date, 3, x => x.IsRequired()); + Segment(x => x.ItemIdentification, 2, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("FJ"))); + Segment(x => x.PharmacyPrescriptionNumber, 3, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("XZ"))); + Segment(x => x.Date, 4, x => x.IsRequired()); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837DMap.cs index f9ceaeae9..eb75d9255 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837DMap.cs @@ -13,23 +13,35 @@ public L2300_837DMap() Name = "Claim Information"; Segment(x => x.ClaimInformation, 0, x => x.IsRequired()); - Segment(x => x.AccidentDate, 1); - Segment(x => x.AppliancePlacementDate, 2); - Segment(x => x.ServiceDate, 3); - Segment(x => x.RepricerReceivedDate, 4); + Segment(x => x.AccidentDate, 1, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("439"))); + Segment(x => x.AppliancePlacementDate, 2, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("452"))); + Segment(x => x.ServiceDate, 3, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("472"))); + Segment(x => x.RepricerReceivedDate, 4, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("050"))); Segment(x => x.OrthodonticTotalMonthsOfTretment, 5); Segment(x => x.ToothStatus, 6); Segment(x => x.ClaimSupplementalInformation, 7); Segment(x => x.ContractInformation, 8); Segment(x => x.PatientAmountPaid, 9); - Segment(x => x.PredeterminationIdentification, 10); - Segment(x => x.ServiceAuthorizationExceptionCode, 11); - Segment(x => x.PayerClaimControlNumber, 12); - Segment(x => x.ReferralNumber, 13); - Segment(x => x.PriorAuthorization, 14); - Segment(x => x.RepricedClaimNumber, 15); - Segment(x => x.AdjustedRepricedClaimNumber, 16); - Segment(x => x.ClaimIdentifierForTransmissionIntermediaries, 17); + Segment(x => x.PredeterminationIdentification, 10, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G3"))); + Segment(x => x.ServiceAuthorizationExceptionCode, 11, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("4N"))); + Segment(x => x.PayerClaimControlNumber, 12, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F8"))); + Segment(x => x.ReferralNumber, 13, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.PriorAuthorization, 14, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.RepricedClaimNumber, 15, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9A"))); + Segment(x => x.AdjustedRepricedClaimNumber, 16, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9C"))); + Segment(x => x.ClaimIdentifierForTransmissionIntermediaries, 17, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("D9"))); Segment(x => x.FileInformation, 18); Segment(x => x.ClaimNote, 19); Segment(x => x.HealthcareDiagnosisCode, 20); diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837PMap.cs index 57f969ce6..37f150702 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2300_837PMap.cs @@ -13,50 +13,90 @@ public L2300_837PMap() Name = "Claim Information"; Segment(x => x.ClaimInformation, 0, x => x.IsRequired()); - Segment(x => x.OnsetOfCurrentIllnessDate, 1); - Segment(x => x.InitialTreatmentDate, 2); - Segment(x => x.LastSeenDate, 3); - Segment(x => x.AcuteManifestationDate, 4); - Segment(x => x.AccidentDate, 5); - Segment(x => x.LastMensrualPeriod, 6); - Segment(x => x.LastXRayDate, 7); - Segment(x => x.HearingVisionPrescriptionDate, 8); - Segment(x => x.DisabilityDates, 9); - Segment(x => x.LastWorkedDate, 10); - Segment(x => x.AuthorizedReturnToWork, 11); - Segment(x => x.AdmissionDate, 12); - Segment(x => x.DischargeDate, 13); - Segment(x => x.AssumedRelinquishedCareDates, 14); - Segment(x => x.PropertyAndCasaultyDateOfFirstContact, 15); - Segment(x => x.RepricerReceivedDate, 16); + Segment(x => x.OnsetOfCurrentIllnessDate, 1, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("431"))); + Segment(x => x.InitialTreatmentDate, 2, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("454"))); + Segment(x => x.LastSeenDate, 3, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("304"))); + Segment(x => x.AcuteManifestationDate, 4, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("453"))); + Segment(x => x.AccidentDate, 5, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("439"))); + Segment(x => x.LastMensrualPeriod, 6, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("484"))); + Segment(x => x.LastXRayDate, 7, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("455"))); + Segment(x => x.HearingVisionPrescriptionDate, 8, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("471"))); + Segment(x => x.DisabilityDates, 9, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("314") || + p.DateTimeQualifier.IsEqualTo("360") || + p.DateTimeQualifier.IsEqualTo("361"))); + Segment(x => x.LastWorkedDate, 10, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("297"))); + Segment(x => x.AuthorizedReturnToWork, 11, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("296"))); + Segment(x => x.AdmissionDate, 12, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("435"))); + Segment(x => x.DischargeDate, 13, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("096"))); + Segment(x => x.AssumedRelinquishedCareDates, 14, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("090"))); + Segment(x => x.PropertyAndCasaultyDateOfFirstContact, 15, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("444"))); + Segment(x => x.RepricerReceivedDate, 16, x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("050"))); Segment(x => x.ClaimSupplementalInfo, 17); Segment(x => x.ContractInfo, 18); Segment(x => x.PatientAmountPaid, 19); - Segment(x => x.ServiceAuthorizationExceptionCode, 20); - Segment(x => x.MandatoryMedicareCrossoverIndicator, 21); - Segment(x => x.MammographyCertificationNumber, 22); - Segment(x => x.ReferralNumber, 23); - Segment(x => x.PriorAuthorization, 24); - Segment(x => x.PayerClaimControlNumber, 25); - Segment(x => x.CLIANumber, 26); - Segment(x => x.RepricedClaimNumber, 27); - Segment(x => x.AdjustedRepricedClaimNumber, 28); - Segment(x => x.InvestigationalDeviceExemptionNumber, 29); - Segment(x => x.ClaimIdentifierForTransmissionIntermediaries, 30); - Segment(x => x.MedicalRecordNumber, 31); - Segment(x => x.DemonstrationProjectIdentifier, 32); - Segment(x => x.CarePlanOversight, 33); + Segment(x => x.ServiceAuthorizationExceptionCode, 20, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("4N"))); + Segment(x => x.MandatoryMedicareCrossoverIndicator, 21, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F5"))); + Segment(x => x.MammographyCertificationNumber, 22, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EW"))); + Segment(x => x.ReferralNumber, 23, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.PriorAuthorization, 24, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.PayerClaimControlNumber, 25, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F8"))); + Segment(x => x.CLIANumber, 26, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("X4"))); + Segment(x => x.RepricedClaimNumber, 27, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9A"))); + Segment(x => x.AdjustedRepricedClaimNumber, 28, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9C"))); + Segment(x => x.InvestigationalDeviceExemptionNumber, 29, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("LX"))); + Segment(x => x.ClaimIdentifierForTransmissionIntermediaries, 30, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("D9"))); + Segment(x => x.MedicalRecordNumber, 31, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EA"))); + Segment(x => x.DemonstrationProjectIdentifier, 32, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("P4"))); + Segment(x => x.CarePlanOversight, 33, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1J"))); Segment(x => x.FileInfo, 34); Segment(x => x.ClaimNote, 35); Segment(x => x.AmbulanceTransportInfo, 36); Segment(x => x.SpinalManipulationServiceInfo, 37); - Segment(x => x.AmbulanceCertification, 38); - Segment(x => x.PatientConditionInfo, 39); - Segment(x => x.HomeboundIndicator, 40); - Segment(x => x.EPSDTReferral, 41); - Segment(x => x.HealthCareDiagnosisCode, 42); - Segment(x => x.AnesthesiaRelatedProcedure, 43); - Segment(x => x.ConditionInfo, 44); + Segment(x => x.AmbulanceCertification, 38, + x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("07"))); + Segment(x => x.PatientConditionInfo, 39, + x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("E1") || + p.CodeCategory.IsEqualTo("E2") || + p.CodeCategory.IsEqualTo("E3"))); + Segment(x => x.HomeboundIndicator, 40, x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("75"))); + Segment(x => x.EPSDTReferral, 41, x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("ZZ"))); + Segment(x => x.HealthCareDiagnosisCode, 42, + x => x.Condition = parser => parser.Where(p => + p.HealthCareCodeInformation1.Select(s => s.DiagnosisTypeCode).IsEqualTo("ABK") || + p.HealthCareCodeInformation1.Select(s => s.DiagnosisTypeCode).IsEqualTo("BK"))); + Segment(x => x.AnesthesiaRelatedProcedure, 43, + x => x.Condition = parser => parser.Where(p => p.HealthCareCodeInformation1.Select(s => s.DiagnosisTypeCode).IsEqualTo("BP"))); + Segment(x => x.ConditionInfo, 44, + x => x.Condition = parser => parser.Where(p => p.HealthCareCodeInformation1.Select(s => s.DiagnosisTypeCode).IsEqualTo("BG"))); Segment(x => x.ClaimPricingOrRepricingInfo, 45); Layout(x => x.ReferringProvider, 46); Layout(x => x.RenderingProvider, 47); diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310A_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310A_837IMap.cs index 5dd2662fa..f92a61b54 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310A_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310A_837IMap.cs @@ -14,7 +14,11 @@ public L2310A_837IMap() Segment(x => x.AttendingProvider, 0); Segment(x => x.SpecialtyInformation, 1); - Segment(x => x.SecondaryIdentification, 2); + Segment(x => x.SecondaryIdentification, 2, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("OB") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310B_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310B_837IMap.cs index 0bab242ce..220bdf8a3 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310B_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310B_837IMap.cs @@ -13,7 +13,11 @@ public L2310B_837IMap() Name = "Operating Physician Name"; Segment(x => x.RenderingProvider, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + X => X.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310C_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310C_837IMap.cs index c4e8c0707..ccf9cb9c4 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310C_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2310C_837IMap.cs @@ -13,7 +13,11 @@ public L2310C_837IMap() Name = "Other Operating Physician Name"; Segment(x => x.OperatingPhysician, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2320_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2320_837DMap.cs index 346788d73..37f253d26 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2320_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2320_837DMap.cs @@ -14,9 +14,12 @@ public L2320_837DMap() Segment(x => x.SubscriberInformation, 0); Segment(x => x.ClaimLevelAdjustments, 1); - Segment(x => x.CoordinationOfBenefitsPayerPaidAmount, 2); - Segment(x => x.RemainingPatientLiability, 3); - Segment(x => x.CoordinationOfBenefitsTotalNonCoveredAmount, 4); + Segment(x => x.CoordinationOfBenefitsPayerPaidAmount, 2, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("D"))); + Segment(x => x.RemainingPatientLiability, 3, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("EAF"))); + Segment(x => x.CoordinationOfBenefitsTotalNonCoveredAmount, 4, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("A8"))); Segment(x => x.InsuranceCoverageInformation, 5, x => x.IsRequired()); Segment(x => x.OutpatientAdjudicationInformation, 6); Layout(x => x.Subscriber, 7); diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837DMap.cs index 35f75037f..117d78f15 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837DMap.cs @@ -16,12 +16,21 @@ public L2330B_837DMap() Segment(x => x.Address, 1); Segment(x => x.GeographicInformation, 2); Segment(x => x.ClaimCheckOrRemittanceDate, 3); - Segment(x => x.SecondaryIdentification, 4); - Segment(x => x.PriorAuthorizationNumber, 5); - Segment(x => x.ReferralNumber, 6); - Segment(x => x.ClaimAdjustmentIndicator, 7); - Segment(x => x.PredeterminationIdentification, 8); - Segment(x => x.ClaimControlNumber, 9); + Segment(x => x.SecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.PriorAuthorizationNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.ReferralNumber, 6, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.ClaimAdjustmentIndicator, 7, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("T4"))); + Segment(x => x.PredeterminationIdentification, 8, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G3"))); + Segment(x => x.ClaimControlNumber, 9, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F8"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837PMap.cs index f8c1b71fa..0f2f55043 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330B_837PMap.cs @@ -16,11 +16,19 @@ public L2330B_837PMap() Segment(x => x.Address, 1); Segment(x => x.GeographicInfo, 2); Segment(x => x.ClaimCheckOrRemittanceDate, 3); - Segment(x => x.SecondaryIdentification, 4); - Segment(x => x.PriorAuthorizationNumber, 5); - Segment(x => x.ReferralNumber, 6); - Segment(x => x.ClaimAdjustmentIndicator, 7); - Segment(x => x.ClaimControlNumber, 8); + Segment(x => x.SecondaryIdentification, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("2U") || + p.ReferenceIdentificationQualifier.IsEqualTo("EI") || + p.ReferenceIdentificationQualifier.IsEqualTo("FY") || + p.ReferenceIdentificationQualifier.IsEqualTo("NF"))); + Segment(x => x.PriorAuthorizationNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.ReferralNumber, 6, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.ClaimAdjustmentIndicator, 7, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("T4"))); + Segment(x => x.ClaimControlNumber, 8, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F8"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330C_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330C_837DMap.cs index 96430655b..ef9dce9a6 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330C_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330C_837DMap.cs @@ -13,7 +13,10 @@ public L2330C_837DMap() Name = "Other Payer Referring Provider"; Segment(x => x.ReferringProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837DMap.cs index 198d6964b..44fe611f9 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837DMap.cs @@ -13,7 +13,11 @@ public L2330D_837DMap() Name = "Other Payer Rendering Provider"; Segment(x => x.RenderingProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837IMap.cs index 4508144e4..feb225281 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330D_837IMap.cs @@ -13,7 +13,11 @@ public L2330D_837IMap() Name = "Other Payer Operating Physician"; Segment(x => x.OperatingPhysician, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837DMap.cs index 61b7c8065..a32b5e872 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837DMap.cs @@ -13,7 +13,11 @@ public L2330E_837DMap() Name = "Other Payer Supervising Provider"; Segment(x => x.SupervisingProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837IMap.cs index 95a7963af..050134e50 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330E_837IMap.cs @@ -13,7 +13,11 @@ public L2330E_837IMap() Name = "Other Payer Other Operating Physician"; Segment(x => x.OperatingPhysician, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837DMap.cs index dfb9e5ded..4ef37aec7 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837DMap.cs @@ -13,7 +13,9 @@ public L2330F_837DMap() Name = "Other Payer Billing Provider"; Segment(x => x.BillingProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837IMap.cs index 43cd92467..0a9f51d19 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330F_837IMap.cs @@ -13,7 +13,10 @@ public L2330F_837IMap() Name = "Other Payer Service Facility Location"; Segment(x => x.ServiceFacilityLocation, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837DMap.cs index 55604865f..cf56b1c4c 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837DMap.cs @@ -13,7 +13,10 @@ public L2330G_837DMap() Name = "Other Payer Service Facility Location"; Segment(x => x.ServiceFacilityLocation, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837IMap.cs index d8b805e63..083e37ab7 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330G_837IMap.cs @@ -13,7 +13,11 @@ public L2330G_837IMap() Name = "Other Payer Rendering Provider Name"; Segment(x => x.RenderingProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837DMap.cs index 101025b2f..12de4d82c 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837DMap.cs @@ -13,7 +13,11 @@ public L2330H_837DMap() Name = "Other Payer Assistant Surgeon"; Segment(x => x.AssistantSurgeon, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837IMap.cs index e1166b7bf..afd526d4e 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330H_837IMap.cs @@ -13,7 +13,10 @@ public L2330H_837IMap() Name = "Other Payer Referring Provider"; Segment(x => x.ReferringProvider, 0); - Segment(x => x.SecondaryIdentification, 1, x => x.IsRequired()); + Segment(x => x.SecondaryIdentification, 1, + x => x.IsRequired().Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330I_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330I_837IMap.cs index f9d181d0c..282c5ff3d 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330I_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2330I_837IMap.cs @@ -13,7 +13,9 @@ public L2330I_837IMap() Name = "Other Payer Billing Provider"; Segment(x => x.BillingProvider, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837DMap.cs index 6187d96a4..7c41e4483 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837DMap.cs @@ -15,27 +15,39 @@ public L2400_837DMap() Segment(x => x.ServiceLineNumber, 0, x => x.IsRequired()); Segment(x => x.DentalService, 1, x => x.IsRequired()); Segment(x => x.ToothInformation, 2); - Segment(x => x.ServiceDate, 3); - Segment(x => x.PriorPlacementDate, 4); - Segment(x => x.AppliancePlacementDate, 5); - Segment(x => x.ReplacementDate, 6); - Segment(x => x.TreatmentStartDate, 7); - Segment(x => x.TreatmentCompletionDate, 8); - Segment(x => x.ContractInformation, 16); - Segment(x => x.ServicePredeterminationIndentification, 9); - Segment(x => x.PriorAuthorization, 10); - Segment(x => x.LineItemControlNumber, 11); - Segment(x => x.RepricedClaimNumber, 12); - Segment(x => x.AdjustedRepricedClaimNumber, 13); - Segment(x => x.ReferralNumber, 14); - Segment(x => x.SalesTaxAmount, 15); - Segment(x => x.FileInformation, 16); - Segment(x => x.LinePricingOrRepricingInfo, 17); - Layout(x => x.RenderingProvider, 18); - Layout(x => x.AssistantSurgeon, 19); - Layout(x => x.SupervisingProvider, 20); - Layout(x => x.ServiceFacilityLocation, 21); - Layout(x => x.LineAdjudicationInformation, 22); + Segment(x => x.ServiceDate, 3, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("472"))); + Segment(x => x.PriorPlacementDate, 4, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("139") || p.DateTimeQualifier.IsEqualTo("441"))); + Segment(x => x.AppliancePlacementDate, 5, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("452"))); + Segment(x => x.ReplacementDate, 6, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("446"))); + Segment(x => x.TreatmentStartDate, 7, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("196"))); + Segment(x => x.TreatmentCompletionDate, 8, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("198"))); + Segment(x => x.ContractInformation, 9); + Segment(x => x.ServicePredeterminationIndentification, 10, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G3"))); + Segment(x => x.PriorAuthorization, 11, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.LineItemControlNumber, 12, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("6R"))); + Segment(x => x.RepricedClaimNumber, 13, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9A"))); + Segment(x => x.AdjustedRepricedClaimNumber, 14, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9C"))); + Segment(x => x.ReferralNumber, 15, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.SalesTaxAmount, 16); + Segment(x => x.FileInformation, 17); + Segment(x => x.LinePricingOrRepricingInfo, 18); + Layout(x => x.RenderingProvider, 19); + Layout(x => x.AssistantSurgeon, 20); + Layout(x => x.SupervisingProvider, 21); + Layout(x => x.ServiceFacilityLocation, 22); + Layout(x => x.LineAdjudicationInformation, 23); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837IMap.cs index b6bdb96e8..09a5461e0 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837IMap.cs @@ -16,11 +16,16 @@ public L2400_837IMap() Segment(x => x.InstitutionalServiceLine, 1, x => x.IsRequired()); Segment(x => x.LineSupplementalInformation, 2); Segment(x => x.ServiceDate, 3, x => x.IsRequired()); - Segment(x => x.LineItemControlNumber, 4); - Segment(x => x.RepricedLineItemReferenceNumber, 5); - Segment(x => x.AdjustedRepricedLineItemReferenceNumber, 6); - Segment(x => x.ServiceTaxAmount, 7); - Segment(x => x.FacilityTaxAmount, 8); + Segment(x => x.LineItemControlNumber, 4, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("6R"))); + Segment(x => x.RepricedLineItemReferenceNumber, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9B"))); + Segment(x => x.AdjustedRepricedLineItemReferenceNumber, 6, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9D"))); + Segment(x => x.ServiceTaxAmount, 7, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("GT"))); + Segment(x => x.FacilityTaxAmount, 8, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("N8"))); Segment(x => x.ThirdPartyOrganizationNotes, 9); Segment(x => x.LinePricingOrRepricingInformation, 10); Layout(x => x.DrugIdentification, 11); diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837PMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837PMap.cs index 328d003e9..d952400de 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837PMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2400_837PMap.cs @@ -15,55 +15,91 @@ public L2400_837PMap() Segment(x => x.ServiceLineNumber, 0, x => x.IsRequired()); Segment(x => x.ProfessionalService, 1, x => x.IsRequired()); Segment(x => x.DurableMedicalEquipmentService, 2); - Segment(x => x.LineSupplementalInformation, 3); - Segment(x => x.DurableMedicalEquipmentCertificateOfMedicalNecessityIndicator, 4); + Segment(x => x.LineSupplementalInformation, 3, + x => x.Condition = parser => parser.Where(p => p.AttachmentTransmissionCode.IsEqualTo("AA") || + p.AttachmentTransmissionCode.IsEqualTo("BM") || + p.AttachmentTransmissionCode.IsEqualTo("EL") || + p.AttachmentTransmissionCode.IsEqualTo("EM") || + p.AttachmentTransmissionCode.IsEqualTo("FT") || + p.AttachmentTransmissionCode.IsEqualTo("FX"))); + Segment(x => x.DurableMedicalEquipmentCertificateOfMedicalNecessityIndicator, 4, + x => x.Condition = parser => parser.Where(p => p.AttachmentTransmissionCode.IsEqualTo("AB") || + p.AttachmentTransmissionCode.IsEqualTo("AD") || + p.AttachmentTransmissionCode.IsEqualTo("AF") || + p.AttachmentTransmissionCode.IsEqualTo("AG") || + p.AttachmentTransmissionCode.IsEqualTo("NS"))); Segment(x => x.AmbulanceTransportInformation, 5); Segment(x => x.DurableMedicalEqumentCertification, 6); - Segment(x => x.AmbulanceCertification, 7); - Segment(x => x.HospiceEmployeeIndicator, 8); - Segment(x => x.ConditionIndicatorDurableMedicalEquipment, 9); - Segment(x => x.ServiceDate, 10, x => x.IsRequired()); - Segment(x => x.PrescriptionDate, 11); - Segment(x => x.CertificationRevisionDate, 12); - Segment(x => x.BeginTherapyDate, 13); - Segment(x => x.LastCertificationDate, 14); - Segment(x => x.LastSeenDate, 15); - Segment(x => x.TestDate, 16); - Segment(x => x.ShippedDate, 17); - Segment(x => x.LastXRayDate, 18); - Segment(x => x.LastSeenDate, 19); - Segment(x => x.InitialTreatmentDate, 20); - Segment(x => x.AmbulancePatientCount, 21); - Segment(x => x.ObstetricAnesthesiaAdditionalUnits, 22); - Segment(x => x.TestResult, 23); - Segment(x => x.ContractInformation, 24); - Segment(x => x.RepricedLineItemReferenceNumber, 25); - Segment(x => x.AdjustedRepricedLineItemReferenceNumber, 26); - Segment(x => x.PriorAuthorization, 27); - Segment(x => x.LineItemControlNumber, 28); - Segment(x => x.MammographyCerficationNumber, 29); - Segment(x => x.CLIANumber, 30); - Segment(x => x.ReferringCLIAFacilityIdentification, 31); - Segment(x => x.ImmunizationBatchNumber, 32); - Segment(x => x.ReferralNumber, 33); - Segment(x => x.SalesTaxAmount, 34); - Segment(x => x.PostageClaimedAmount, 35); - Segment(x => x.FileInformation, 36); - Segment(x => x.LineNote, 37); - Segment(x => x.ThirdPartyOrganizationNotes, 38); - Segment(x => x.PurchasedServiceInformation, 39); - Segment(x => x.LinePricingInformation, 40); - Layout(x => x.DrugIdentification, 41); - Layout(x => x.RenderingProvider, 42); - Layout(x => x.PurchasedServiceProvider, 43); - Layout(x => x.SerivceFacilityLocation, 44); - Layout(x => x.SupervisingProvider, 45); - Layout(x => x.OrderingProvider, 46); - Layout(x => x.ReferringProvider, 47); - Layout(x => x.AmbulancePickUpLocation, 48); - Layout(x => x.AmbulanceDropOffLocation, 49); - Layout(x => x.LineAdjudicationInformation, 50); - Layout(x => x.FormIdentificationCode, 51); + Segment(x => x.AmbulanceCertification, 7, x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("07"))); + Segment(x => x.HospiceEmployeeIndicator, 8, x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("70"))); + Segment(x => x.ConditionIndicatorDurableMedicalEquipment, 9, x => x.Condition = parser => parser.Where(p => p.CodeCategory.IsEqualTo("09"))); + Segment(x => x.ServiceDate, 10, + x => x.IsRequired().Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("472"))); + Segment(x => x.PrescriptionDate, 11, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("471"))); + Segment(x => x.CertificationRevisionDate, 12, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("607"))); + Segment(x => x.BeginTherapyDate, 13, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("463"))); + Segment(x => x.LastCertificationDate, 14, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("461"))); + Segment(x => x.LastSeenDate, 15, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("304"))); + Segment(x => x.TestDate, 16, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("738") || + p.DateTimeQualifier.IsEqualTo("739"))); + Segment(x => x.ShippedDate, 17, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("011"))); + Segment(x => x.LastXRayDate, 18, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("455"))); + Segment(x => x.InitialTreatmentDate, 19, + x => x.Condition = parser => parser.Where(p => p.DateTimeQualifier.IsEqualTo("454"))); + Segment(x => x.AmbulancePatientCount, 20, + x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("PT"))); + Segment(x => x.ObstetricAnesthesiaAdditionalUnits, 21, + x => x.Condition = parser => parser.Where(p => p.QuantityQualifier.IsEqualTo("FL"))); + Segment(x => x.TestResult, 22); + Segment(x => x.ContractInformation, 23); + Segment(x => x.RepricedLineItemReferenceNumber, 24, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9B"))); + Segment(x => x.AdjustedRepricedLineItemReferenceNumber, 25, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9D"))); + Segment(x => x.PriorAuthorization, 26, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("G1"))); + Segment(x => x.LineItemControlNumber, 27, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("6R"))); + Segment(x => x.MammographyCerficationNumber, 28, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EW"))); + Segment(x => x.CLIANumber, 29, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("X4"))); + Segment(x => x.ReferringCLIAFacilityIdentification, 30, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F4"))); + Segment(x => x.ImmunizationBatchNumber, 31, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("BT"))); + Segment(x => x.ReferralNumber, 32, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("9F"))); + Segment(x => x.SalesTaxAmount, 33, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("T"))); + Segment(x => x.PostageClaimedAmount, 34, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("F4"))); + Segment(x => x.FileInformation, 35); + Segment(x => x.LineNote, 36, + x => x.Condition = parser => parser.Where(p => p.NoteReferenceCode.IsEqualTo("ADD") || p.NoteReferenceCode.IsEqualTo("DCP"))); + Segment(x => x.ThirdPartyOrganizationNotes, 37, + x => x.Condition = parser => parser.Where(p => p.NoteReferenceCode.IsEqualTo("TPO"))); + Segment(x => x.PurchasedServiceInformation, 38); + Segment(x => x.LinePricingInformation, 39); + Layout(x => x.DrugIdentification, 40); + Layout(x => x.RenderingProvider, 41); + Layout(x => x.PurchasedServiceProvider, 42); + Layout(x => x.SerivceFacilityLocation, 43); + Layout(x => x.SupervisingProvider, 44); + Layout(x => x.OrderingProvider, 45); + Layout(x => x.ReferringProvider, 46); + Layout(x => x.AmbulancePickUpLocation, 47); + Layout(x => x.AmbulanceDropOffLocation, 48); + Layout(x => x.LineAdjudicationInformation, 49); + Layout(x => x.FormIdentificationCode, 50); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2410_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2410_837IMap.cs index 8434a82dc..09f07d1bf 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2410_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2410_837IMap.cs @@ -14,7 +14,9 @@ public L2410_837IMap() Segment(x => x.DrugIdentification, 0); Segment(x => x.DrugQuantity, 1, x => x.IsRequired()); - Segment(x => x.PrescriptionOrCompoundDrugAssociationNumber, 2); + Segment(x => x.PrescriptionOrCompoundDrugAssociationNumber, 2, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("VY") || + p.ReferenceIdentificationQualifier.IsEqualTo("XZ"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837DMap.cs index bfb09b586..f2a89f168 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837DMap.cs @@ -14,7 +14,11 @@ public L2420A_837DMap() Segment(x => x.RenderingProvider, 0); Segment(x => x.SpecialtyInformation, 1, x => x.IsRequired()); - Segment(x => x.SecondaryIdentification, 2); + Segment(x => x.SecondaryIdentification, 2, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837IMap.cs index c34a9723a..2ad8976ec 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420A_837IMap.cs @@ -13,7 +13,11 @@ public L2420A_837IMap() Name = "Operating Physician Name"; Segment(x => x.Physician, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837DMap.cs index 6b74735cb..27ed88296 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837DMap.cs @@ -14,7 +14,11 @@ public L2420B_837DMap() Segment(x => x.AssistantSurgeon, 0); Segment(x => x.SpecialtyInformation, 1); - Segment(x => x.SecondaryIdentification, 2); + Segment(x => x.SecondaryIdentification, 2, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837IMap.cs index 5c09edc26..8f2a8c142 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420B_837IMap.cs @@ -13,7 +13,11 @@ public L2420B_837IMap() Name = "Other Operating Physician Name"; Segment(x => x.Physician, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837DMap.cs index 267aacb65..ab6a7ca0b 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837DMap.cs @@ -13,7 +13,11 @@ public L2420C_837DMap() Name = "Supervising Provider Name"; Segment(x => x.SupervisingProvider, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837IMap.cs index 3dd0d8329..28d874110 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420C_837IMap.cs @@ -13,7 +13,11 @@ public L2420C_837IMap() Name = "Rendering Provider Name"; Segment(x => x.ProviderName, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837DMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837DMap.cs index 88a08ab25..378dfdda1 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837DMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837DMap.cs @@ -15,7 +15,10 @@ public L2420D_837DMap() Segment(x => x.FacilityLocation, 0); Segment(x => x.Address, 1, x => x.IsRequired()); Segment(x => x.GeographicInformation, 2, x => x.IsRequired()); - Segment(x => x.SecondaryIdentification, 3); + Segment(x => x.SecondaryIdentification, 3, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2") || + p.ReferenceIdentificationQualifier.IsEqualTo("LU"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837IMap.cs index c475c05c2..66fc29566 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2420D_837IMap.cs @@ -13,7 +13,10 @@ public L2420D_837IMap() Name = "Rendering Provider Name"; Segment(x => x.ReferringProvider, 0); - Segment(x => x.SecondaryIdentification, 1); + Segment(x => x.SecondaryIdentification, 1, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("0B") || + p.ReferenceIdentificationQualifier.IsEqualTo("1G") || + p.ReferenceIdentificationQualifier.IsEqualTo("G2"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2430_837IMap.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2430_837IMap.cs index d9e70ed13..57cd0f679 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2430_837IMap.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/L2430_837IMap.cs @@ -15,7 +15,8 @@ public L2430_837IMap() Segment(x => x.LineAdjudicationInformation, 0); Segment(x => x.LineAdjustment, 1); Segment(x => x.LineCheckOrRemittanceDate, 2, x => x.IsRequired()); - Segment(x => x.RemainingPatientLiability, 3); + Segment(x => x.RemainingPatientLiability, 3, + x => x.Condition = parser => parser.Where(p => p.AmountQualifierCode.IsEqualTo("EAF"))); } } } \ No newline at end of file diff --git a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/T835Map.cs b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/T835Map.cs index 96e84e037..378d42089 100644 --- a/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/T835Map.cs +++ b/src/Machete.X12Schema/Generated/V5010/Layouts/Maps/T835Map.cs @@ -17,8 +17,10 @@ public T835Map() Segment(x => x.FinancialInformation, 2, x => x.IsRequired()); Segment(x => x.ReassociationTraceNumber, 3, x => x.IsRequired()); Segment(x => x.ForeignCurrencyInformation, 4); - Segment(x => x.ReceiverIdentification, 5); - Segment(x => x.VersionIdentification, 6); + Segment(x => x.ReceiverIdentification, 5, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("EV"))); + Segment(x => x.VersionIdentification, 6, + x => x.Condition = parser => parser.Where(p => p.ReferenceIdentificationQualifier.IsEqualTo("F2"))); Segment(x => x.ProductionDate, 7); Layout(x => x.PayerIdentification, 8); Layout(x => x.PayeeIdentification, 9);