Files
linqpad/consolidate CaseTypeFamily information.linq

398 lines
12 KiB
C#

<Query Kind="Program">
<Connection>
<ID>580b3b8d-cc02-4a68-8fbd-d1ec374a25f2</ID>
<Persist>true</Persist>
<Server>D0001-sql-11.sdt.local</Server>
<Database>jazz dev master Prod</Database>
<ShowServer>true</ShowServer>
</Connection>
<NuGetReference>AWSSDK.DynamoDBv2</NuGetReference>
<NuGetReference>AWSSDK.S3</NuGetReference>
<Namespace>Newtonsoft.Json</Namespace>
<Namespace>Amazon.DynamoDBv2.DataModel</Namespace>
<Namespace>Amazon.DynamoDBv2</Namespace>
<Namespace>Amazon.DynamoDBv2.DocumentModel</Namespace>
<Namespace>Amazon.DynamoDBv2.Model</Namespace>
</Query>
public static Dictionary<int, Tuple<DateTime, DateTime>> Versions = new Dictionary<int, System.Tuple<System.DateTime, System.DateTime>>();
void Main()
{
Versions = (from v in CaseTypeFamilyVersions select v)
.ToDictionary(v => v.CaseTypeFamilyVersionID, t => new Tuple<DateTime, DateTime>(t.StartDate, t.EndDate));
var aprdrg = (from aprDto in CaseTypeFamilyMappingAPRDRGs
join ctfDto in CaseTypeFamilies on aprDto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID
select new AllCaseTypeFamily(
ctfDto.CaseTypeFamilyID,
ctfDto.CaseTypeFamilyGUID,
ctfDto.Name,
ctfDto.CaseTypeFamilyGlobalID,
aprDto.APRDRGCode,
aprDto.CaseTypeFamilyVersionID)).ToList();
var msdrg = (from icd10Dto in CaseTypeFamilyMappingICD10s
join ctfDto in CaseTypeFamilies on icd10Dto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID
select new AllCaseTypeFamily(
ctfDto.CaseTypeFamilyID,
ctfDto.CaseTypeFamilyGUID,
ctfDto.Name,
ctfDto.CaseTypeFamilyGlobalID,
icd10Dto.SkipICD,
icd10Dto.ICD10Code,
icd10Dto.MSDRGCode,
icd10Dto.CaseTypeFamilyVersionID)).ToList();
var cpt = (from cptDto in CaseTypeFamilyMappingCPTs
join ctfDto in CaseTypeFamilies on cptDto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID
select new AllCaseTypeFamily(
ctfDto.CaseTypeFamilyID,
ctfDto.CaseTypeFamilyGUID,
ctfDto.Name,
ctfDto.CaseTypeFamilyGlobalID,
cptDto.CaseTypeFamilyVersionID,
cptDto.CPTCode)).ToList();
//cpt.Dump(nameof(cpt));
var allCaseTypeFamily = aprdrg.Union(msdrg).Union(cpt)
.OrderBy(x => x.CaseTypeFamilyID)
.ThenByDescending(x => x.CaseTypeFamilyVersionID);
var globalCaseTypeFamily = allCaseTypeFamily
.GroupBy(ctf => new { ctf.CaseTypeFamilyID, ctf.CaseTypeFamilyGUID, ctf.Name, ctf.CaseTypeFamilyGlobalID, ctf.CaseTypeFamilyVersionID },
(g, d) => new GlobalCaseTypeFamily(
g.CaseTypeFamilyID,
g.CaseTypeFamilyGUID,
g.Name,
g.CaseTypeFamilyGlobalID,
g.CaseTypeFamilyVersionID,
d.First().StartDate,
d.First().EndDate,
d.Where(x => !string.IsNullOrEmpty(x.APRDRGCode)).Select(x => x.APRDRGCode),
d.Where(x => !string.IsNullOrEmpty(x.CPTCode)).Select(x => x.CPTCode),
d
.Where(x => (string.IsNullOrEmpty(x.APRDRGCode) || string.IsNullOrEmpty(x.CPTCode)) && !x.SkipICD)
.Select(x => new ICD10Code(x.ICD10Code, x.MSDRGCode)),
d
.Where(x => (string.IsNullOrEmpty(x.APRDRGCode) || string.IsNullOrEmpty(x.CPTCode)) && x.SkipICD)
.Select(x => new ICD10Code(x.ICD10Code, x.MSDRGCode))
));
globalCaseTypeFamily.Dump();
/*
try
{
var config = new AmazonDynamoDBConfig
{
ServiceURL = "http://localhost:8000"
};
var client = new AmazonDynamoDBClient(config);
var context = new DynamoDBContext(client);
DeleteTable(client, nameof(GlobalCaseTypeFamily));
CreateTableGlobalCaseTypeFamily(client);
var table = Amazon.DynamoDBv2.DocumentModel.Table.LoadTable(client, nameof(GlobalCaseTypeFamily));
globalCaseTypeFamily.ToList()
.ForEach(ctf =>
{
table.PutItem(Document.FromJson(JsonConvert.SerializeObject(ctf)));
});
}
catch (Exception ex)
{
ex.Dump();
throw;
}
*/
//var result = JsonConvert.SerializeObject(globalCaseTypeFamily);
//result.Dump(nameof(globalCaseTypeFamily));
// Util.WriteCsv(result, @"D:\CaseTypeFamily.csv");
//System.IO.File.WriteAllText(@"D:\CaseTypeFamily.json", JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented));
}
private static void CreateTableGlobalCaseTypeFamily(AmazonDynamoDBClient client)
{
string tableName = nameof(GlobalCaseTypeFamily);
var response = client.CreateTable(new CreateTableRequest
{
TableName = tableName,
AttributeDefinitions = new List<AttributeDefinition>()
{
new AttributeDefinition
{
AttributeName = "PartitionKey",
AttributeType = "S"
},
new AttributeDefinition
{
AttributeName = "CaseTypeFamilyID",
AttributeType = "N"
},
new AttributeDefinition
{
AttributeName = "CaseTypeFamilyGUID",
AttributeType = "S"
},
new AttributeDefinition
{
AttributeName = "Name",
AttributeType = "S"
},
new AttributeDefinition
{
AttributeName = "CaseTypeFamilyGlobalID",
AttributeType = "S"
}
},
KeySchema = new List<KeySchemaElement>()
{
new KeySchemaElement()
{
AttributeName = "PartitionKey",
KeyType = "HASH"
},
new KeySchemaElement
{
AttributeName = "CaseTypeFamilyID",
KeyType = "RANGE"
}
}
});
WaitTillTableCreated(client, tableName, response);
}
#region AWS DynamoDB Helpers
private static void DeleteTable(AmazonDynamoDBClient client, string tableName)
{
try
{
var deleteTableResponse = client.DeleteTable(new DeleteTableRequest()
{
TableName = tableName
});
WaitTillTableDeleted(client, tableName, deleteTableResponse);
}
catch (ResourceNotFoundException)
{
// There is no such table.
}
}
private static void WaitTillTableCreated(AmazonDynamoDBClient client, string tableName,
CreateTableResponse response)
{
var tableDescription = response.TableDescription;
string status = tableDescription.TableStatus;
Console.WriteLine(tableName + " - " + status);
// Let us wait until table is created. Call DescribeTable.
while (status != "ACTIVE")
{
System.Threading.Thread.Sleep(5000); // Wait 5 seconds.
try
{
var res = client.DescribeTable(new DescribeTableRequest
{
TableName = tableName
});
Console.WriteLine("Table name: {0}, status: {1}", res.Table.TableName,
res.Table.TableStatus);
status = res.Table.TableStatus;
}
// Try-catch to handle potential eventual-consistency issue.
catch (ResourceNotFoundException)
{ }
}
}
private static void WaitTillTableDeleted(AmazonDynamoDBClient client, string tableName,
DeleteTableResponse response)
{
var tableDescription = response.TableDescription;
string status = tableDescription.TableStatus;
Console.WriteLine(tableName + " - " + status);
// Let us wait until table is created. Call DescribeTable
try
{
while (status == "DELETING")
{
System.Threading.Thread.Sleep(5000); // wait 5 seconds
var res = client.DescribeTable(new DescribeTableRequest
{
TableName = tableName
});
Console.WriteLine("Table name: {0}, status: {1}", res.Table.TableName,
res.Table.TableStatus);
status = res.Table.TableStatus;
}
}
catch (ResourceNotFoundException)
{
// Table deleted.
}
}
#endregion
public class ICD10Code
{
[DynamoDBProperty]
public string ICD10_Code { get; set; }
[DynamoDBProperty]
public string MSDRGCode { get; set; }
public ICD10Code()
{
ICD10_Code = string.Empty;
MSDRGCode = string.Empty;
}
public ICD10Code(string icd10code, string msdrgcode)
{
ICD10_Code = icd10code;
MSDRGCode = msdrgcode;
}
}
[DynamoDBTable("GlobalCaseTypeFamily")]
public class GlobalCaseTypeFamily
{
[DynamoDBHashKey]
public string PartitionKey => $"{CaseTypeFamilyVersionID}|{CaseTypeFamilyID}";
[DynamoDBProperty]
public int CaseTypeFamilyID { get; set; }
[DynamoDBProperty]
public Guid CaseTypeFamilyGUID { get; set; }
[DynamoDBProperty]
public string Name { get; set; }
[DynamoDBProperty]
public string CaseTypeFamilyGlobalID { get; set; }
[DynamoDBProperty]
public int CaseTypeFamilyVersionID { get; set; }
[DynamoDBProperty]
public DateTime StartDate { get; set; }
[DynamoDBProperty]
public DateTime EndDate { get; set; }
[DynamoDBProperty]
public List<string> APRDRGCodes { get; set; }
[DynamoDBProperty]
public List<string> CPTCodes { get; set; }
[DynamoDBProperty]
public List<ICD10Code> ICD10Codes { get; set; }
[DynamoDBProperty]
public List<ICD10Code> SkipICD10Codes { get; set; }
public GlobalCaseTypeFamily()
{
CaseTypeFamilyID = -1;
CaseTypeFamilyGUID = Guid.Empty;
Name = string.Empty;
CaseTypeFamilyGlobalID = string.Empty;
CaseTypeFamilyVersionID = -1;
StartDate = DateTime.MinValue;
EndDate = DateTime.MaxValue;
APRDRGCodes = new List<string>();
CPTCodes = new List<string>();
}
public GlobalCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID,
DateTime startDate, DateTime endDate)
{
CaseTypeFamilyID = caseTypeFamilyID;
CaseTypeFamilyGUID = caseTypeFamilyGuid;
Name = name;
CaseTypeFamilyGlobalID = caseTypeFamilyGlobalID;
CaseTypeFamilyVersionID = caseTypeFamilyVersionID;
StartDate = startDate;
EndDate = endDate;
}
public GlobalCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID,
DateTime startDate, DateTime endDate,
IEnumerable<string> aprdrgcodes,
IEnumerable<string> cptcodes,
IEnumerable<ICD10Code> icd10codes,
IEnumerable<ICD10Code> skipicd10codes)
: this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID, startDate, endDate)
{
APRDRGCodes = aprdrgcodes.ToList();
CPTCodes = cptcodes.ToList();
ICD10Codes = icd10codes.ToList();
SkipICD10Codes = skipicd10codes.ToList();
}
}
public class AllCaseTypeFamily
{
public int CaseTypeFamilyID { get; set; }
public Guid CaseTypeFamilyGUID { get; set; }
public string Name { get; set; }
public string CaseTypeFamilyGlobalID { get; set; }
public string APRDRGCode { get; set; }
public bool SkipICD { get; set; }
public string ICD10Code { get; set; }
public string MSDRGCode { get; set; }
public string CPTCode { get; set; }
public int CaseTypeFamilyVersionID { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public AllCaseTypeFamily()
{
CaseTypeFamilyID = -1;
CaseTypeFamilyGUID = Guid.Empty;
Name = string.Empty;
CaseTypeFamilyGlobalID = string.Empty;
APRDRGCode = string.Empty;
SkipICD = false;
ICD10Code = string.Empty;
MSDRGCode = string.Empty;
CPTCode = string.Empty;
CaseTypeFamilyVersionID = -1;
StartDate = DateTime.MinValue;
EndDate = DateTime.MaxValue;
}
public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID)
: this()
{
CaseTypeFamilyID = caseTypeFamilyID;
CaseTypeFamilyGUID = caseTypeFamilyGuid;
Name = name;
CaseTypeFamilyGlobalID = caseTypeFamilyGlobalID;
}
public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID)
: this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID)
{
CaseTypeFamilyVersionID = caseTypeFamilyVersionID;
if (Versions.ContainsKey(caseTypeFamilyVersionID))
{
StartDate = UserQuery.Versions[caseTypeFamilyVersionID].Item1;
EndDate = UserQuery.Versions[caseTypeFamilyVersionID].Item2;
}
}
public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, string aprdrgCode, int caseTypeFamilyVersionID)
: this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID)
{
APRDRGCode = aprdrgCode;
}
public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, bool skipICD, string icd10Code, string msdrgCode, int caseTypeFamilyVersionID)
: this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID)
{
SkipICD = skipICD;
ICD10Code = icd10Code;
MSDRGCode = msdrgCode;
}
public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID, string cptCode)
: this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID)
{
CPTCode = cptCode;
}
}