Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 4
0
        /// <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);
        }