149 lines
8.6 KiB
C#
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");
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|