public void Should_Count_Hispanic_On_Bool()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    IsHispanic = false
                },
                new PatientDemographic
                {
                    IsHispanic = false
                },
                new PatientDemographic
                {
                    IsHispanic = false
                },
                new PatientDemographic
                {
                    IsHispanic = true
                }
            };
            var stats = reduce(patients);

            var hispanic = stats.BinarySplitData.First(b => b.Category == "Hispanic");
            var yes      = hispanic.Left;
            var no       = hispanic.Right;

            Assert.True(yes.Value == 1 && no.Value == 3);
        }
        public static int?CalculateAge(this PatientDemographic patient)
        {
            if (patient.Age.HasValue)
            {
                return(patient.Age.Value);
            }

            if (!patient.BirthDate.HasValue)
            {
                return(null);
            }

            if (patient.IsDeceased.HasValue && patient.IsDeceased.Value && !patient.DeathDate.HasValue)
            {
                return(null);
            }

            DateTime upper = DateTime.Today;

            if (patient.IsDeceased.HasValue && patient.IsDeceased.Value && patient.DeathDate.HasValue)
            {
                upper = patient.DeathDate.Value;
            }

            var bday = patient.BirthDate.Value;
            var age  = upper.Year - bday.Year;

            if (upper < bday.AddYears(age))
            {
                age--;
            }

            return(age);
        }
        public void Should_Count_Married_On_Bool()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    IsMarried = false
                },
                new PatientDemographic
                {
                    IsMarried = false
                },
                new PatientDemographic
                {
                    IsMarried = false
                },
                new PatientDemographic
                {
                    IsMarried = true
                }
            };
            var stats = reduce(patients);

            var married = stats.BinarySplitData.First(b => b.Category == "Married");
            var yes     = married.Left;
            var no      = married.Right;

            Assert.True(yes.Value == 1 && no.Value == 3);
        }
        public void Should_Only_Count_Binary_Gender_On_Match()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    Gender = "Nonbinary"
                },
                new PatientDemographic
                {
                    Gender = "female"
                },
                new PatientDemographic
                {
                    Gender = "female"
                },
                new PatientDemographic
                {
                    Gender = "male"
                }
            };
            var stats = reduce(patients);

            var gender = stats.BinarySplitData.First(b => b.Category == "Gender");
            var female = gender.Left;
            var male   = gender.Right;

            Assert.True(male.Value == 1 && female.Value == 2);
        }
        public void Should_Only_GenderAgeBucket_If_Aged_All_NonBinary()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    Age = 80
                },
                new PatientDemographic
                {
                },
                new PatientDemographic
                {
                    Age = 50
                },
                new PatientDemographic
                {
                    Age = 48
                }
            };

            var stats = reduce(patients);

            var abg    = stats.AgeByGenderData;
            var eighty = abg.GetBucket("75-84");
            var fifty  = abg.GetBucket("45-54");

            Assert.Equal(1, eighty.Others);
            Assert.Equal(2, fifty.Others);
        }
        public void Should_Only_Count_AARP_If_Aged()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    Age = 80
                },
                new PatientDemographic
                {
                },
                new PatientDemographic
                {
                    Age = 50
                },
                new PatientDemographic
                {
                    Age = 32
                }
            };

            var stats = reduce(patients);

            var aarp = stats.BinarySplitData.First(b => b.Category == "AARP");
            var yes  = aarp.Left;
            var no   = aarp.Right;

            Assert.True(yes.Value == 1 && no.Value == 2);
        }
        public void CalculateAge_Should_Return_Null_If_No_BirthDate()
        {
            var patient = new PatientDemographic {
            };

            var age = patient.CalculateAge();

            Assert.Null(age);
        }
        public void CalculateAge_Should_Return_Current_Age_If_Not_Deceased()
        {
            var patient = new PatientDemographic
            {
                BirthDate  = new DateTime(1990, 1, 1),
                IsDeceased = false
            };

            var age = patient.CalculateAge();

            Assert.True(age.HasValue && age.Value >= 28);
        }
        public void CalculateAge_Should_Return_Null_If_Deceased_No_DeathDate()
        {
            var patient = new PatientDemographic
            {
                BirthDate  = new DateTime(1990, 1, 1),
                IsDeceased = true
            };

            var age = patient.CalculateAge();

            Assert.Null(age);
        }
        public void CalculateAge_Should_Return_Age_At_Death_If_Deceased_With_Date()
        {
            var patient = new PatientDemographic
            {
                BirthDate  = new DateTime(1990, 1, 1),
                IsDeceased = true,
                DeathDate  = new DateTime(2018, 1, 1)
            };

            var age = patient.CalculateAge();

            Assert.Equal(28, age.Value);
        }
        public void Should_GenderAge_Ok()
        {
            var patients = new PatientDemographic[]
            {
                new PatientDemographic
                {
                    Age    = 80,
                    Gender = "male"
                },
                new PatientDemographic
                {
                    Gender = "female"
                },
                new PatientDemographic
                {
                    Age    = 50,
                    Gender = "female"
                },
                new PatientDemographic
                {
                    Age    = 48,
                    Gender = "female"
                },
                new PatientDemographic
                {
                    Age    = 48,
                    Gender = "male"
                }
            };

            var stats = reduce(patients);

            var abg    = stats.AgeByGenderData;
            var eighty = abg.GetBucket("75-84");
            var fifty  = abg.GetBucket("45-54");

            Assert.Equal(1, eighty.Males);
            Assert.Equal(1, fifty.Males);
            Assert.Equal(2, fifty.Females);
        }