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();
+ }
+}