Files
strataspheredatamanagement/tests/Strata.Stratasphere.Biz.UnitTests/Standards/HACQueryDefinitionUnitTests.cs
T
2026-06-23 11:26:55 -05:00

149 lines
8.6 KiB
C#

using NUnit.Framework;
using Strata.Stratasphere.Biz.Standards;
using Strata.Stratasphere.Biz.Standards.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FluentAssertions;
using System.Collections;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
namespace Strata.Stratasphere.Biz.UnitTests.Standards
{
[TestFixture]
public class HACQueryDefinitionUnitTests
{
private static IEnumerable<TestCaseData> GetHacTestCases(string testName)
{
yield return new TestCaseData("HAC01", true, false).SetName($"{testName}.HAC01, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC02", true, false).SetName($"{testName}.HAC02, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC03", true, false).SetName($"{testName}.HAC03, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC04", true, false).SetName($"{testName}.HAC04, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC05", true, false).SetName($"{testName}.HAC05, IsDX = true, IsPx = false)");
yield return new TestCaseData("HAC06", true, false).SetName($"{testName}.HAC06, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC07", true, false).SetName($"{testName}.HAC07, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC08", true, true).SetName($"{testName}.HAC08, IsDX = true, IsPx = true");
yield return new TestCaseData("HAC09", true, false).SetName($"{testName}.HAC09, IsDX = true, IsPx = false");
yield return new TestCaseData("HAC10", true, true).SetName($"{testName}.HAC10, IsDX = true, IsPx = true");
yield return new TestCaseData("HAC11", true, true).SetName($"{testName}.HAC11, IsDX = true, IsPx = true");
yield return new TestCaseData("HAC12", true, true).SetName($"{testName}.HAC12, IsDX = true, IsPx = true");
yield return new TestCaseData("HAC13", true, true).SetName($"{testName}.HAC13, IsDX = true, IsPx = true");
yield return new TestCaseData("HAC14", true, true).SetName($"{testName}.HAC14, IsDX = true, IsPx = true");
}
[Test, TestCaseSource("GetHacTestCases", new object[] { "Full Refresh" })]
public void Test(string hacCmd, bool isDx, bool isPx)
{
//Creates an instance of the type from the name of the hac command
var cmd = Activator.CreateInstance("Strata.Stratasphere.Biz", $"Strata.Stratasphere.Biz.Standards.Commands.{hacCmd}Command").Unwrap() as HACsBaseCommand;
cmd.Query.Should().Contain("DSSPES")
.And.Contain($@"INSERT INTO SPH.ENCOUNTERHACS (ENCOUNTERID, HAC)
SELECT DISTINCT DSSPES.ENCOUNTERID, '{hacCmd}'
FROM CLIENTDSS.FACTPATIENTENCOUNTERSUMMARY DSSPES
INNER JOIN SPH.ENCOUNTERPATIENTTYPE PT ON PT.ENCOUNTERID = DSSPES.ENCOUNTERID");
if (isDx)
{
cmd.Query.Should().Contain(@"INNER JOIN DSS.FACTPATIENTICD10DIAGNOSTICDETAIL PATICD10DX ON PATICD10DX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10DX ICD10DX ON PATICD10DX.ICD10DXID = ICD10DX.ICD10DXID
INNER JOIN CLIENTDSS.DIMPRESENTONADMISSION PRESENTONADMISSION ON PATICD10DX.PRESENTONADMISSIONID = PRESENTONADMISSION.PRESENTONADMISSIONID
INNER JOIN DSS.DIMSPHPRESENTONADMISSIONROLLUP SPHPOA ON SPHPOA.SPHPRESENTONADMISSIONROLLUPID = PRESENTONADMISSION.SPHPRESENTONADMISSIONROLLUPID").
And.Contain(@"PATICD10DX.SEQUENCENUMBERID <> 1
AND
SPHPOA.SPHPRESENTONADMISSIONROLLUPCODE IN ('1', 'N', 'U', 'W')
AND ICD10DX.ICD10DXCODENODECIMAL IN ");
}
else
{
cmd.Query.Should().NotContain(@"INNER JOIN DSS.FACTPATIENTICD10DIAGNOSTICDETAIL PATICD10DX ON PATICD10DX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10DX ICD10DX ON PATICD10DX.ICD10DXID = ICD10DX.ICD10DXID
INNER JOIN CLIENTDSS.DIMPRESENTONADMISSION PRESENTONADMISSION ON PATICD10DX.PRESENTONADMISSIONID = PRESENTONADMISSION.PRESENTONADMISSIONID
INNER JOIN DSS.DIMSPHPRESENTONADMISSIONROLLUP SPHPOA ON SPHPOA.SPHPRESENTONADMISSIONROLLUPID = PRESENTONADMISSION.SPHPRESENTONADMISSIONROLLUPID").
And.NotContain(@" PATICD10DX.SEQUENCENUMBERID <> 1
AND
SPHPOA.SPHPRESENTONADMISSIONROLLUPCODE IN ('1', 'N', 'U', 'W')
AND ICD10DX.ICD10DXCODENODECIMAL IN ");
}
if (isPx)
{
cmd.Query.Should().Contain(@"INNER JOIN DSS.FACTPATIENTICD10PROCEDURALDETAIL PATICD10PX ON PATICD10PX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10PX ICD10PX ON PATICD10PX.ICD10PXID = ICD10PX.ICD10PXID").
And.Contain(@" AND ICD10PX.ICD10PXCODENODECIMAL IN ");
}
else
{
cmd.Query.Should().NotContain(@"INNER JOIN DSS.FACTPATIENTICD10PROCEDURALDETAIL PATICD10PX ON PATICD10PX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10PX ICD10PX ON PATICD10PX.ICD10PXID = ICD10PX.ICD10PXID").
And.NotContain(@" AND ICD10PX.ICD10PXCODENODECIMAL IN ");
}
}
[Test, TestCaseSource("GetHacTestCases", new object[] { "Encounter List" })]
public void TestMasterEncounterList(string hacCmd, bool isDx, bool isPx)
{
var sessionId = Guid.NewGuid().ToString("N");
var mel = new MasterEncounterListDto()
{
ClientDbGuid = Guid.NewGuid(),
MasterEncounterListTableName = $"DSS.MASTERENCOUNTERLIST_{sessionId}",
SessionId = sessionId
};
var cmd = Activator.CreateInstance("Strata.Stratasphere.Biz", $"Strata.Stratasphere.Biz.Standards.Commands.{hacCmd}Command", false, System.Reflection.BindingFlags.Default, null, new object[]{ mel.MasterEncounterListTableName }, null, null).Unwrap() as HACsBaseCommand;
cmd.Query.Should().Contain("DSSPES").
And.Contain($@"INSERT INTO SPH.ENCOUNTERHACS (ENCOUNTERID, HAC)")
.And.Contain($"SELECT DISTINCT DSSPES.ENCOUNTERID, '{hacCmd}'")
.And.Contain($"FROM CLIENTDSS.FACTPATIENTENCOUNTERSUMMARY DSSPES")
.And.Contain($"INNER JOIN SPH.ENCOUNTERPATIENTTYPE PT ON PT.ENCOUNTERID = DSSPES.ENCOUNTERID")
.And.Contain($"INNER JOIN {mel.MasterEncounterListTableName} MEL ON MEL.ENCOUNTERID = DSSPES.ENCOUNTERID");
if (isDx)
{
cmd.Query.Should().Contain(@"INNER JOIN DSS.FACTPATIENTICD10DIAGNOSTICDETAIL PATICD10DX ON PATICD10DX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10DX ICD10DX ON PATICD10DX.ICD10DXID = ICD10DX.ICD10DXID
INNER JOIN CLIENTDSS.DIMPRESENTONADMISSION PRESENTONADMISSION ON PATICD10DX.PRESENTONADMISSIONID = PRESENTONADMISSION.PRESENTONADMISSIONID
INNER JOIN DSS.DIMSPHPRESENTONADMISSIONROLLUP SPHPOA ON SPHPOA.SPHPRESENTONADMISSIONROLLUPID = PRESENTONADMISSION.SPHPRESENTONADMISSIONROLLUPID").
And.Contain(@"PATICD10DX.SEQUENCENUMBERID <> 1
AND
SPHPOA.SPHPRESENTONADMISSIONROLLUPCODE IN ('1', 'N', 'U', 'W')
AND ICD10DX.ICD10DXCODENODECIMAL IN ");
}
else
{
cmd.Query.Should().NotContain(@"INNER JOIN DSS.FACTPATIENTICD10DIAGNOSTICDETAIL PATICD10DX ON PATICD10DX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10DX ICD10DX ON PATICD10DX.ICD10DXID = ICD10DX.ICD10DXID
INNER JOIN CLIENTDSS.DIMPRESENTONADMISSION PRESENTONADMISSION ON PATICD10DX.PRESENTONADMISSIONID = PRESENTONADMISSION.PRESENTONADMISSIONID
INNER JOIN DSS.DIMSPHPRESENTONADMISSIONROLLUP SPHPOA ON SPHPOA.SPHPRESENTONADMISSIONROLLUPID = PRESENTONADMISSION.SPHPRESENTONADMISSIONROLLUPID").
And.NotContain(@" PATICD10DX.SEQUENCENUMBERID <> 1
AND
AND ICD10DX.ICD10DXCODENODECIMAL IN ");
}
if (isPx)
{
cmd.Query.Should().Contain(@"INNER JOIN DSS.FACTPATIENTICD10DIAGNOSTICDETAIL PATICD10DX ON PATICD10DX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10DX ICD10DX ON PATICD10DX.ICD10DXID = ICD10DX.ICD10DXID").
And.Contain(@" AND ICD10PX.ICD10PXCODENODECIMAL IN ");
}
else
{
cmd.Query.Should().NotContain(@"INNER JOIN DSS.FACTPATIENTICD10PROCEDURALDETAIL PATICD10PX ON PATICD10PX.ENCOUNTERID = DSSPES.ENCOUNTERID
INNER JOIN DSS.DIMICD10PX ICD10PX ON PATICD10PX.ICD10PXID = ICD10PX.ICD10PXID").
And.NotContain(@" AND ICD10PX.ICD10PXCODENODECIMAL IN ");
}
}
[Test]
public void TestSpecialCaseForHAC11()
{
var hac11 = new HAC11Command();
hac11.Query.Should().Contain("INNER JOIN DSS.DIMICD10DX PRIMARYDX ON PRIMARYDX.ICD10DXID = DSSPES.ICD10DXPRIMARYDIAGID");
}
}
}