public string GetPersonIdFieldName() { if (Persons != null && Persons.Any()) { return(Persons[0].PersonId); } if (PayerPlanPeriods != null && PayerPlanPeriods.Any()) { return(PayerPlanPeriods[0].PersonId); } if (ConditionOccurrence != null && ConditionOccurrence.Any()) { return(ConditionOccurrence[0].PersonId); } if (Death != null && Death.Any()) { return(Death[0].PersonId); } if (DrugExposure != null && DrugExposure.Any()) { return(DrugExposure[0].PersonId); } if (ProcedureOccurrence != null && ProcedureOccurrence.Any()) { return(ProcedureOccurrence[0].PersonId); } if (Observation != null && Observation.Any()) { return(Observation[0].PersonId); } if (Measurement != null && Measurement.Any()) { return(Measurement[0].PersonId); } if (VisitOccurrence != null && VisitOccurrence.Any()) { return(VisitOccurrence[0].PersonId); } if (Cohort != null && Cohort.Any()) { return(Cohort[0].PersonId); } if (DeviceExposure != null && DeviceExposure.Any()) { return(DeviceExposure[0].PersonId); } throw new Exception("Cant find PersonId FieldName " + this.FileName); }
/// <summary> /// Projects Enumeration of ConditionOccurrence from the raw set of ConditionOccurrence entities. /// During build: /// override the condition's start date using the end date of the corresponding observation period. /// </summary> /// <param name="conditionOccurrences">raw set of condition occurrence entities</param> /// <param name="visitOccurrences">the visit occurrence entities for current person</param> /// <param name="observationPeriods">the observation period entities for current person</param> /// <returns>Enumeration of condition occurrence entities</returns> public override IEnumerable<ConditionOccurrence> BuildConditionOccurrences( ConditionOccurrence[] conditionOccurrences, Dictionary<long, VisitOccurrence> visitOccurrences, ObservationPeriod[] observationPeriods) { if (observationPeriods.Length != 0) { foreach (var conditionOccurrence in conditionOccurrences) { var sourceValue = conditionOccurrence.SourceValue; if (sourceValue.Length < 2) continue; if (sourceValue.Substring(sourceValue.Length - 2) != "_1") continue; if (conditionOccurrence.ConceptId > 0) { conditionOccurrence.StartDate = observationPeriods[0].StartDate; conditionOccurrence.EndDate = null; yield return conditionOccurrence; } } } }
/* * Projects Enumeration of ConditionOccurrence from the raw set of ConditionOccurrence entities. * During build: * override the condition's start date using the end date of the corresponding visit. * overide TypeConceptId per CDM Mapping spec. * */ public override IEnumerable <ConditionOccurrence> BuildConditionOccurrences(ConditionOccurrence[] conditionOccurrences, Dictionary <long, VisitOccurrence> visitOccurrences, ObservationPeriod[] observationPeriods) { foreach (var co in conditionOccurrences) { //DateTime dateOfMedicalCare; if (co.StartDate == DateTime.MinValue && co.VisitOccurrenceId.HasValue && visitOccurrences.ContainsKey(co.VisitOccurrenceId.Value)) { co.StartDate = visitOccurrences[co.VisitOccurrenceId.Value].StartDate; } //else if (!string.IsNullOrEmpty(co.AdditionalFields["month_and_year"]) && DateTime.TryParseExact(co.AdditionalFields["month_and_year"] + "01", "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateOfMedicalCare) && co.StartDate < dateOfMedicalCare) // co.StartDate = dateOfMedicalCare; co.EndDate = null; } var conditions = CleanupConditions(base.BuildEntities(conditionOccurrences, visitOccurrences, observationPeriods)).ToArray(); foreach (var sameProviderId in conditions.GroupBy(c => c.ProviderId)) { foreach (var sameSourceValue in sameProviderId.GroupBy(c => c.SourceValue)) { foreach (var episode in sameSourceValue.GroupBy(c => c.AdditionalFields["month_and_year_of_start"])) { var parentCondition = episode.FirstOrDefault(); if (parentCondition == null || string.IsNullOrEmpty(parentCondition.AdditionalFields["start_m_and_y_date"])) { continue; } if (!parentCondition.VisitOccurrenceId.HasValue || !visitOccurrences.ContainsKey(parentCondition.VisitOccurrenceId.Value)) { continue; } var endDate = episode.Max(c => c.StartDate); var startOfMedicalCare = DateTime.Parse(parentCondition.AdditionalFields["start_m_and_y_date"]); var newCondition = new ConditionOccurrence(parentCondition); newCondition.Id = chunkData.KeyMasterOffset.ConditionOccurrenceId; newCondition.VisitOccurrenceId = null; newCondition.TypeConceptId = 38000246; newCondition.EndDate = endDate; newCondition.StartDate = startOfMedicalCare; if (startOfMedicalCare < observationPeriods[0].StartDate) { newCondition.StartDate = observationPeriods[0].StartDate; } if (newCondition.StartDate > DateTime.MinValue && newCondition.StartDate < newCondition.EndDate) { yield return(newCondition); } } } } foreach (var co in conditions) { yield return(co); } }
/// <summary> /// Projects Enumeration of ConditionOccurrence from the raw set of ConditionOccurrence entities. /// During build: /// override the condition's start date using the start date of the corresponding visit. /// overide TypeConceptId per CDM Mapping spec. /// </summary> /// <param name="conditionOccurrences">raw set of condition occurrence entities</param> /// <param name="vo">the visit occurrence entities for current person</param> /// <param name="op">the observation period entities for current person</param> /// <returns>Enumeration of condition occurrence entities</returns> public override IEnumerable<ConditionOccurrence> BuildConditionOccurrences(ConditionOccurrence[] conditionOccurrences, Dictionary<long, VisitOccurrence> vo, ObservationPeriod[] op) { var result = new HashSet<ConditionOccurrence>(); var dateClaimTypeDictionary = new Dictionary<DateTime, Dictionary<string, List<IEntity>>>(); foreach (var conditionOccurrence in conditionOccurrences) { var visitOccurrence = GetVisitOccurrence(conditionOccurrence); if (visitOccurrence == null) continue; conditionOccurrence.VisitOccurrenceId = visitOccurrence.Id; conditionOccurrence.StartDate = visitOccurrence.StartDate; conditionOccurrence.EndDate = null; conditionOccurrence.TypeConceptId = GetConditionTypeConceptId(conditionOccurrence.TypeConceptId.Value, visitOccurrence.ConceptId); AddToDateClaimTypeDictionary(dateClaimTypeDictionary, conditionOccurrence, visitOccurrence); } foreach (var sameStartDate in conditionOccurrences.Where(c => c.VisitOccurrenceId.HasValue && !string.IsNullOrEmpty(c.SourceValue)).GroupBy(c => c.StartDate)) { foreach (var sameVisit in sameStartDate.GroupBy(c => c.VisitOccurrenceId)) { foreach (var sameSource in sameVisit.GroupBy(c => c.SourceValue)) { foreach (var sameConcept in sameSource.GroupBy(c => c.ConceptId)) { var conditionOccurrence = sameConcept.OrderBy(c => c.TypeConceptId).ToList()[0]; if (!CodeValidator.IsValidIcd9(conditionOccurrence.SourceValue)) continue; conditionOccurrence.ProviderKey = GetProviderKey(vo[conditionOccurrence.VisitOccurrenceId.Value], conditionOccurrence, dateClaimTypeDictionary); result.Add(conditionOccurrence); } } } } return base.BuildConditionOccurrences(result.ToArray(), vo, op); }