77using Microsoft . Extensions . DependencyInjection ;
88using Microsoft . EntityFrameworkCore ;
99using Task = System . Threading . Tasks . Task ;
10+ using LantanaGroup . Link . Census . Application . Factories ;
1011
1112namespace IntegrationTests . Census ;
1213
@@ -212,9 +213,12 @@ public async Task GetPatientEncounterByCorrelationIdAsync_ReturnsCorrectEncounte
212213 var facilityId = "TestFacility" + Guid . NewGuid ( ) . ToString ( ) ;
213214 var patientId = Guid . NewGuid ( ) . ToString ( ) ;
214215
216+ var encounterId = Guid . NewGuid ( ) . ToString ( ) ;
217+ var patientIdentifierId = Guid . NewGuid ( ) . ToString ( ) ;
218+
215219 var encounter = new PatientEncounter
216220 {
217- Id = Guid . NewGuid ( ) . ToString ( ) ,
221+ Id = encounterId ,
218222 FacilityId = facilityId ,
219223 CorrelationId = correlationId ,
220224 AdmitDate = DateTime . UtcNow . AddDays ( - 5 ) ,
@@ -223,9 +227,10 @@ public async Task GetPatientEncounterByCorrelationIdAsync_ReturnsCorrectEncounte
223227 {
224228 new PatientIdentifier
225229 {
226- Id = Guid . NewGuid ( ) . ToString ( ) ,
230+ Id = patientIdentifierId ,
227231 Identifier = patientId ,
228- SourceType = SourceType . FHIR . ToString ( )
232+ SourceType = SourceType . FHIR . ToString ( ) ,
233+ PatientEncounterId = encounterId
229234 }
230235 }
231236 } ;
@@ -269,7 +274,7 @@ public async Task GetAdmittedPatientEventModelsByDateRange_ReturnsCorrectEvents(
269274 {
270275 // Arrange
271276 var db = _fixture . DbContext ;
272- var queries = _fixture . ServiceProvider . GetRequiredService < IPatientEventQueries > ( ) ;
277+ var queries = _fixture . ServiceProvider . GetRequiredService < IPatientEncounterQueries > ( ) ;
273278
274279 var facilityId = "TestFacility" + Guid . NewGuid ( ) . ToString ( ) ;
275280 var patientId1 = Guid . NewGuid ( ) . ToString ( ) ;
@@ -281,12 +286,17 @@ public async Task GetAdmittedPatientEventModelsByDateRange_ReturnsCorrectEvents(
281286
282287 // Create the events and their payloads
283288 var events = new List < PatientEvent > ( ) ;
289+ var encounters = new List < PatientEncounter > ( ) ;
284290 // Within date range, admit event, patient 1
285291 var admitCorrelationId1 = Guid . NewGuid ( ) . ToString ( ) ;
286292 var patient1AdmitPayload = new FHIRListAdmitPayload ( patientId1 , DateTime . UtcNow . AddDays ( - 3 ) ) ;
287293 var patient1AdmitEvent = patient1AdmitPayload . CreatePatientEvent ( facilityId , admitCorrelationId1 ) ;
294+ var patient1Encounter = new PatientEncounterBuilder ( facilityId , null , patient1AdmitEvent . EventDate , null , admitCorrelationId1 ) . AddPatientIdentifier ( patientId1 , SourceType . FHIR ) . GetPatientEncounter ( ) ;
288295 events . Add ( patient1AdmitEvent ) ;
289296
297+ patient1Encounter . PatientIdentifiers . FirstOrDefault ( ) . Id = Guid . NewGuid ( ) . ToString ( ) ;
298+ db . PatientEncounters . Add ( patient1Encounter ) ;
299+
290300 // Within date range, discharge event, patient 1 (latest for patient 1)
291301 //var dischargeCorrelationId1 = Guid.NewGuid().ToString();
292302 //var patient1DischargePayload = new FHIRListDischargePayload(patientId1, DateTime.UtcNow.AddDays(-1));
@@ -297,28 +307,40 @@ public async Task GetAdmittedPatientEventModelsByDateRange_ReturnsCorrectEvents(
297307 var admitCorrelationId2 = Guid . NewGuid ( ) . ToString ( ) ;
298308 var patient2AdmitPayload = new FHIRListAdmitPayload ( patientId2 , DateTime . UtcNow . AddDays ( - 2 ) ) ;
299309 var patient2AdmitEvent = patient2AdmitPayload . CreatePatientEvent ( facilityId , admitCorrelationId2 ) ;
310+ var patient2Encounter = new PatientEncounterBuilder ( facilityId , null , patient2AdmitEvent . EventDate , null , admitCorrelationId2 ) . AddPatientIdentifier ( patientId2 , SourceType . FHIR ) . GetPatientEncounter ( ) ;
300311 events . Add ( patient2AdmitEvent ) ;
301312
313+ patient2Encounter . PatientIdentifiers . FirstOrDefault ( ) . Id = Guid . NewGuid ( ) . ToString ( ) ;
314+ db . PatientEncounters . Add ( patient2Encounter ) ;
315+
302316 // Outside date range, admit event
303317 var outsidePatientId = Guid . NewGuid ( ) . ToString ( ) ;
304318 var outsideCorrelationId = Guid . NewGuid ( ) . ToString ( ) ;
305- var outsideAdmitPayload = new FHIRListAdmitPayload ( outsidePatientId , DateTime . UtcNow . AddDays ( - 10 ) ) ;
319+ var outsideAdmitPayload = new FHIRListAdmitPayload ( outsidePatientId , DateTime . UtcNow . AddDays ( 1 ) ) ;
306320 var outsideAdmitEvent = outsideAdmitPayload . CreatePatientEvent ( facilityId , outsideCorrelationId ) ;
321+ var outsideEncounter = new PatientEncounterBuilder ( facilityId , null , outsideAdmitEvent . EventDate , null , outsideCorrelationId ) . AddPatientIdentifier ( outsidePatientId , SourceType . FHIR ) . GetPatientEncounter ( ) ;
307322 events . Add ( outsideAdmitEvent ) ;
308323
324+ outsideEncounter . PatientIdentifiers . FirstOrDefault ( ) . Id = Guid . NewGuid ( ) . ToString ( ) ;
325+ db . PatientEncounters . Add ( outsideEncounter ) ;
326+
309327 // Different facility, within date range
310328 var otherFacilityPatientId = Guid . NewGuid ( ) . ToString ( ) ;
311329 var otherFacilityCorrelationId = Guid . NewGuid ( ) . ToString ( ) ;
312330 var otherFacilityPayload = new FHIRListAdmitPayload ( otherFacilityPatientId , DateTime . UtcNow . AddDays ( - 3 ) ) ;
313331 var otherFacilityEvent = otherFacilityPayload . CreatePatientEvent ( "OtherFacility" , otherFacilityCorrelationId ) ;
332+ var otherFacilityEncounter = new PatientEncounterBuilder ( "OtherFacility" , null , otherFacilityEvent . EventDate , null , otherFacilityCorrelationId ) . AddPatientIdentifier ( otherFacilityPatientId , SourceType . FHIR ) . GetPatientEncounter ( ) ;
314333 events . Add ( otherFacilityEvent ) ;
315334
335+ otherFacilityEncounter . PatientIdentifiers . FirstOrDefault ( ) . Id = Guid . NewGuid ( ) . ToString ( ) ;
336+ db . PatientEncounters . Add ( otherFacilityEncounter ) ;
337+
316338 await db . PatientEvents . AddRangeAsync ( events ) ;
317339 await db . SaveChangesAsync ( ) ;
318340
319341 // Act
320342 var results =
321- await queries . GetAdmittedPatientEventModelsByDateRange ( facilityId , startDate , endDate ,
343+ await queries . GetAdmittedPatientEncounterModelsByDateRange ( facilityId , startDate , endDate ,
322344 CancellationToken . None ) ;
323345
324346 // Assert
@@ -327,19 +349,17 @@ await queries.GetAdmittedPatientEventModelsByDateRange(facilityId, startDate, en
327349 Assert . Equal ( 2 , results ? . Count ( ) ?? 0 ) ;
328350
329351 // Verify both admitted patients are in the results
330- Assert . Contains ( results , e => e . SourcePatientId == patientId1 ) ;
331- Assert . Contains ( results , e => e . SourcePatientId == patientId2 ) ;
352+ Assert . Contains ( results , e => e . PatientIdentifiers . FirstOrDefault ( ) . Identifier == patientId1 ) ;
353+ Assert . Contains ( results , e => e . PatientIdentifiers . FirstOrDefault ( ) . Identifier == patientId2 ) ;
332354
333355 foreach ( var result in results )
334356 {
335357 // Extract the date from the payload
336- var eventDate = GetDateFromPayload ( result . Payload ) ;
358+ // var eventDate = GetDateFromPayload(result.Payload);
337359
338- Assert . True ( eventDate >= startDate && eventDate <= endDate ,
339- $ "Event date { eventDate } for event { result . Id } should be between { startDate } and { endDate } ") ;
360+ Assert . True ( result . AdmitDate >= startDate && result . AdmitDate <= endDate ,
361+ $ "Event date { result . AdmitDate } for event { result . Id } should be between { startDate } and { endDate } ") ;
340362 }
341-
342-
343363 }
344364
345365 private DateTime GetDateFromPayload ( IPayload payload )
@@ -359,23 +379,15 @@ public async Task GetAdmittedPatientEventModelsByDateRange_WithInvalidParameters
359379 {
360380 // Arrange
361381 var db = _fixture . DbContext ;
362- var queries = _fixture . ServiceProvider . GetRequiredService < IPatientEventQueries > ( ) ;
382+ var queries = _fixture . ServiceProvider . GetRequiredService < IPatientEncounterQueries > ( ) ;
363383
364384 var facilityId = "TestFacility" + Guid . NewGuid ( ) . ToString ( ) ;
365385 var startDate = DateTime . UtcNow . AddDays ( - 5 ) ;
366386 var endDate = DateTime . UtcNow ;
367387
368388 // Act & Assert - Invalid facility ID
369389 await Assert . ThrowsAsync < ArgumentException > ( ( ) =>
370- queries . GetAdmittedPatientEventModelsByDateRange ( null , startDate , endDate , CancellationToken . None ) ) ;
371-
372- // Act & Assert - Default start date
373- await Assert . ThrowsAsync < ArgumentException > ( ( ) =>
374- queries . GetAdmittedPatientEventModelsByDateRange ( facilityId , default , endDate , CancellationToken . None ) ) ;
375-
376- // Act & Assert - Default end date
377- await Assert . ThrowsAsync < ArgumentException > ( ( ) =>
378- queries . GetAdmittedPatientEventModelsByDateRange ( facilityId , startDate , default , CancellationToken . None ) ) ;
390+ queries . GetAdmittedPatientEncounterModelsByDateRange ( null , startDate , endDate , CancellationToken . None ) ) ;
379391 }
380392
381393 [ Fact ]
0 commit comments