Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion DotNet/Census/Application/Factories/PatientEventFactory.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using LantanaGroup.Link.Census.Application.Interfaces;
using LantanaGroup.Link.Census.Application.Models.Enums;
using LantanaGroup.Link.Census.Application.Models.Payloads.Fhir.List;
using LantanaGroup.Link.Census.Domain.Entities.POI;

namespace LantanaGroup.Link.Census.Application.Factories;
Expand All @@ -18,7 +19,18 @@ public static PatientEvent Create(string correlationId, string patientId, string
Payload = payload,
SourceType = sourceType,
CreateDate = DateTime.Now,
FacilityId = facilityId
FacilityId = facilityId,
EventDate = GetEventDate(payload)
};
}

private static DateTime GetEventDate(IPayload payload)
{
return payload switch
{
FHIRListDischargePayload dischargePayload => dischargePayload.DischargeDate,
FHIRListAdmitPayload admitPayload => admitPayload.AdmitDate,
_ => DateTime.UtcNow
Comment thread
edward-miller-lcg marked this conversation as resolved.
Outdated
};
}
}
9 changes: 9 additions & 0 deletions DotNet/Census/Domain/Context/CensusContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.WithOne(x => x.PatientEncounter)
.HasForeignKey(x => x.PatientEncounterId).IsRequired();

modelBuilder.Entity<PatientEncounter>()
.HasMany(x => x.PatientIdentifiers)
.WithOne(x => x.PatientEncounter)
.HasForeignKey(x => x.PatientEncounterId).IsRequired();

// Configure the PayloadJsonConverter
var payloadConverter = new PayloadJsonConverter();

Expand Down Expand Up @@ -70,6 +75,10 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.HasIndex(e => e.CreateDate)
.HasDatabaseName("IX_PatientEvents_CreateDate");

modelBuilder.Entity<PatientEvent>()
.HasIndex(e => e.EventDate)
.HasDatabaseName("IX_PatientEvents_EventDate");

// Add composite indexes for better query performance
modelBuilder.Entity<PatientEvent>()
.HasIndex(e => new { e.CorrelationId, e.CreateDate })
Expand Down
1 change: 1 addition & 0 deletions DotNet/Census/Domain/Entities/POI/PatientEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ public class PatientEvent : BaseEntityExtended
public IPayload Payload { get; set; }
[Column(TypeName = "nvarchar(255)")]
public SourceType SourceType { get; set; }
public DateTime EventDate { get; set; }
}
1 change: 0 additions & 1 deletion DotNet/Census/Domain/Managers/PatientEventManager.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using LantanaGroup.Link.Census.Domain.Entities.POI;
using LantanaGroup.Link.Shared.Application.Services;
using LantanaGroup.Link.Shared.Domain.Repositories.Interfaces;

namespace LantanaGroup.Link.Census.Domain.Managers;
Expand Down
9 changes: 3 additions & 6 deletions DotNet/Census/Domain/Queries/PatientEncounterQueries.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// Updated PatientEncounterQueries.cs (interface and implementation)
using LantanaGroup.Link.Census.Application.Models;
using LantanaGroup.Link.Census.Application.Models;
using LantanaGroup.Link.Census.Application.Models.Enums;
using LantanaGroup.Link.Census.Application.Models.Payloads.Fhir.List;
using LantanaGroup.Link.Census.Domain.Context;
Expand All @@ -8,8 +7,6 @@
using LantanaGroup.Link.Shared.Application.Models.Responses;
using Microsoft.EntityFrameworkCore;
using System.Collections.Concurrent;
using System.Linq.Expressions;
using System.Reflection;

namespace LantanaGroup.Link.Census.Domain.Queries;

Expand Down Expand Up @@ -233,7 +230,7 @@ public async Task RebuildPatientEncounterTable(CancellationToken cancellationTok
var allEvents = await _context.PatientEvents
.Where(e => e.CorrelationId != null && e.CorrelationId != "")
.OrderBy(e => e.CorrelationId)
.ThenBy(e => e.ModifyDate)
.ThenBy(e => e.EventDate)
.ToListAsync(cancellationToken);

_logger.LogInformation("Retrieved {count} events in {time}ms",
Expand Down Expand Up @@ -279,7 +276,7 @@ await Parallel.ForEachAsync(eventsByCorrelation, options, async (correlationGrou
}

encounter.MedicalRecordNumber = evt.MedicalRecordNumber;
encounter.AdmitDate = evt.CreateDate;
encounter.AdmitDate = evt.EventDate;
encounter.ModifyDate = evt.ModifyDate;
encounter.EncounterType = evt.EventType.ToString();

Expand Down
20 changes: 8 additions & 12 deletions DotNet/Census/Domain/Queries/PatientEventQueries.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public async Task<IEnumerable<PatientEventModel>> GetAdmittedPatientEventModelsB
{
// Find the latest event for this patient
var latestEvent = events
.OrderByDescending(e => e.CreateDate)
.OrderByDescending(e => e.EventDate)
.FirstOrDefault();

// If the latest event is an admit event, include this patient
Expand Down Expand Up @@ -180,7 +180,7 @@ public async Task<PatientEvent> GetLatestEventByFacilityAndPatientId(string faci

return await _context.PatientEvents
.Where(x => x.FacilityId == facilityId && x.SourcePatientId == patientId)
.OrderByDescending(x => x.CreateDate)
.OrderByDescending(x => x.EventDate)
.FirstOrDefaultAsync(cancellationToken);
}

Expand Down Expand Up @@ -296,12 +296,12 @@ private IQueryable<PatientEvent> GetPatientQuery(string facilityId, string? corr

if (startDate.HasValue && startDate != default)
{
baseQuery = baseQuery.Where(x => x.CreateDate >= startDate.Value);
baseQuery = baseQuery.Where(x => x.EventDate >= startDate.Value);
}

if (endDate.HasValue && endDate != default)
{
baseQuery = baseQuery.Where(x => x.CreateDate <= endDate.Value);
baseQuery = baseQuery.Where(x => x.EventDate <= endDate.Value);
}

// Create specific queries for FHIR events with date filtering
Expand All @@ -317,14 +317,12 @@ private IQueryable<PatientEvent> GetPatientQuery(string facilityId, string? corr

if (startDate.HasValue && startDate != default)
{
admitQuery = admitQuery.Where(x =>
((FHIRListAdmitPayload)x.Payload).AdmitDate >= startDate.Value);
admitQuery = admitQuery.Where(x => x.EventDate >= startDate.Value);
}

if (endDate.HasValue && endDate != default)
{
admitQuery = admitQuery.Where(x =>
((FHIRListAdmitPayload)x.Payload).AdmitDate <= endDate.Value);
admitQuery = admitQuery.Where(x => x.EventDate <= endDate.Value);
}

queries.Add(admitQuery);
Expand All @@ -334,14 +332,12 @@ private IQueryable<PatientEvent> GetPatientQuery(string facilityId, string? corr

if (startDate.HasValue && startDate != default)
{
dischargeQuery = dischargeQuery.Where(x =>
((FHIRListDischargePayload)x.Payload).DischargeDate >= startDate.Value);
dischargeQuery = dischargeQuery.Where(x => x.EventDate >= startDate.Value);
}

if (endDate.HasValue && endDate != default)
{
dischargeQuery = dischargeQuery.Where(x =>
((FHIRListDischargePayload)x.Payload).DischargeDate <= endDate.Value);
dischargeQuery = dischargeQuery.Where(x => x.EventDate <= endDate.Value);
}

queries.Add(dischargeQuery);
Expand Down
Loading
Loading