From 09b19a483885b7f58742c39bccb9ead47df8b911 Mon Sep 17 00:00:00 2001 From: "nisha.meshram" Date: Sat, 29 Aug 2026 07:56:43 +0000 Subject: [PATCH] Seed --- .Net Capstone Project/SeedData.cs | 2130 +++++++++++++++++++++++++++++ 1 file changed, 2130 insertions(+) create mode 100644 .Net Capstone Project/SeedData.cs diff --git a/.Net Capstone Project/SeedData.cs b/.Net Capstone Project/SeedData.cs new file mode 100644 index 0000000..3684d26 --- /dev/null +++ b/.Net Capstone Project/SeedData.cs @@ -0,0 +1,2130 @@ +using ClinicalInsightsPro.API.Models; +using Microsoft.AspNetCore.Identity; + +namespace ClinicalInsightsPro.API.Data; + +/// +/// Seeds the database with 5 demo records per resource, using Indian patient / +/// practitioner / hospital data. +/// +/// IMPORTANT — insert order follows the foreign-key dependency chain, because +/// every child row references the PARENT's BaseEntity.Id (not its business id): +/// +/// Location -> Organization -> Practitioner -> Patient +/// -> PractitionerRole +/// -> Condition / Encounter / Observation / Allergy / Medication +/// -> ServiceRequest / RiskAssessment / CarePlan / CdsAlert +/// +/// Each block is saved before the next one starts, so the FK values are +/// guaranteed to exist in the parent table. +/// +public static class SeedData +{ + private const string SeedUser = "system-seed"; + + public static void Initialize(ApplicationDbContext context) + { + SeedClinicalData(context); + SeedCdsRules(context); + SeedUsers(context); + } + + // ------------------------------------------------------------------ + // MAIN CLINICAL DATA + // ------------------------------------------------------------------ + private static void SeedClinicalData(ApplicationDbContext context) + { + // Idempotent guard: only seed into an empty database. + if (context.Patients.Any()) + return; + + // ============================================================== + // 1. LOCATIONS (no FK — must be inserted first) + // ============================================================== + var locations = new List + { + new Location + { + Id = "loc-001", + LocationId = "loc-001", + ResourceType = "Location", + IdentifierSystem = "http://clinicalinsightspro.in/location", + IdentifierValue = "LOC-NAG-001", + Status = "active", + OperationalStatusSystem = "http://terminology.hl7.org/CodeSystem/v2-0116", + OperationalStatusCode = "U", + OperationalStatusDisplay = "Unoccupied", + Name = "Sanjeevani Cardiology Wing", + Description = "Cardiology OPD and cath lab, Block A, Nagpur", + City = "Nagpur", + State = "Maharashtra", + PostalCode = "440010", + AddressUse = "work", + AddressType = "both", + Mode = "instance", + TypeSystem = "http://terminology.hl7.org/CodeSystem/v3-RoleCode", + TypeCode = "HOSP", + TypeDisplay = "Hospital Unit", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-712-2451001", + Latitude = 21.1458, + Longitude = 79.0882, + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Location + { + Id = "loc-002", + LocationId = "loc-002", + ResourceType = "Location", + IdentifierSystem = "http://clinicalinsightspro.in/location", + IdentifierValue = "LOC-PUN-002", + Status = "active", + Name = "Aarogya OPD Block", + Description = "Outpatient consulting block, Kothrud, Pune", + City = "Pune", + State = "Maharashtra", + PostalCode = "411038", + AddressUse = "work", + AddressType = "both", + Mode = "instance", + TypeSystem = "http://terminology.hl7.org/CodeSystem/v3-RoleCode", + TypeCode = "OF", + TypeDisplay = "Outpatient Facility", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-20-25441002", + Latitude = 18.5204, + Longitude = 73.8567, + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Location + { + Id = "loc-003", + LocationId = "loc-003", + ResourceType = "Location", + IdentifierSystem = "http://clinicalinsightspro.in/location", + IdentifierValue = "LOC-CHE-003", + Status = "active", + Name = "Sri Balaji Diagnostics Centre", + Description = "Pathology and radiology centre, T. Nagar, Chennai", + City = "Chennai", + State = "Tamil Nadu", + PostalCode = "600017", + AddressUse = "work", + AddressType = "both", + Mode = "instance", + TypeSystem = "http://terminology.hl7.org/CodeSystem/v3-RoleCode", + TypeCode = "RADDX", + TypeDisplay = "Radiology Diagnostics", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-44-28151003", + Latitude = 13.0827, + Longitude = 80.2707, + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Location + { + Id = "loc-004", + LocationId = "loc-004", + ResourceType = "Location", + IdentifierSystem = "http://clinicalinsightspro.in/location", + IdentifierValue = "LOC-DEL-004", + Status = "active", + Name = "Ganga Emergency Department", + Description = "24x7 casualty and trauma unit, Karol Bagh, New Delhi", + City = "New Delhi", + State = "Delhi", + PostalCode = "110005", + AddressUse = "work", + AddressType = "both", + Mode = "instance", + TypeSystem = "http://terminology.hl7.org/CodeSystem/v3-RoleCode", + TypeCode = "ER", + TypeDisplay = "Emergency Room", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-11-23611004", + Latitude = 28.6139, + Longitude = 77.2090, + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Location + { + Id = "loc-005", + LocationId = "loc-005", + ResourceType = "Location", + IdentifierSystem = "http://clinicalinsightspro.in/location", + IdentifierValue = "LOC-KOC-005", + Status = "active", + Name = "Malabar Dialysis Unit", + Description = "Nephrology and dialysis unit, Kaloor, Kochi", + City = "Kochi", + State = "Kerala", + PostalCode = "682017", + AddressUse = "work", + AddressType = "both", + Mode = "instance", + TypeSystem = "http://terminology.hl7.org/CodeSystem/v3-RoleCode", + TypeCode = "HOSP", + TypeDisplay = "Hospital Unit", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-484-2401005", + Latitude = 9.9312, + Longitude = 76.2673, + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Locations.AddRange(locations); + context.SaveChanges(); + + // ============================================================== + // 2. ORGANIZATIONS (FK -> Location.Id) + // ============================================================== + var organizations = new List + { + new Organization + { + Id = "org-001", + OrganizationId = "org-001", + Name = "Sanjeevani Multispeciality Hospital", + Alias = "Sanjeevani Hospital", + Identifier = "NABH-MH-NAG-1001", + Line = "12, Ram Nagar, Wardha Road", + City = "Nagpur", + State = "Maharashtra", + PostalCode = "440010", + System = "phone", + Use = "work", + Value = "+91-712-2451000", + LocationId = "loc-001", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Organization + { + Id = "org-002", + OrganizationId = "org-002", + Name = "Aarogya Care Hospital", + Alias = "Aarogya Care", + Identifier = "NABH-MH-PUN-1002", + Line = "45, Karve Road, Kothrud", + City = "Pune", + State = "Maharashtra", + PostalCode = "411038", + System = "phone", + Use = "work", + Value = "+91-20-25441000", + LocationId = "loc-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Organization + { + Id = "org-003", + OrganizationId = "org-003", + Name = "Sri Balaji Medical Centre", + Alias = "Balaji Medical", + Identifier = "NABH-TN-CHE-1003", + Line = "78, Usman Road, T. Nagar", + City = "Chennai", + State = "Tamil Nadu", + PostalCode = "600017", + System = "phone", + Use = "work", + Value = "+91-44-28151000", + LocationId = "loc-003", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Organization + { + Id = "org-004", + OrganizationId = "org-004", + Name = "Ganga Health Institute", + Alias = "Ganga Institute", + Identifier = "NABH-DL-NDL-1004", + Line = "9, Pusa Road, Karol Bagh", + City = "New Delhi", + State = "Delhi", + PostalCode = "110005", + System = "phone", + Use = "work", + Value = "+91-11-23611000", + LocationId = "loc-004", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Organization + { + Id = "org-005", + OrganizationId = "org-005", + Name = "Malabar Health Services", + Alias = "Malabar Health", + Identifier = "NABH-KL-KOC-1005", + Line = "23, Banerji Road, Kaloor", + City = "Kochi", + State = "Kerala", + PostalCode = "682017", + System = "phone", + Use = "work", + Value = "+91-484-2401000", + LocationId = "loc-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Organizations.AddRange(organizations); + context.SaveChanges(); + + // ============================================================== + // 3. PRACTITIONERS (no FK) + // ============================================================== + var practitioners = new List + { + new Practitioner + { + Id = "prac-001", + PractitionerId = "prac-001", + ResourceType = "Practitioner", + IdentifierSystem = "http://nmc.org.in/registration", + IdentifierValue = "MMC-2001-45871", + NameUse = "official", + Prefix = "Dr.", + GivenName = "Rajesh", + FamilyName = "Kulkarni", + Suffix = "MD, DM", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-9822011001", + AddressUse = "work", + AddressType = "both", + AddressLine1 = "12, Ram Nagar, Wardha Road", + AddressLine2 = "Sanjeevani Cardiology Wing", + City = "Nagpur", + State = "Maharashtra", + PostalCode = "440010", + Gender = "male", + BirthDate = new DateTime(1975, 2, 18), + QualificationSystem = "http://terminology.hl7.org/CodeSystem/v2-0360", + QualificationCode = "MD", + QualificationDisplay = "Doctor of Medicine - Cardiology", + QualificationStart = new DateTime(2001, 7, 1), + QualificationEnd = new DateTime(2035, 6, 30), + CommunicationCode = "mr-IN", + CommunicationDisplay = "Marathi (India)", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Practitioner + { + Id = "prac-002", + PractitionerId = "prac-002", + ResourceType = "Practitioner", + IdentifierSystem = "http://nmc.org.in/registration", + IdentifierValue = "MMC-2006-51234", + NameUse = "official", + Prefix = "Dr.", + GivenName = "Meera", + FamilyName = "Joshi", + Suffix = "MD, DM", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-9822011002", + AddressUse = "work", + AddressType = "both", + AddressLine1 = "45, Karve Road, Kothrud", + AddressLine2 = "Aarogya OPD Block", + City = "Pune", + State = "Maharashtra", + PostalCode = "411038", + Gender = "female", + BirthDate = new DateTime(1980, 8, 9), + QualificationSystem = "http://terminology.hl7.org/CodeSystem/v2-0360", + QualificationCode = "MD", + QualificationDisplay = "Doctor of Medicine - Endocrinology", + QualificationStart = new DateTime(2006, 7, 1), + QualificationEnd = new DateTime(2036, 6, 30), + CommunicationCode = "hi-IN", + CommunicationDisplay = "Hindi (India)", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Practitioner + { + Id = "prac-003", + PractitionerId = "prac-003", + ResourceType = "Practitioner", + IdentifierSystem = "http://nmc.org.in/registration", + IdentifierValue = "TNMC-1996-33210", + NameUse = "official", + Prefix = "Dr.", + GivenName = "Suresh", + FamilyName = "Reddy", + Suffix = "MBBS, MD", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-9840011003", + AddressUse = "work", + AddressType = "both", + AddressLine1 = "78, Usman Road, T. Nagar", + AddressLine2 = "Sri Balaji Medical Centre", + City = "Chennai", + State = "Tamil Nadu", + PostalCode = "600017", + Gender = "male", + BirthDate = new DateTime(1970, 12, 1), + QualificationSystem = "http://terminology.hl7.org/CodeSystem/v2-0360", + QualificationCode = "MD", + QualificationDisplay = "Doctor of Medicine - General Medicine", + QualificationStart = new DateTime(1996, 7, 1), + QualificationEnd = new DateTime(2032, 6, 30), + CommunicationCode = "ta-IN", + CommunicationDisplay = "Tamil (India)", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Practitioner + { + Id = "prac-004", + PractitionerId = "prac-004", + ResourceType = "Practitioner", + IdentifierSystem = "http://nmc.org.in/registration", + IdentifierValue = "TCMC-2009-77812", + NameUse = "official", + Prefix = "Dr.", + GivenName = "Kavita", + FamilyName = "Menon", + Suffix = "MD, DNB", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-9847011004", + AddressUse = "work", + AddressType = "both", + AddressLine1 = "23, Banerji Road, Kaloor", + AddressLine2 = "Malabar Health Services", + City = "Kochi", + State = "Kerala", + PostalCode = "682017", + Gender = "female", + BirthDate = new DateTime(1983, 5, 27), + QualificationSystem = "http://terminology.hl7.org/CodeSystem/v2-0360", + QualificationCode = "MD", + QualificationDisplay = "Doctor of Medicine - Pulmonology", + QualificationStart = new DateTime(2009, 7, 1), + QualificationEnd = new DateTime(2039, 6, 30), + CommunicationCode = "ml-IN", + CommunicationDisplay = "Malayalam (India)", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Practitioner + { + Id = "prac-005", + PractitionerId = "prac-005", + ResourceType = "Practitioner", + IdentifierSystem = "http://nmc.org.in/registration", + IdentifierValue = "DMC-2003-66540", + NameUse = "official", + Prefix = "Dr.", + GivenName = "Arjun", + FamilyName = "Bhatt", + Suffix = "MD, DM", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-9811011005", + AddressUse = "work", + AddressType = "both", + AddressLine1 = "9, Pusa Road, Karol Bagh", + AddressLine2 = "Ganga Health Institute", + City = "New Delhi", + State = "Delhi", + PostalCode = "110005", + Gender = "male", + BirthDate = new DateTime(1977, 10, 14), + QualificationSystem = "http://terminology.hl7.org/CodeSystem/v2-0360", + QualificationCode = "MD", + QualificationDisplay = "Doctor of Medicine - Nephrology", + QualificationStart = new DateTime(2003, 7, 1), + QualificationEnd = new DateTime(2037, 6, 30), + CommunicationCode = "hi-IN", + CommunicationDisplay = "Hindi (India)", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Practitioners.AddRange(practitioners); + context.SaveChanges(); + + // ============================================================== + // 4. PATIENTS (FK -> Organization.Id, Practitioner.Id) + // ============================================================== + var patients = new List + { + new Patient + { + Id = "pat-001", + PatientId = "pat-001", + ResourceType = "Patient", + MedicalRecordNumber = "MRN-IN-100001", + IdentifierSystem = "http://clinicalinsightspro.in/mrn", + IdentifierValue = "MRN-IN-100001", + NameUse = "official", + Prefix = "Mr.", + GivenName = "Aarav", + FamilyName = "Sharma", + TelecomSystem = "phone", + TelecomUse = "mobile", + TelecomValue = "+91-9823456701", + Gender = "male", + BirthDate = new DateTime(1985, 4, 12), + AddressUse = "home", + AddressType = "both", + AddressLine = "104, Shivaji Nagar, Dharampeth", + City = "Nagpur", + State = "Maharashtra", + PostalCode = "440010", + MaritalStatusSystem = "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", + MaritalStatusCode = "M", + MaritalStatusDisplay = "Married", + ContactNameUse = "official", + ContactPrefix = "Mrs.", + ContactTelecomSystem = "phone", + ContactTelecomUse = "mobile", + ContactTelecomValue = "+91-9823456702", + ContactAddressUse = "home", + ContactAddressType = "both", + ContactAddressLine = "104, Shivaji Nagar, Dharampeth", + ContactCity = "Nagpur", + ContactState = "Maharashtra", + ContactPostalCode = "440010", + ContactGender = "female", + ContactOrganizationId = "org-001", + ContactPeriodStart = new DateTime(2020, 1, 1), + ContactPeriodEnd = new DateTime(2030, 12, 31), + ManagingOrganizationId = "org-001", + GeneralPractitionerId = "prac-001", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Patient + { + Id = "pat-002", + PatientId = "pat-002", + ResourceType = "Patient", + MedicalRecordNumber = "MRN-IN-100002", + IdentifierSystem = "http://clinicalinsightspro.in/mrn", + IdentifierValue = "MRN-IN-100002", + NameUse = "official", + Prefix = "Ms.", + GivenName = "Priya", + FamilyName = "Deshmukh", + TelecomSystem = "phone", + TelecomUse = "mobile", + TelecomValue = "+91-9890123402", + Gender = "female", + BirthDate = new DateTime(1992, 9, 5), + AddressUse = "home", + AddressType = "both", + AddressLine = "22, Sahakar Nagar, Kothrud", + City = "Pune", + State = "Maharashtra", + PostalCode = "411038", + MaritalStatusSystem = "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", + MaritalStatusCode = "S", + MaritalStatusDisplay = "Never Married", + ContactNameUse = "official", + ContactPrefix = "Mr.", + ContactTelecomSystem = "phone", + ContactTelecomUse = "mobile", + ContactTelecomValue = "+91-9890123403", + ContactAddressUse = "home", + ContactAddressType = "both", + ContactAddressLine = "22, Sahakar Nagar, Kothrud", + ContactCity = "Pune", + ContactState = "Maharashtra", + ContactPostalCode = "411038", + ContactGender = "male", + ContactOrganizationId = "org-002", + ContactPeriodStart = new DateTime(2021, 3, 15), + ContactPeriodEnd = new DateTime(2031, 3, 14), + ManagingOrganizationId = "org-002", + GeneralPractitionerId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Patient + { + Id = "pat-003", + PatientId = "pat-003", + ResourceType = "Patient", + MedicalRecordNumber = "MRN-IN-100003", + IdentifierSystem = "http://clinicalinsightspro.in/mrn", + IdentifierValue = "MRN-IN-100003", + NameUse = "official", + Prefix = "Mr.", + GivenName = "Rohan", + FamilyName = "Iyer", + TelecomSystem = "phone", + TelecomUse = "mobile", + TelecomValue = "+91-9841234504", + Gender = "male", + BirthDate = new DateTime(1978, 1, 23), + AddressUse = "home", + AddressType = "both", + AddressLine = "9, Anna Salai, Mylapore", + City = "Chennai", + State = "Tamil Nadu", + PostalCode = "600004", + MaritalStatusSystem = "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", + MaritalStatusCode = "M", + MaritalStatusDisplay = "Married", + ContactNameUse = "official", + ContactPrefix = "Mrs.", + ContactTelecomSystem = "phone", + ContactTelecomUse = "mobile", + ContactTelecomValue = "+91-9841234505", + ContactAddressUse = "home", + ContactAddressType = "both", + ContactAddressLine = "9, Anna Salai, Mylapore", + ContactCity = "Chennai", + ContactState = "Tamil Nadu", + ContactPostalCode = "600004", + ContactGender = "female", + ContactOrganizationId = "org-003", + ContactPeriodStart = new DateTime(2019, 6, 1), + ContactPeriodEnd = new DateTime(2029, 5, 31), + ManagingOrganizationId = "org-003", + GeneralPractitionerId = "prac-003", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Patient + { + Id = "pat-004", + PatientId = "pat-004", + ResourceType = "Patient", + MedicalRecordNumber = "MRN-IN-100004", + IdentifierSystem = "http://clinicalinsightspro.in/mrn", + IdentifierValue = "MRN-IN-100004", + NameUse = "official", + Prefix = "Ms.", + GivenName = "Ananya", + FamilyName = "Verma", + TelecomSystem = "phone", + TelecomUse = "mobile", + TelecomValue = "+91-9811223306", + Gender = "female", + BirthDate = new DateTime(1996, 11, 17), + AddressUse = "home", + AddressType = "both", + AddressLine = "58, Rajouri Garden", + City = "New Delhi", + State = "Delhi", + PostalCode = "110027", + MaritalStatusSystem = "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", + MaritalStatusCode = "S", + MaritalStatusDisplay = "Never Married", + ContactNameUse = "official", + ContactPrefix = "Mr.", + ContactTelecomSystem = "phone", + ContactTelecomUse = "mobile", + ContactTelecomValue = "+91-9811223307", + ContactAddressUse = "home", + ContactAddressType = "both", + ContactAddressLine = "58, Rajouri Garden", + ContactCity = "New Delhi", + ContactState = "Delhi", + ContactPostalCode = "110027", + ContactGender = "male", + ContactOrganizationId = "org-004", + ContactPeriodStart = new DateTime(2022, 2, 1), + ContactPeriodEnd = new DateTime(2032, 1, 31), + ManagingOrganizationId = "org-004", + GeneralPractitionerId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Patient + { + Id = "pat-005", + PatientId = "pat-005", + ResourceType = "Patient", + MedicalRecordNumber = "MRN-IN-100005", + IdentifierSystem = "http://clinicalinsightspro.in/mrn", + IdentifierValue = "MRN-IN-100005", + NameUse = "official", + Prefix = "Mr.", + GivenName = "Vikram", + FamilyName = "Nair", + TelecomSystem = "phone", + TelecomUse = "mobile", + TelecomValue = "+91-9847556608", + Gender = "male", + BirthDate = new DateTime(1965, 6, 30), + AddressUse = "home", + AddressType = "both", + AddressLine = "31, Panampilly Nagar", + City = "Kochi", + State = "Kerala", + PostalCode = "682036", + MaritalStatusSystem = "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", + MaritalStatusCode = "M", + MaritalStatusDisplay = "Married", + ContactNameUse = "official", + ContactPrefix = "Mrs.", + ContactTelecomSystem = "phone", + ContactTelecomUse = "mobile", + ContactTelecomValue = "+91-9847556609", + ContactAddressUse = "home", + ContactAddressType = "both", + ContactAddressLine = "31, Panampilly Nagar", + ContactCity = "Kochi", + ContactState = "Kerala", + ContactPostalCode = "682036", + ContactGender = "female", + ContactOrganizationId = "org-005", + ContactPeriodStart = new DateTime(2018, 9, 1), + ContactPeriodEnd = new DateTime(2028, 8, 31), + ManagingOrganizationId = "org-005", + GeneralPractitionerId = "prac-004", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Patients.AddRange(patients); + context.SaveChanges(); + + // ============================================================== + // 5. PRACTITIONER ROLES (FK -> Practitioner.Id, Organization.Id, Location.Id) + // ============================================================== + var practitionerRoles = new List + { + new PractitionerRole + { + Id = "prole-001", + PractitionerRoleId = "prole-001", + ResourceType = "PractitionerRole", + IdentifierSystem = "http://clinicalinsightspro.in/practitioner-role", + IdentifierValue = "ROLE-NAG-001", + PeriodStart = new DateTime(2015, 4, 1), + PeriodEnd = new DateTime(2030, 3, 31), + PractitionerId = "prac-001", + OrganizationId = "org-001", + LocationId = "loc-001", + RoleSystem = "http://terminology.hl7.org/CodeSystem/practitioner-role", + RoleCode = "doctor", + RoleDisplay = "Consultant Cardiologist", + SpecialtyCode = "394579002", + SpecialtyDisplay = "Cardiology", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-712-2451011", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new PractitionerRole + { + Id = "prole-002", + PractitionerRoleId = "prole-002", + ResourceType = "PractitionerRole", + IdentifierSystem = "http://clinicalinsightspro.in/practitioner-role", + IdentifierValue = "ROLE-PUN-002", + PeriodStart = new DateTime(2016, 8, 1), + PeriodEnd = new DateTime(2031, 7, 31), + PractitionerId = "prac-002", + OrganizationId = "org-002", + LocationId = "loc-002", + RoleSystem = "http://terminology.hl7.org/CodeSystem/practitioner-role", + RoleCode = "doctor", + RoleDisplay = "Consultant Endocrinologist", + SpecialtyCode = "394583002", + SpecialtyDisplay = "Endocrinology", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-20-25441012", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new PractitionerRole + { + Id = "prole-003", + PractitionerRoleId = "prole-003", + ResourceType = "PractitionerRole", + IdentifierSystem = "http://clinicalinsightspro.in/practitioner-role", + IdentifierValue = "ROLE-CHE-003", + PeriodStart = new DateTime(2010, 1, 1), + PeriodEnd = new DateTime(2028, 12, 31), + PractitionerId = "prac-003", + OrganizationId = "org-003", + LocationId = "loc-003", + RoleSystem = "http://terminology.hl7.org/CodeSystem/practitioner-role", + RoleCode = "doctor", + RoleDisplay = "Senior Consultant - General Medicine", + SpecialtyCode = "419192003", + SpecialtyDisplay = "Internal Medicine", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-44-28151013", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new PractitionerRole + { + Id = "prole-004", + PractitionerRoleId = "prole-004", + ResourceType = "PractitionerRole", + IdentifierSystem = "http://clinicalinsightspro.in/practitioner-role", + IdentifierValue = "ROLE-KOC-004", + PeriodStart = new DateTime(2018, 5, 1), + PeriodEnd = new DateTime(2033, 4, 30), + PractitionerId = "prac-004", + OrganizationId = "org-005", + LocationId = "loc-005", + RoleSystem = "http://terminology.hl7.org/CodeSystem/practitioner-role", + RoleCode = "doctor", + RoleDisplay = "Consultant Pulmonologist", + SpecialtyCode = "418112009", + SpecialtyDisplay = "Pulmonary Medicine", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-484-2401014", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new PractitionerRole + { + Id = "prole-005", + PractitionerRoleId = "prole-005", + ResourceType = "PractitionerRole", + IdentifierSystem = "http://clinicalinsightspro.in/practitioner-role", + IdentifierValue = "ROLE-DEL-005", + PeriodStart = new DateTime(2012, 11, 1), + PeriodEnd = new DateTime(2032, 10, 31), + PractitionerId = "prac-005", + OrganizationId = "org-004", + LocationId = "loc-004", + RoleSystem = "http://terminology.hl7.org/CodeSystem/practitioner-role", + RoleCode = "doctor", + RoleDisplay = "Consultant Nephrologist", + SpecialtyCode = "394589003", + SpecialtyDisplay = "Nephrology", + TelecomSystem = "phone", + TelecomUse = "work", + TelecomValue = "+91-11-23611015", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.PractitionerRoles.AddRange(practitionerRoles); + context.SaveChanges(); + + // ============================================================== + // 6. CONDITIONS (FK -> Patient.Id, Practitioner.Id x2) + // ============================================================== + var conditions = new List + { + new Condition + { + Id = "cond-001", + ConditionId = "cond-001", + ResourceType = "Condition", + IdentifierSystem = "http://clinicalinsightspro.in/condition", + IdentifierValue = "COND-100001", + ClinicalStatusCode = "active", + ClinicalStatusDisplay = "Active", + VerificationStatusCode = "confirmed", + VerificationStatusDisplay = "Confirmed", + CategorySystem = "http://terminology.hl7.org/CodeSystem/condition-category", + CategoryCode = "problem-list-item", + CategoryDisplay = "Problem List Item", + SeverityCode = "6736007", + SeverityDisplay = "Moderate", + ConditionCode = "E11.9", + ConditionDisplay = "Type 2 diabetes mellitus without complications", + PatientId = "pat-001", + OnsetDateTime = new DateTime(2021, 3, 18), + AbatementDateTime = null, + RecordedDate = new DateTime(2021, 3, 20), + RecorderId = "prac-001", + AsserterId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Condition + { + Id = "cond-002", + ConditionId = "cond-002", + ResourceType = "Condition", + IdentifierSystem = "http://clinicalinsightspro.in/condition", + IdentifierValue = "COND-100002", + ClinicalStatusCode = "active", + ClinicalStatusDisplay = "Active", + VerificationStatusCode = "confirmed", + VerificationStatusDisplay = "Confirmed", + CategorySystem = "http://terminology.hl7.org/CodeSystem/condition-category", + CategoryCode = "problem-list-item", + CategoryDisplay = "Problem List Item", + SeverityCode = "255604002", + SeverityDisplay = "Mild", + ConditionCode = "I10", + ConditionDisplay = "Essential (primary) hypertension", + PatientId = "pat-002", + OnsetDateTime = new DateTime(2022, 7, 4), + AbatementDateTime = null, + RecordedDate = new DateTime(2022, 7, 6), + RecorderId = "prac-002", + AsserterId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Condition + { + Id = "cond-003", + ConditionId = "cond-003", + ResourceType = "Condition", + IdentifierSystem = "http://clinicalinsightspro.in/condition", + IdentifierValue = "COND-100003", + ClinicalStatusCode = "active", + ClinicalStatusDisplay = "Active", + VerificationStatusCode = "confirmed", + VerificationStatusDisplay = "Confirmed", + CategorySystem = "http://terminology.hl7.org/CodeSystem/condition-category", + CategoryCode = "encounter-diagnosis", + CategoryDisplay = "Encounter Diagnosis", + SeverityCode = "255604002", + SeverityDisplay = "Mild", + ConditionCode = "J45.909", + ConditionDisplay = "Unspecified asthma, uncomplicated", + PatientId = "pat-003", + OnsetDateTime = new DateTime(2019, 12, 11), + AbatementDateTime = null, + RecordedDate = new DateTime(2019, 12, 12), + RecorderId = "prac-003", + AsserterId = "prac-004", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Condition + { + Id = "cond-004", + ConditionId = "cond-004", + ResourceType = "Condition", + IdentifierSystem = "http://clinicalinsightspro.in/condition", + IdentifierValue = "COND-100004", + ClinicalStatusCode = "resolved", + ClinicalStatusDisplay = "Resolved", + VerificationStatusCode = "confirmed", + VerificationStatusDisplay = "Confirmed", + CategorySystem = "http://terminology.hl7.org/CodeSystem/condition-category", + CategoryCode = "problem-list-item", + CategoryDisplay = "Problem List Item", + SeverityCode = "255604002", + SeverityDisplay = "Mild", + ConditionCode = "D50.9", + ConditionDisplay = "Iron deficiency anaemia, unspecified", + PatientId = "pat-004", + OnsetDateTime = new DateTime(2023, 2, 9), + AbatementDateTime = new DateTime(2023, 9, 14), + RecordedDate = new DateTime(2023, 2, 10), + RecorderId = "prac-005", + AsserterId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Condition + { + Id = "cond-005", + ConditionId = "cond-005", + ResourceType = "Condition", + IdentifierSystem = "http://clinicalinsightspro.in/condition", + IdentifierValue = "COND-100005", + ClinicalStatusCode = "active", + ClinicalStatusDisplay = "Active", + VerificationStatusCode = "confirmed", + VerificationStatusDisplay = "Confirmed", + CategorySystem = "http://terminology.hl7.org/CodeSystem/condition-category", + CategoryCode = "problem-list-item", + CategoryDisplay = "Problem List Item", + SeverityCode = "24484000", + SeverityDisplay = "Severe", + ConditionCode = "N18.3", + ConditionDisplay = "Chronic kidney disease, stage 3 (moderate)", + PatientId = "pat-005", + OnsetDateTime = new DateTime(2020, 5, 22), + AbatementDateTime = null, + RecordedDate = new DateTime(2020, 5, 25), + RecorderId = "prac-004", + AsserterId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Conditions.AddRange(conditions); + context.SaveChanges(); + + // ============================================================== + // 7. ENCOUNTERS (FK -> Patient.Id) + // ============================================================== + var encounters = new List + { + new Encounter + { + Id = "enc-001", + EncounterId = "enc-001", + ResourceType = "Encounter", + IdentifierSystem = "http://clinicalinsightspro.in/encounter", + IdentifierValue = "ENC-100001", + Status = "finished", + ClassSystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassCode = "AMB", + ClassDisplay = "Ambulatory", + StatusHistory = "planned", + StatusHistoryStart = new DateTime(2025, 6, 10, 9, 0, 0), + StatusHistoryEnd = new DateTime(2025, 6, 10, 9, 30, 0), + ClassHistorySystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassHistoryCode = "AMB", + ClassHistoryDisplay = "Ambulatory", + ClassHistoryStart = new DateTime(2025, 6, 10, 9, 0, 0), + ClassHistoryEnd = new DateTime(2025, 6, 10, 10, 0, 0), + TypeSystem = "http://snomed.info/sct", + TypeCode = "185349003", + TypeDisplay = "Encounter for check-up", + ServiceTypeSystem = "http://terminology.hl7.org/CodeSystem/service-type", + ServiceTypeCode = "124", + ServiceTypeDisplay = "General Practice", + PrioritySystem = "http://terminology.hl7.org/CodeSystem/v3-ActPriority", + PriorityCode = "R", + PriorityDisplay = "Routine", + PatientId = "pat-001", + PeriodStart = new DateTime(2025, 6, 10, 9, 0, 0), + PeriodEnd = new DateTime(2025, 6, 10, 10, 0, 0), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Encounter + { + Id = "enc-002", + EncounterId = "enc-002", + ResourceType = "Encounter", + IdentifierSystem = "http://clinicalinsightspro.in/encounter", + IdentifierValue = "ENC-100002", + Status = "finished", + ClassSystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassCode = "AMB", + ClassDisplay = "Ambulatory", + TypeSystem = "http://snomed.info/sct", + TypeCode = "390906007", + TypeDisplay = "Follow-up encounter", + ServiceTypeSystem = "http://terminology.hl7.org/CodeSystem/service-type", + ServiceTypeCode = "124", + ServiceTypeDisplay = "General Practice", + PrioritySystem = "http://terminology.hl7.org/CodeSystem/v3-ActPriority", + PriorityCode = "R", + PriorityDisplay = "Routine", + PatientId = "pat-002", + PeriodStart = new DateTime(2025, 7, 2, 11, 0, 0), + PeriodEnd = new DateTime(2025, 7, 2, 11, 45, 0), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Encounter + { + Id = "enc-003", + EncounterId = "enc-003", + ResourceType = "Encounter", + IdentifierSystem = "http://clinicalinsightspro.in/encounter", + IdentifierValue = "ENC-100003", + Status = "finished", + ClassSystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassCode = "EMER", + ClassDisplay = "Emergency", + TypeSystem = "http://snomed.info/sct", + TypeCode = "50849002", + TypeDisplay = "Emergency room admission", + ServiceTypeSystem = "http://terminology.hl7.org/CodeSystem/service-type", + ServiceTypeCode = "117", + ServiceTypeDisplay = "Emergency Department", + PrioritySystem = "http://terminology.hl7.org/CodeSystem/v3-ActPriority", + PriorityCode = "EM", + PriorityDisplay = "Emergency", + PatientId = "pat-003", + PeriodStart = new DateTime(2025, 4, 18, 21, 15, 0), + PeriodEnd = new DateTime(2025, 4, 19, 1, 30, 0), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Encounter + { + Id = "enc-004", + EncounterId = "enc-004", + ResourceType = "Encounter", + IdentifierSystem = "http://clinicalinsightspro.in/encounter", + IdentifierValue = "ENC-100004", + Status = "finished", + ClassSystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassCode = "IMP", + ClassDisplay = "Inpatient Encounter", + TypeSystem = "http://snomed.info/sct", + TypeCode = "32485007", + TypeDisplay = "Hospital admission", + ServiceTypeSystem = "http://terminology.hl7.org/CodeSystem/service-type", + ServiceTypeCode = "168", + ServiceTypeDisplay = "Haematology", + PrioritySystem = "http://terminology.hl7.org/CodeSystem/v3-ActPriority", + PriorityCode = "UR", + PriorityDisplay = "Urgent", + PatientId = "pat-004", + PeriodStart = new DateTime(2025, 3, 5, 8, 0, 0), + PeriodEnd = new DateTime(2025, 3, 8, 16, 0, 0), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Encounter + { + Id = "enc-005", + EncounterId = "enc-005", + ResourceType = "Encounter", + IdentifierSystem = "http://clinicalinsightspro.in/encounter", + IdentifierValue = "ENC-100005", + Status = "in-progress", + ClassSystem = "http://terminology.hl7.org/CodeSystem/v3-ActCode", + ClassCode = "AMB", + ClassDisplay = "Ambulatory", + TypeSystem = "http://snomed.info/sct", + TypeCode = "265764009", + TypeDisplay = "Renal dialysis", + ServiceTypeSystem = "http://terminology.hl7.org/CodeSystem/service-type", + ServiceTypeCode = "180", + ServiceTypeDisplay = "Nephrology", + PrioritySystem = "http://terminology.hl7.org/CodeSystem/v3-ActPriority", + PriorityCode = "R", + PriorityDisplay = "Routine", + PatientId = "pat-005", + PeriodStart = new DateTime(2025, 8, 1, 7, 30, 0), + PeriodEnd = new DateTime(2025, 8, 1, 11, 30, 0), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Encounters.AddRange(encounters); + context.SaveChanges(); + + // ============================================================== + // 8. OBSERVATIONS (FK -> Patient.Id, Practitioner.Id x2) + // ============================================================== + var observations = new List + { + new Observation + { + Id = "obs-001", + Status = "final", + CategoryCode = "laboratory", + CategoryDisplay = "Laboratory", + ObservationCode = "4548-4", + ObservationDisplay = "Haemoglobin A1c / Haemoglobin total in Blood", + PatientId = "pat-001", + PerformerPractitionerId = "prac-002", + EffectiveDateTime = new DateTimeOffset(2025, 6, 10, 9, 15, 0, TimeSpan.Zero), + Issued = new DateTimeOffset(2025, 6, 10, 14, 0, 0, TimeSpan.Zero), + NoteText = "HbA1c 8.4% — above target. Reinforce diet and adherence counselling.", + NoteAuthorPractitionerId = "prac-002", + NoteTime = new DateTimeOffset(2025, 6, 10, 14, 10, 0, TimeSpan.Zero), + InterpretationCode = "H", + InterpretationDisplay = "High", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Observation + { + Id = "obs-002", + Status = "final", + CategoryCode = "vital-signs", + CategoryDisplay = "Vital Signs", + ObservationCode = "8480-6", + ObservationDisplay = "Systolic blood pressure", + PatientId = "pat-002", + PerformerPractitionerId = "prac-002", + EffectiveDateTime = new DateTimeOffset(2025, 7, 2, 11, 5, 0, TimeSpan.Zero), + Issued = new DateTimeOffset(2025, 7, 2, 11, 20, 0, TimeSpan.Zero), + NoteText = "Systolic BP 148 mmHg on repeat measurement. Review antihypertensive dose.", + NoteAuthorPractitionerId = "prac-002", + NoteTime = new DateTimeOffset(2025, 7, 2, 11, 25, 0, TimeSpan.Zero), + InterpretationCode = "H", + InterpretationDisplay = "High", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Observation + { + Id = "obs-003", + Status = "final", + CategoryCode = "vital-signs", + CategoryDisplay = "Vital Signs", + ObservationCode = "2708-6", + ObservationDisplay = "Oxygen saturation in Arterial blood", + PatientId = "pat-003", + PerformerPractitionerId = "prac-003", + EffectiveDateTime = new DateTimeOffset(2025, 4, 18, 21, 30, 0, TimeSpan.Zero), + Issued = new DateTimeOffset(2025, 4, 18, 21, 40, 0, TimeSpan.Zero), + NoteText = "SpO2 96% on room air after nebulisation. Symptoms settled.", + NoteAuthorPractitionerId = "prac-003", + NoteTime = new DateTimeOffset(2025, 4, 18, 22, 0, 0, TimeSpan.Zero), + InterpretationCode = "N", + InterpretationDisplay = "Normal", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Observation + { + Id = "obs-004", + Status = "final", + CategoryCode = "laboratory", + CategoryDisplay = "Laboratory", + ObservationCode = "718-7", + ObservationDisplay = "Haemoglobin [Mass/volume] in Blood", + PatientId = "pat-004", + PerformerPractitionerId = "prac-005", + EffectiveDateTime = new DateTimeOffset(2025, 3, 5, 8, 30, 0, TimeSpan.Zero), + Issued = new DateTimeOffset(2025, 3, 5, 12, 0, 0, TimeSpan.Zero), + NoteText = "Haemoglobin 9.1 g/dL — microcytic picture, iron studies advised.", + NoteAuthorPractitionerId = "prac-005", + NoteTime = new DateTimeOffset(2025, 3, 5, 12, 15, 0, TimeSpan.Zero), + InterpretationCode = "L", + InterpretationDisplay = "Low", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new Observation + { + Id = "obs-005", + Status = "final", + CategoryCode = "laboratory", + CategoryDisplay = "Laboratory", + ObservationCode = "2160-0", + ObservationDisplay = "Creatinine [Mass/volume] in Serum or Plasma", + PatientId = "pat-005", + PerformerPractitionerId = "prac-004", + EffectiveDateTime = new DateTimeOffset(2025, 8, 1, 7, 45, 0, TimeSpan.Zero), + Issued = new DateTimeOffset(2025, 8, 1, 10, 0, 0, TimeSpan.Zero), + NoteText = "Serum creatinine 2.3 mg/dL, eGFR 34 — consistent with CKD stage 3b.", + NoteAuthorPractitionerId = "prac-005", + NoteTime = new DateTimeOffset(2025, 8, 1, 10, 20, 0, TimeSpan.Zero), + InterpretationCode = "H", + InterpretationDisplay = "High", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Observations.AddRange(observations); + context.SaveChanges(); + + // ============================================================== + // 9. ALLERGIES (FK -> Patient.Id, Patient.Id (asserter), Practitioner.Id) + // ============================================================== + var allergies = new List + { + new AllergyIntolerance + { + Id = "alg-001", + ClinicalStatus = "active", + VerificationStatus = "confirmed", + Type = "allergy", + Criticality = "high", + PatientId = "pat-001", + AsserterPatientId = "pat-001", + RecorderPractitionerId = "prac-001", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new AllergyIntolerance + { + Id = "alg-002", + ClinicalStatus = "active", + VerificationStatus = "confirmed", + Type = "intolerance", + Criticality = "low", + PatientId = "pat-002", + AsserterPatientId = "pat-002", + RecorderPractitionerId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new AllergyIntolerance + { + Id = "alg-003", + ClinicalStatus = "active", + VerificationStatus = "unconfirmed", + Type = "allergy", + Criticality = "unable-to-assess", + PatientId = "pat-003", + AsserterPatientId = null, + RecorderPractitionerId = "prac-003", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new AllergyIntolerance + { + Id = "alg-004", + ClinicalStatus = "resolved", + VerificationStatus = "confirmed", + Type = "intolerance", + Criticality = "low", + PatientId = "pat-004", + AsserterPatientId = "pat-004", + RecorderPractitionerId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new AllergyIntolerance + { + Id = "alg-005", + ClinicalStatus = "active", + VerificationStatus = "confirmed", + Type = "allergy", + Criticality = "high", + PatientId = "pat-005", + AsserterPatientId = null, + RecorderPractitionerId = "prac-004", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Allergies.AddRange(allergies); + context.SaveChanges(); + + // ============================================================== + // 10. MEDICATION REQUESTS (FK -> Patient.Id) + // NOTE: pat-001 has active diabetes (E11.9) and NO statin on + // file, so CdsRulesEngineService raises DM-STATIN-GUIDELINE. + // ============================================================== + var medications = new List + { + new MedicationRequest + { + Id = "med-001", + Status = "active", + Intent = "order", + Priority = "routine", + PatientId = "pat-001", + MedicationCode = "860975", + MedicationDisplay = "Metformin 500 mg oral tablet", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new MedicationRequest + { + Id = "med-002", + Status = "active", + Intent = "order", + Priority = "routine", + PatientId = "pat-002", + MedicationCode = "197361", + MedicationDisplay = "Amlodipine 5 mg oral tablet", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new MedicationRequest + { + Id = "med-003", + Status = "active", + Intent = "order", + Priority = "urgent", + PatientId = "pat-003", + MedicationCode = "746763", + MedicationDisplay = "Salbutamol 100 mcg metered dose inhaler", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new MedicationRequest + { + Id = "med-004", + Status = "completed", + Intent = "order", + Priority = "routine", + PatientId = "pat-004", + MedicationCode = "310182", + MedicationDisplay = "Ferrous sulphate 325 mg oral tablet", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new MedicationRequest + { + Id = "med-005", + Status = "active", + Intent = "order", + Priority = "routine", + PatientId = "pat-005", + MedicationCode = "617312", + MedicationDisplay = "Atorvastatin 10 mg oral tablet", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.Medications.AddRange(medications); + context.SaveChanges(); + + // ============================================================== + // 11. SERVICE REQUESTS (FK -> Patient.Id, Practitioner.Id x2) + // ============================================================== + var serviceRequests = new List + { + new ServiceRequest + { + Id = "sreq-001", + IdentifierSystem = "http://clinicalinsightspro.in/service-request", + IdentifierValue = "SR-100001", + Status = "active", + Intent = "order", + QuantityComparator = ">=", + QuantityValue = 1m, + QuantityUnit = "test", + PatientId = "pat-001", + OccurrenceDateTime = new DateTimeOffset(2025, 9, 10, 9, 0, 0, TimeSpan.Zero), + RequesterPractitionerId = "prac-002", + PatientInstruction = "Fasting sample not required. Report to the lab any weekday morning.", + NoteText = "Repeat HbA1c after three months of therapy intensification.", + NoteAuthorPractitionerId = "prac-002", + NoteTime = new DateTimeOffset(2025, 6, 10, 14, 30, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new ServiceRequest + { + Id = "sreq-002", + IdentifierSystem = "http://clinicalinsightspro.in/service-request", + IdentifierValue = "SR-100002", + Status = "active", + Intent = "order", + QuantityComparator = null, + QuantityValue = 1m, + QuantityUnit = "study", + PatientId = "pat-002", + OccurrenceDateTime = new DateTimeOffset(2025, 7, 15, 10, 0, 0, TimeSpan.Zero), + RequesterPractitionerId = "prac-002", + PatientInstruction = "Carry previous BP records and current medication list.", + NoteText = "24-hour ambulatory blood pressure monitoring requested.", + NoteAuthorPractitionerId = "prac-001", + NoteTime = new DateTimeOffset(2025, 7, 2, 12, 0, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new ServiceRequest + { + Id = "sreq-003", + IdentifierSystem = "http://clinicalinsightspro.in/service-request", + IdentifierValue = "SR-100003", + Status = "completed", + Intent = "original-order", + QuantityComparator = null, + QuantityValue = 1m, + QuantityUnit = "study", + PatientId = "pat-003", + OccurrenceDateTime = new DateTimeOffset(2025, 4, 19, 0, 30, 0, TimeSpan.Zero), + RequesterPractitionerId = "prac-003", + PatientInstruction = "Remove metal objects before the chest X-ray.", + NoteText = "Chest X-ray to rule out infective exacerbation.", + NoteAuthorPractitionerId = "prac-004", + NoteTime = new DateTimeOffset(2025, 4, 19, 1, 0, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new ServiceRequest + { + Id = "sreq-004", + IdentifierSystem = "http://clinicalinsightspro.in/service-request", + IdentifierValue = "SR-100004", + Status = "completed", + Intent = "order", + QuantityComparator = null, + QuantityValue = 3m, + QuantityUnit = "test", + PatientId = "pat-004", + OccurrenceDateTime = new DateTimeOffset(2025, 3, 6, 8, 0, 0, TimeSpan.Zero), + RequesterPractitionerId = "prac-005", + PatientInstruction = "Overnight fasting required for the iron studies panel.", + NoteText = "Serum iron, ferritin and TIBC ordered for anaemia work-up.", + NoteAuthorPractitionerId = "prac-005", + NoteTime = new DateTimeOffset(2025, 3, 5, 13, 0, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new ServiceRequest + { + Id = "sreq-005", + IdentifierSystem = "http://clinicalinsightspro.in/service-request", + IdentifierValue = "SR-100005", + Status = "active", + Intent = "plan", + QuantityComparator = ">=", + QuantityValue = 12m, + QuantityUnit = "session", + PatientId = "pat-005", + OccurrenceDateTime = new DateTimeOffset(2025, 8, 8, 7, 30, 0, TimeSpan.Zero), + RequesterPractitionerId = "prac-005", + PatientInstruction = "Attend the dialysis unit twice weekly. Maintain fluid restriction.", + NoteText = "Maintenance haemodialysis schedule for CKD stage 3b.", + NoteAuthorPractitionerId = "prac-004", + NoteTime = new DateTimeOffset(2025, 8, 1, 12, 0, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.ServiceRequests.AddRange(serviceRequests); + context.SaveChanges(); + + // ============================================================== + // 12. RISK ASSESSMENTS (FK -> Patient.Id, Practitioner.Id x2) + // ============================================================== + var riskAssessments = new List + { + new RiskAssessment + { + Id = "risk-001", + Status = "final", + PatientId = "pat-001", + OccurrenceDateTime = new DateTimeOffset(2025, 6, 10, 15, 0, 0, TimeSpan.Zero), + PerformerPractitionerId = "prac-001", + NoteText = "High 10-year cardiovascular risk driven by uncontrolled HbA1c and central obesity.", + NoteAuthorPractitionerId = "prac-001", + NoteTime = new DateTimeOffset(2025, 6, 10, 15, 10, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new RiskAssessment + { + Id = "risk-002", + Status = "final", + PatientId = "pat-002", + OccurrenceDateTime = new DateTimeOffset(2025, 7, 2, 12, 30, 0, TimeSpan.Zero), + PerformerPractitionerId = "prac-002", + NoteText = "Moderate risk. Stage 1 hypertension with no end-organ damage documented.", + NoteAuthorPractitionerId = "prac-002", + NoteTime = new DateTimeOffset(2025, 7, 2, 12, 40, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new RiskAssessment + { + Id = "risk-003", + Status = "preliminary", + PatientId = "pat-003", + OccurrenceDateTime = new DateTimeOffset(2025, 4, 19, 2, 0, 0, TimeSpan.Zero), + PerformerPractitionerId = "prac-003", + NoteText = "Low risk of readmission. Inhaler technique reviewed before discharge.", + NoteAuthorPractitionerId = "prac-004", + NoteTime = new DateTimeOffset(2025, 4, 19, 2, 15, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new RiskAssessment + { + Id = "risk-004", + Status = "amended", + PatientId = "pat-004", + OccurrenceDateTime = new DateTimeOffset(2025, 3, 8, 15, 0, 0, TimeSpan.Zero), + PerformerPractitionerId = "prac-005", + NoteText = "Risk downgraded after haemoglobin recovery on oral iron therapy.", + NoteAuthorPractitionerId = "prac-005", + NoteTime = new DateTimeOffset(2025, 3, 8, 15, 20, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new RiskAssessment + { + Id = "risk-005", + Status = "final", + PatientId = "pat-005", + OccurrenceDateTime = new DateTimeOffset(2025, 8, 1, 12, 0, 0, TimeSpan.Zero), + PerformerPractitionerId = "prac-005", + NoteText = "High risk of CKD progression. Nephrology review scheduled every eight weeks.", + NoteAuthorPractitionerId = "prac-004", + NoteTime = new DateTimeOffset(2025, 8, 1, 12, 30, 0, TimeSpan.Zero), + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.RiskAssessments.AddRange(riskAssessments); + context.SaveChanges(); + + // ============================================================== + // 13. CARE PLANS (FK -> Patient.Id x2, Practitioner.Id) + // ============================================================== + var carePlans = new List + { + new CarePlan + { + Id = "cp-001", + Status = "active", + Intent = "plan", + SubjectPatientId = "pat-001", + AuthorPatientId = "pat-001", + PeriodStart = new DateTimeOffset(2025, 6, 10, 0, 0, 0, TimeSpan.Zero), + PeriodEnd = new DateTimeOffset(2026, 6, 9, 0, 0, 0, TimeSpan.Zero), + ActivityStatus = "in-progress", + ActivityScheduledStart = new DateTimeOffset(2025, 6, 15, 0, 0, 0, TimeSpan.Zero), + ActivityScheduledEnd = new DateTimeOffset(2025, 12, 15, 0, 0, 0, TimeSpan.Zero), + ActivityPerformerPractitionerId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new CarePlan + { + Id = "cp-002", + Status = "active", + Intent = "plan", + SubjectPatientId = "pat-002", + AuthorPatientId = "pat-002", + PeriodStart = new DateTimeOffset(2025, 7, 2, 0, 0, 0, TimeSpan.Zero), + PeriodEnd = new DateTimeOffset(2026, 7, 1, 0, 0, 0, TimeSpan.Zero), + ActivityStatus = "scheduled", + ActivityScheduledStart = new DateTimeOffset(2025, 7, 15, 0, 0, 0, TimeSpan.Zero), + ActivityScheduledEnd = new DateTimeOffset(2025, 10, 15, 0, 0, 0, TimeSpan.Zero), + ActivityPerformerPractitionerId = "prac-002", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new CarePlan + { + Id = "cp-003", + Status = "completed", + Intent = "order", + SubjectPatientId = "pat-003", + AuthorPatientId = null, + PeriodStart = new DateTimeOffset(2025, 4, 19, 0, 0, 0, TimeSpan.Zero), + PeriodEnd = new DateTimeOffset(2025, 6, 19, 0, 0, 0, TimeSpan.Zero), + ActivityStatus = "completed", + ActivityScheduledStart = new DateTimeOffset(2025, 4, 20, 0, 0, 0, TimeSpan.Zero), + ActivityScheduledEnd = new DateTimeOffset(2025, 6, 18, 0, 0, 0, TimeSpan.Zero), + ActivityPerformerPractitionerId = "prac-004", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new CarePlan + { + Id = "cp-004", + Status = "on-hold", + Intent = "proposal", + SubjectPatientId = "pat-004", + AuthorPatientId = "pat-004", + PeriodStart = new DateTimeOffset(2025, 3, 8, 0, 0, 0, TimeSpan.Zero), + PeriodEnd = new DateTimeOffset(2025, 9, 8, 0, 0, 0, TimeSpan.Zero), + ActivityStatus = "on-hold", + ActivityScheduledStart = new DateTimeOffset(2025, 3, 10, 0, 0, 0, TimeSpan.Zero), + ActivityScheduledEnd = new DateTimeOffset(2025, 9, 7, 0, 0, 0, TimeSpan.Zero), + ActivityPerformerPractitionerId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + }, + new CarePlan + { + Id = "cp-005", + Status = "active", + Intent = "order", + SubjectPatientId = "pat-005", + AuthorPatientId = null, + PeriodStart = new DateTimeOffset(2025, 8, 1, 0, 0, 0, TimeSpan.Zero), + PeriodEnd = new DateTimeOffset(2026, 7, 31, 0, 0, 0, TimeSpan.Zero), + ActivityStatus = "in-progress", + ActivityScheduledStart = new DateTimeOffset(2025, 8, 8, 0, 0, 0, TimeSpan.Zero), + ActivityScheduledEnd = new DateTimeOffset(2026, 2, 8, 0, 0, 0, TimeSpan.Zero), + ActivityPerformerPractitionerId = "prac-005", + CreatedBy = SeedUser, + CreatedDate = DateTime.UtcNow, + IsActive = true, + IsDelete = false, + VersionId = "1", + LastUpdated = DateTime.UtcNow + } + }; + + context.CarePlans.AddRange(carePlans); + context.SaveChanges(); + + // ============================================================== + // 14. CDS ALERTS (FK -> Patient.Id) + // Id is an int identity column, so it is NOT set here. + // ============================================================== + var cdsAlerts = new List + { + new CdsAlert + { + PatientId = "pat-001", + RuleId = "DM-STATIN-GUIDELINE", + Severity = "warning", + Summary = "Active Type 2 diabetes with no statin therapy on file.", + Recommendation = "Consider initiating statin therapy per ADA cardiovascular risk-reduction guidelines.", + GeneratedDate = DateTime.UtcNow, + Actioned = false + }, + new CdsAlert + { + PatientId = "pat-002", + RuleId = "BP-ABOVE-TARGET", + Severity = "warning", + Summary = "Systolic blood pressure above 140 mmHg on the latest reading.", + Recommendation = "Review antihypertensive dosing and reinforce home BP monitoring.", + GeneratedDate = DateTime.UtcNow, + Actioned = false + }, + new CdsAlert + { + PatientId = "pat-003", + RuleId = "ASTHMA-REVIEW-DUE", + Severity = "info", + Summary = "Emergency visit for asthma with no follow-up review recorded.", + Recommendation = "Schedule an asthma control review and check inhaler technique.", + GeneratedDate = DateTime.UtcNow, + Actioned = true + }, + new CdsAlert + { + PatientId = "pat-004", + RuleId = "ANAEMIA-FOLLOWUP", + Severity = "info", + Summary = "Haemoglobin below reference range at the last inpatient encounter.", + Recommendation = "Repeat a full blood count after completing the oral iron course.", + GeneratedDate = DateTime.UtcNow, + Actioned = false + }, + new CdsAlert + { + PatientId = "pat-005", + RuleId = "CKD-NEPHRO-REFERRAL", + Severity = "critical", + Summary = "eGFR below 45 with rising serum creatinine trend.", + Recommendation = "Escalate to nephrology and review all nephrotoxic medication.", + GeneratedDate = DateTime.UtcNow, + Actioned = false + } + }; + + context.CdsAlerts.AddRange(cdsAlerts); + context.SaveChanges(); + } + + // ------------------------------------------------------------------ + // CDS RULES (no FK — seeded independently) + // ------------------------------------------------------------------ + private static void SeedCdsRules(ApplicationDbContext context) + { + if (context.CdsRules.Any()) + return; + + var rules = new List + { + new CdsRule + { + RuleId = "DM-STATIN-GUIDELINE", + RuleType = "ConditionMedicationGap", + Description = "Active Type 2 diabetes (E11.9) with no statin medication on file.", + ParametersJson = "{\"conditionCode\":\"E11.9\",\"medicationKeyword\":\"statin\"}", + Severity = "warning", + Recommendation = "Consider initiating statin therapy per ADA cardiovascular risk-reduction guidelines.", + Enabled = true, + CreatedDate = DateTime.UtcNow + }, + new CdsRule + { + RuleId = "BP-ABOVE-TARGET", + RuleType = "ObservationThreshold", + Description = "Systolic blood pressure at or above 140 mmHg.", + ParametersJson = "{\"observationCode\":\"8480-6\",\"operator\":\">=\",\"threshold\":140}", + Severity = "warning", + Recommendation = "Review antihypertensive therapy and confirm with home blood pressure readings.", + Enabled = true, + CreatedDate = DateTime.UtcNow + }, + new CdsRule + { + RuleId = "HBA1C-ABOVE-TARGET", + RuleType = "ObservationThreshold", + Description = "HbA1c at or above 7.0 percent in a diabetic patient.", + ParametersJson = "{\"observationCode\":\"4548-4\",\"operator\":\">=\",\"threshold\":7.0}", + Severity = "warning", + Recommendation = "Intensify glycaemic control and arrange diabetes education counselling.", + Enabled = true, + CreatedDate = DateTime.UtcNow + }, + new CdsRule + { + RuleId = "CKD-NEPHRO-REFERRAL", + RuleType = "ObservationThreshold", + Description = "Serum creatinine above 2.0 mg/dL suggesting declining renal function.", + ParametersJson = "{\"observationCode\":\"2160-0\",\"operator\":\">\",\"threshold\":2.0}", + Severity = "critical", + Recommendation = "Refer to nephrology and review all nephrotoxic medication.", + Enabled = true, + CreatedDate = DateTime.UtcNow + }, + new CdsRule + { + RuleId = "LATEX-ALLERGY-CONFLICT", + RuleType = "AllergyDrugConflict", + Description = "Documented latex allergy with a procedure or product containing latex.", + ParametersJson = "{\"substance\":\"Latex\",\"keywords\":[\"latex\"]}", + Severity = "critical", + Recommendation = "Use a latex-free pathway and flag the allergy on the theatre checklist.", + Enabled = false, + CreatedDate = DateTime.UtcNow + } + }; + + context.CdsRules.AddRange(rules); + context.SaveChanges(); + } + + // ------------------------------------------------------------------ + // USERS (login accounts — passwords are hashed, never stored raw) + // Demo password for every seeded account: Test@1234 + // ------------------------------------------------------------------ + private static void SeedUsers(ApplicationDbContext context) + { + if (context.Users.Any()) + return; + + var hasher = new PasswordHasher(); + + var users = new List + { + new User + { + FirstName = "Rajesh", + LastName = "Kulkarni", + Username = "rajesh.kulkarni", + MobileNumber = "+919822011001", + Email = "rajesh.kulkarni@sanjeevani.in", + Gender = "male", + IsActive = true, + CreatedDate = DateTime.UtcNow + }, + new User + { + FirstName = "Meera", + LastName = "Joshi", + Username = "meera.joshi", + MobileNumber = "+919822011002", + Email = "meera.joshi@aarogyacare.in", + Gender = "female", + IsActive = true, + CreatedDate = DateTime.UtcNow + }, + new User + { + FirstName = "Suresh", + LastName = "Reddy", + Username = "suresh.reddy", + MobileNumber = "+919840011003", + Email = "suresh.reddy@sribalaji.in", + Gender = "male", + IsActive = true, + CreatedDate = DateTime.UtcNow + }, + new User + { + FirstName = "Kavita", + LastName = "Menon", + Username = "kavita.menon", + MobileNumber = "+919847011004", + Email = "kavita.menon@malabarhealth.in", + Gender = "female", + IsActive = true, + CreatedDate = DateTime.UtcNow + }, + new User + { + FirstName = "Arjun", + LastName = "Bhatt", + Username = "arjun.bhatt", + MobileNumber = "+919811011005", + Email = "arjun.bhatt@gangahealth.in", + Gender = "male", + IsActive = true, + CreatedDate = DateTime.UtcNow + } + }; + + foreach (var user in users) + { + user.PasswordHash = hasher.HashPassword(user, "Test@1234"); + } + + context.Users.AddRange(users); + context.SaveChanges(); + } +}