/// <summary> /// Build person entity and all person related entities like: DrugExposures, ConditionOccurrences, ProcedureOccurrences... from raw data sets /// </summary> public virtual Attrition Build(ChunkData data, KeyMasterOffsetManager o) { this.Offset = o; this.ChunkData = data; var result = BuildPerson(PersonRecords.ToList()); var person = result.Key; if (person == null) { Complete = true; return(result.Value); } var observationPeriods = BuildObservationPeriods(person.ObservationPeriodGap, ObservationPeriodsRaw.ToArray()).ToArray(); // Delete any individual that has an OBSERVATION_PERIOD that is >= 2 years prior to the YEAR_OF_BIRTH if (Excluded(person, observationPeriods)) { Complete = true; return(Attrition.ImplausibleYOBPostEarliestOP); } var payerPlanPeriods = BuildPayerPlanPeriods(PayerPlanPeriodsRaw.ToArray(), null).ToArray(); var visitOccurrences = new Dictionary <long, VisitOccurrence>(); foreach (var visitOccurrence in BuildVisitOccurrences(VisitOccurrencesRaw.ToArray(), observationPeriods)) { if (visitOccurrence.IdUndefined) { visitOccurrence.Id = KeyMasterOffsetManager.GetKeyOffset(visitOccurrence.PersonId).VisitOccurrenceId; } visitOccurrences.Add(visitOccurrence.Id, visitOccurrence); } var visitDetails = BuildVisitDetails(VisitDetailsRaw.ToArray(), VisitOccurrencesRaw.ToArray(), observationPeriods).ToArray(); var drugExposures = BuildDrugExposures(DrugExposuresRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); var conditionOccurrences = BuildConditionOccurrences(ConditionOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var procedureOccurrences = BuildProcedureOccurrences(ProcedureOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var observations = BuildObservations(ObservationsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var measurements = BuildMeasurement(MeasurementsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var deviceExposure = BuildDeviceExposure(DeviceExposureRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); // set corresponding PlanPeriodIds to drug exposure entities and procedure occurrence entities SetPayerPlanPeriodId(payerPlanPeriods, drugExposures, procedureOccurrences, visitOccurrences.Values.ToArray(), deviceExposure); // set corresponding ProviderIds SetProviderIds(drugExposures); SetProviderIds(conditionOccurrences); SetProviderIds(procedureOccurrences); SetProviderIds(observations); var death = BuildDeath(DeathRecords.ToArray(), visitOccurrences, observationPeriods); // TODO: TMP var drugCosts = BuildDrugCosts(drugExposures).ToArray(); var procedureCosts = BuildProcedureCosts(procedureOccurrences).ToArray(); var visitCosts = BuildVisitCosts(visitOccurrences.Values.ToArray()).ToArray(); var devicCosts = BuildDeviceCosts(deviceExposure).ToArray(); var cohort = BuildCohort(CohortRecords.ToArray(), observationPeriods).ToArray(); var notes = BuildNote(NoteRecords.ToArray(), visitOccurrences, observationPeriods).ToArray(); // push built entities to ChunkBuilder for further save to CDM database AddToChunk(person, death, observationPeriods, payerPlanPeriods, drugExposures, conditionOccurrences, procedureOccurrences, observations, measurements, visitOccurrences.Values.ToArray(), visitDetails, cohort, deviceExposure, notes); Complete = true; var pg = new PregnancyAlgorithm.PregnancyAlgorithm(); foreach (var r in pg.GetPregnancyEpisodes(Vocabulary, person, observationPeriods, ChunkData.ConditionOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.ProcedureOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Observations.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Measurements.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.DrugExposures.Where(e => e.PersonId == person.PersonId).ToArray())) { r.Id = KeyMasterOffsetManager.GetKeyOffset(r.PersonId).ConditionEraId; ChunkData.ConditionEra.Add(r); } return(Attrition.None); }
/// <summary> /// Build person entity and all person related entities like: DrugExposures, ConditionOccurrences, ProcedureOccurrences... from raw data sets /// </summary> public override Attrition Build(ChunkData data, KeyMasterOffsetManager om) { this.Offset = om; this.ChunkData = data; var result = BuildPerson(PersonRecords.ToList()); var person = result.Key; if (person == null) { return(result.Value); } if (!ObservationPeriodsRaw.Any(op => op.StartDate < op.EndDate)) { return(Attrition.InvalidObservationTime); } var observationPeriods = BuildObservationPeriods(person.ObservationPeriodGap, ObservationPeriodsRaw.Where(op => op.StartDate < op.EndDate).ToArray()).ToArray(); var payerPlanPeriods = BuildPayerPlanPeriods(PayerPlanPeriodsRaw.ToArray(), null).ToArray(); var cohort = BuildCohort(CohortRecords.ToArray(), observationPeriods).ToArray(); var visitOccurrences = new Dictionary <long, VisitOccurrence>(); var visitIds = new List <long>(); // Build and clenaup visit occurrences entities foreach (var visitOccurrence in CleanupVisits( BuildVisitOccurrences(VisitOccurrencesRaw.ToArray(), observationPeriods), cohort, observationPeriods)) { visitOccurrences.Add(visitOccurrence.Id, visitOccurrence); visitIds.Add(visitOccurrence.Id); } long?prevVisitId = null; foreach (var visitId in visitIds.OrderBy(v => v)) { if (prevVisitId.HasValue) { visitOccurrences[visitId].PrecedingVisitOccurrenceId = prevVisitId; } prevVisitId = visitId; } var drugExposures = BuildDrugExposures(DrugExposuresRaw.Where(de => de.StartDate < DateTime.Now).ToArray(), visitOccurrences, observationPeriods) .ToArray(); var deviceExposure = BuildDeviceExposure(DeviceExposureRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var conditionOccurrences = Cleanup( BuildConditionOccurrences( ConditionOccurrencesRaw.Where(co => co.StartDate < DateTime.Now).ToArray(), visitOccurrences, observationPeriods), cohort).ToArray(); var procedureOccurrences = Cleanup( BuildProcedureOccurrences(ProcedureOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods), cohort).ToArray(); var observations = Cleanup(BuildObservations(ObservationsRaw.ToArray(), visitOccurrences, observationPeriods), cohort) .ToArray(); var measurements = Cleanup(BuildMeasurement(MeasurementsRaw.ToArray(), visitOccurrences, observationPeriods), cohort) .ToArray(); // set corresponding PlanPeriodIds to drug exposure entities and procedure occurrence entities SetPayerPlanPeriodId(payerPlanPeriods, drugExposures, procedureOccurrences, visitOccurrences.Values.ToArray(), new DeviceExposure[] { }); // set corresponding ProviderIds SetProviderIds(drugExposures); SetProviderIds(conditionOccurrences); SetProviderIds(procedureOccurrences); SetProviderIds(observations); var death = BuildDeath(DeathRecords.ToArray(), visitOccurrences, observationPeriods); var drugCosts = BuildDrugCosts(drugExposures).ToArray(); var procedureCosts = BuildProcedureCosts(procedureOccurrences).ToArray(); // push built entities to ChunkBuilder for further save to CDM database AddToChunk(person, death, observationPeriods, payerPlanPeriods, drugExposures, CleanupCondition(conditionOccurrences).ToArray(), procedureOccurrences, CleanupObservations(observations, measurements, conditionOccurrences, procedureOccurrences).ToArray(), measurements, visitOccurrences.Values.ToArray(), null, cohort, deviceExposure, new Note[0]); var pg = new PregnancyAlgorithm.PregnancyAlgorithm(); foreach (var r in pg.GetPregnancyEpisodes(Vocabulary, person, observationPeriods, ChunkData.ConditionOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.ProcedureOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Observations.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Measurements.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.DrugExposures.Where(e => e.PersonId == person.PersonId).ToArray())) { r.Id = KeyMasterOffsetManager.GetKeyOffset(r.PersonId).ConditionEraId; ChunkData.ConditionEra.Add(r); } return(Attrition.None); }
public override Attrition Build(ChunkData data, KeyMasterOffsetManager offset) { Offset = offset; ChunkData = data; var p = new List <Person>(); var op = new List <ObservationPeriod>(); var vo = new List <VisitOccurrence>(); var co = new List <ConditionOccurrence>(); var de = new List <DrugExposure>(); var o = new List <Observation>(); foreach (var record in PersonRecords) { var table = record.AdditionalFields["table_name"]?.ToLower(); var variable = record.AdditionalFields["variable"]?.ToLower(); var value = record.AdditionalFields["value"]?.ToLower(); var description = string.Empty; if (record.AdditionalFields.ContainsKey("value_description")) { description = record.AdditionalFields["value_description"]?.ToLower(); } if (string.IsNullOrEmpty(table) || string.IsNullOrEmpty(variable)) { continue; } decimal?decimalValue = null; if (decimal.TryParse(value, out var dValue)) { decimalValue = dValue; } var valueAsString = value; if (!string.IsNullOrEmpty(description)) { valueAsString = description; } var year = 2000; if (table.StartsWith("demo")) { p.Add(record); // GetYear => empty -> 2000 'B' -> 2002, 'C' -> 2004, 'D' -> 2006 .... year = GetYear(table.Replace("demo", "").Replace("_", "")); if (op.Count == 0) { op.Add(new ObservationPeriod { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).ObservationId, PersonId = record.PersonId, TypeConceptId = 0, StartDate = new DateTime(year - 1, 1, 1), EndDate = new DateTime(year, 12, 31) }); vo.Add(new VisitOccurrence(record) { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).VisitOccurrenceId, ConceptId = 0, StartDate = new DateTime(year - 1, 1, 1), StartTime = new DateTime(year - 1, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), EndDate = new DateTime(year - 1, 1, 1), EndTime = new DateTime(year - 1, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), TypeConceptId = 44818519 }); } } else if (table.StartsWith("rxq_rx") && (variable.StartsWith("rxddrgid") || variable.StartsWith("rxddrug"))) { year = GetYear(table.Replace("rxq_rx", "").Replace("_", "")); string sourceValue = null; if (!string.IsNullOrEmpty(value) && value.Contains('_')) { var values = value.Split('_'); // use the characters after the last underscore(_) // 60000_1_7__d00910 if (table == "rxq_rx" || table == "rxq_rx_b") { sourceValue = values.Last(); } // use the characters before the first underscore (_) // d00848_365_1_DICLOFENAC else { sourceValue = values[0]; } } var result = Vocabulary.Lookup(sourceValue, "Drug", DateTime.MinValue); if (result.Any()) { foreach (var lookupValue in result) { var conceptId = lookupValue.ConceptId; if (conceptId.HasValue) { de.Add(new DrugExposure(record) { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).DrugExposureId, ConceptId = conceptId.Value, StartDate = new DateTime(year - 1, 1, 1), StartTime = new DateTime(year - 1, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), EndDate = new DateTime(year - 1, 1, 1), EndTime = new DateTime(year - 1, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), SourceValue = sourceValue, TypeConceptId = 44787730 }); } } } } else if (!string.IsNullOrEmpty(value)) { var yearField = table.Split('_').Last(); year = GetYear(yearField == table ? null : yearField); var sourceValue = variable + "_" + value; if (variable == "bmxbmi") { int?conceptId = null; if (double.TryParse(value, out var bmxbmi)) { if (bmxbmi < 18.5) { conceptId = 435372; } else if (bmxbmi > 25.0 && bmxbmi < 29.9) { conceptId = 437525; } else { conceptId = 4215968; } } co.Add(new ConditionOccurrence(record) { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).ConditionOccurrenceId, ConceptId = conceptId.Value, StartDate = new DateTime(year, 1, 1), StartTime = new DateTime(year, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), EndDate = null, EndTime = null, TypeConceptId = 45905770, SourceValue = sourceValue }); } else { var result = Vocabulary.Lookup(sourceValue, "Condition", DateTime.MinValue); if (result.Any()) { foreach (var lookupValue in result) { var conceptId = lookupValue.ConceptId; if (conceptId.HasValue) { co.Add(new ConditionOccurrence(record) { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).ConditionOccurrenceId, ConceptId = conceptId.Value, StartDate = new DateTime(year, 1, 1), StartTime = new DateTime(year, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), EndDate = null, EndTime = null, TypeConceptId = 45905770, SourceValue = sourceValue }); } } } } } o.Add(new Observation(record) { Id = KeyMasterOffsetManager.GetKeyOffset(record.PersonId).ObservationId, ValueAsNumber = decimalValue, ValueAsString = decimalValue.HasValue ? valueAsString : value, ConceptId = 0, TypeConceptId = 44814721, SourceValue = variable, StartDate = new DateTime(year, 1, 1), StartTime = new DateTime(year, 1, 1).ToString("HH:mm:ss", CultureInfo.InvariantCulture), }); } var r = BuildPerson(p); var person = r.Key; if (person == null) { Complete = true; return(r.Value); } if (vo.Count > 0) { foreach (var entity in o) { entity.VisitOccurrenceId = vo[0].Id; } foreach (var entity in de) { entity.VisitOccurrenceId = vo[0].Id; } foreach (var entity in co) { entity.VisitOccurrenceId = vo[0].Id; } } AddToChunk(person, null, op.ToArray(), new PayerPlanPeriod[0], de.ToArray(), co.ToArray(), new ProcedureOccurrence[0], o.ToArray(), new Measurement[0], vo.ToArray(), new VisitDetail[0], new Cohort[0], new DeviceExposure[0], new Note[0]); Complete = true; var pg = new PregnancyAlgorithm.PregnancyAlgorithm(); foreach (var pe in pg.GetPregnancyEpisodes(Vocabulary, person, op.ToArray(), ChunkData.ConditionOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.ProcedureOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Observations.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Measurements.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.DrugExposures.Where(e => e.PersonId == person.PersonId).ToArray())) { pe.Id = KeyMasterOffsetManager.GetKeyOffset(pe.PersonId).ConditionEraId; ChunkData.ConditionEra.Add(pe); } return(Attrition.None); }
//private VisitOccurrence GetVisitOccurrence(IEntity ent) //{ // if (_rawVisits.ContainsKey(ent.SourceRecordGuid)) // { // var vo = _rawVisits[ent.SourceRecordGuid]; // if (vo.Id == 0 && _rawVisits.ContainsKey(vo.SourceRecordGuid) && // _rawVisits[vo.SourceRecordGuid].SourceRecordGuid != ent.SourceRecordGuid) // { // vo = _rawVisits[vo.SourceRecordGuid]; // } // return vo; // } // return null; //} public override Attrition Build(ChunkData data, KeyMasterOffsetManager om) { this.Offset = om; this.ChunkData = data; var result = BuildPerson(PersonRecords.ToList()); var person = result.Key; if (person == null) { return(result.Value); } var observationPeriods = BuildObservationPeriods(person.ObservationPeriodGap, ObservationPeriodsRaw.ToArray()).ToArray(); // Delete any individual that has an OBSERVATION_PERIOD that is >= 2 years prior to the YEAR_OF_BIRTH if (Excluded(person, observationPeriods)) { return(Attrition.ImplausibleYOBPostEarliestOP); } var payerPlanPeriods = BuildPayerPlanPeriods(PayerPlanPeriodsRaw.ToArray(), null).ToArray(); var vDetails = BuildVisitDetails(null, VisitOccurrencesRaw.ToArray(), observationPeriods).ToArray(); var visitOccurrences = new Dictionary <long, VisitOccurrence>(); var visitIds = new List <long>(); foreach (var visitOccurrence in BuildVisitOccurrences( VisitOccurrencesRaw .Where(v => v.AdditionalFields["sort_index"] == "1" && v.AdditionalFields["ordinal"] == "1") .ToArray(), observationPeriods)) { if (!_rawVisits.ContainsKey(visitOccurrence.SourceRecordGuid)) { _rawVisits.Add(visitOccurrence.SourceRecordGuid, visitOccurrence); } visitOccurrences.Add(visitOccurrence.Id, visitOccurrence); visitIds.Add(visitOccurrence.Id); } var visitDetails = new Dictionary <long, VisitDetail>(); foreach (var group in vDetails.GroupBy(d => d.Id)) { var vd = group.First(); if (visitOccurrences.ContainsKey(vd.Id)) { vd.VisitOccurrenceId = vd.Id; vd.ProviderId = visitOccurrences[vd.Id].ProviderId; } else { var visits = visitOccurrences.Values.Where(vo => vo.TypeConceptId == vd.TypeConceptId && vo.StartDate >= vd.StartDate && vo.EndDate <= vo.EndDate).ToArray(); vd.VisitOccurrenceId = visits.Any() ? visits.First().Id : 0; } vd.SourceValue = $"visitid:{vd.VisitOccurrenceId};encid:{vd.AdditionalFields["encid"]}"; visitDetails.Add(vd.Id, vd); } long?prevVisitId = null; foreach (var visitId in visitIds.OrderBy(v => v)) { if (prevVisitId.HasValue) { visitOccurrences[visitId].PrecedingVisitOccurrenceId = prevVisitId; } prevVisitId = visitId; } UpdateVisitOccurrenceIds(visitOccurrences, visitDetails); var drugExposures = BuildDrugExposures(DrugExposuresRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); var conditionOccurrences = BuildConditionOccurrences(ConditionOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var procedureOccurrences = BuildProcedureOccurrences(ProcedureOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var observations = BuildObservations(ObservationsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var measurements = BuildMeasurement(MeasurementsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var deviceExposure = BuildDeviceExposure(DeviceExposureRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); // set corresponding PlanPeriodIds to drug exposure entities and procedure occurrence entities SetPayerPlanPeriodId(payerPlanPeriods, drugExposures, procedureOccurrences, visitOccurrences.Values.ToArray(), deviceExposure); var notes = BuildNote(NoteRecords.ToArray(), visitOccurrences, observationPeriods).ToArray(); // set corresponding ProviderIds SetProviderIds(drugExposures); SetProviderIds(conditionOccurrences); SetProviderIds(procedureOccurrences); SetProviderIds(observations); //SetProviderIds(visitDetails); SetProviderIds(drugExposures, visitOccurrences); SetProviderIds(conditionOccurrences, visitOccurrences); SetProviderIds(measurements, visitOccurrences); SetProviderIds(procedureOccurrences, visitOccurrences); SetProviderIds(deviceExposure, visitOccurrences); SetProviderIds(observations, visitOccurrences); SetProviderIds(notes, visitOccurrences); var death = BuildDeath(DeathRecords.ToArray(), visitOccurrences, observationPeriods); var drugCosts = BuildDrugCosts(drugExposures).ToArray(); var procedureCosts = BuildProcedureCosts(procedureOccurrences).ToArray(); var visitCosts = BuildVisitCosts(visitOccurrences.Values.ToArray()).ToArray(); var devicCosts = BuildDeviceCosts(deviceExposure).ToArray(); var cohort = BuildCohort(CohortRecords.ToArray(), observationPeriods).ToArray(); if (death != null) { death = CleanUpDeath(visitOccurrences.Values, death); death = CleanUpDeath(drugExposures, death); death = CleanUpDeath(conditionOccurrences, death); death = CleanUpDeath(procedureOccurrences, death); death = CleanUpDeath(measurements, death); death = CleanUpDeath(observations, death); death = CleanUpDeath(deviceExposure, death); } // push built entities to ChunkBuilder for further save to CDM database AddToChunk(person, death, observationPeriods, payerPlanPeriods, drugExposures, conditionOccurrences, procedureOccurrences, observations, measurements, visitOccurrences.Values.ToArray(), visitDetails.Values.ToArray(), cohort, deviceExposure, notes); var pg = new PregnancyAlgorithm.PregnancyAlgorithm(); foreach (var r in pg.GetPregnancyEpisodes(Vocabulary, person, observationPeriods, ChunkData.ConditionOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.ProcedureOccurrences.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Observations.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.Measurements.Where(e => e.PersonId == person.PersonId).ToArray(), ChunkData.DrugExposures.Where(e => e.PersonId == person.PersonId).ToArray())) { r.Id = KeyMasterOffsetManager.GetKeyOffset(r.PersonId).ConditionEraId; ChunkData.ConditionEra.Add(r); } return(Attrition.None); }
public override Attrition Build(ChunkData data, KeyMasterOffsetManager o) { this.Offset = o; this.ChunkData = data; var result = BuildPerson(PersonRecords.ToList()); var buildPerson = result.Key; if (buildPerson == null) { return(result.Value); } _currentPerson = buildPerson; var observationPeriods = BuildObservationPeriods(buildPerson.ObservationPeriodGap, ObservationPeriodsRaw.ToArray()).ToArray(); int age; int.TryParse(PersonRecords.ToArray()[0].AdditionalFields["age"], out age); _personAge = age; int ageday; int.TryParse(PersonRecords.ToArray()[0].AdditionalFields["ageday"], out ageday); if (age > 0) { buildPerson.YearOfBirth = observationPeriods[0].StartDate.Year - age; } else if (string.IsNullOrEmpty(PersonRecords.ToArray()[0].AdditionalFields["ageday"]) && PersonRecords.ToArray()[0].AdditionalFields["age_neonate"] == "1") { buildPerson.YearOfBirth = observationPeriods[0].StartDate.Year; } else if (PersonRecords.ToArray()[0].AdditionalFields["ageday"] == null && PersonRecords.ToArray()[0].AdditionalFields["age_neonate"] != "1" || ageday < 0) { var dateOfBirth = observationPeriods[0].StartDate.AddDays(-180); buildPerson.YearOfBirth = dateOfBirth.Year; } else if (ageday >= 0) { var dateOfBirth = observationPeriods[0].StartDate.AddDays(ageday * -1); buildPerson.YearOfBirth = dateOfBirth.Year; buildPerson.DayOfBirth = dateOfBirth.Day; buildPerson.MonthOfBirth = dateOfBirth.Month; } if (!buildPerson.YearOfBirth.HasValue || buildPerson.YearOfBirth < 1907) { return(Attrition.ImplausibleYOBPast); // HIX-1417 } // Delete any individual that has an OBSERVATION_PERIOD that is >= 2 years prior to the YEAR_OF_BIRTH if (Excluded(buildPerson, observationPeriods)) { return(Attrition.ImplausibleYOBPostEarliestOP); } var payerPlanPeriods = BuildPayerPlanPeriods(PayerPlanPeriodsRaw.ToArray(), null).ToArray(); var visitOccurrences = new Dictionary <long, VisitOccurrence>(); foreach (var visitOccurrence in BuildVisitOccurrences(VisitOccurrencesRaw.ToArray(), observationPeriods)) { if (visitOccurrence.IdUndefined) { visitOccurrence.Id = KeyMasterOffsetManager.GetKeyOffset(visitOccurrence.PersonId).VisitOccurrenceId; } visitOccurrences.Add(visitOccurrence.Id, visitOccurrence); } var drugExposures = BuildDrugExposures(DrugExposuresRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); var conditionOccurrences = BuildConditionOccurrences(ConditionOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var procedureOccurrences = BuildProcedureOccurrences(ProcedureOccurrencesRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var observations = BuildObservations(ObservationsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var measurements = BuildMeasurement(MeasurementsRaw.ToArray(), visitOccurrences, observationPeriods) .ToArray(); var deviceExposure = BuildDeviceExposure(DeviceExposureRaw.ToArray(), visitOccurrences, observationPeriods).ToArray(); var death = BuildDeath(DeathRecords.ToArray(), visitOccurrences, observationPeriods); var drugCosts = BuildDrugCosts(drugExposures).ToArray(); var procedureCosts = BuildProcedureCosts(procedureOccurrences).ToArray(); var visitCosts = BuildVisitCosts(visitOccurrences.Values.ToArray()).ToArray(); var devicCosts = BuildDeviceCosts(deviceExposure).ToArray(); foreach (var cost in visitCosts) { if (cost.TotalPaid == 0) { continue; } var cost52 = new Cost(cost.PersonId) { CostId = KeyMasterOffsetManager.GetKeyOffset(cost.PersonId).VisitCostId, CurrencyConceptId = 44818668, TypeId = 5032, Domain = "Visit", EventId = cost.Id, TotalCharge = cost.TotalPaid }; ChunkData.AddCostData(cost52); } var cohort = BuildCohort(CohortRecords.ToArray(), observationPeriods).ToArray(); // push built entities to ChunkBuilder for further save to CDM database AddToChunk(buildPerson, death, observationPeriods, payerPlanPeriods, drugExposures, conditionOccurrences, procedureOccurrences, observations, measurements, visitOccurrences.Values.ToArray(), null, cohort, deviceExposure, new Note[0]); var pg = new PregnancyAlgorithm.PregnancyAlgorithm(); foreach (var pe in pg.GetPregnancyEpisodes(Vocabulary, buildPerson, observationPeriods, ChunkData.ConditionOccurrences.Where(e => e.PersonId == buildPerson.PersonId).ToArray(), ChunkData.ProcedureOccurrences.Where(e => e.PersonId == buildPerson.PersonId).ToArray(), ChunkData.Observations.Where(e => e.PersonId == buildPerson.PersonId).ToArray(), ChunkData.Measurements.Where(e => e.PersonId == buildPerson.PersonId).ToArray(), ChunkData.DrugExposures.Where(e => e.PersonId == buildPerson.PersonId).ToArray())) { pe.Id = KeyMasterOffsetManager.GetKeyOffset(pe.PersonId).ConditionEraId; ChunkData.ConditionEra.Add(pe); } return(Attrition.None); }