Exemple #1
0
        public void ApplyPacientFilter(Pacient pacient, DateTime?createDate = null)
        {
            var listToRemove = new List <ProtocolRecord>();
            var today        = DateTime.Now;

            if (createDate.HasValue && (pacient.Birthdate < createDate))
            {
                today = createDate.Value;
            }
            var      age = pacient.GetAge(today);
            DateTime bd  = pacient.Birthdate.Value;

            // смотрим по году исполнени¤
            if (age >= 3)
            {
                if (today.Month < bd.Month)
                {
                    age++;
                }
                if (today.Month == bd.Month)
                {
                    if (today.Day < bd.Day)
                    {
                        age++;
                    }
                }
            }
            int month = pacient.GetMonthWithNoAge(today);

            foreach (var protocolRecord in Records)
            {
                var type = protocolRecord.Type;
                // провер¤ем пол
                switch (type.Gender)
                {
                case GenderFor.All:
                    break;

                case GenderFor.F:
                    if (pacient.Gender == Gender.Male)
                    {
                        listToRemove.Add(protocolRecord);
                        continue;
                    }
                    break;

                case GenderFor.M:
                    if (pacient.Gender == Gender.Female)
                    {
                        listToRemove.Add(protocolRecord);
                        continue;
                    }
                    break;

                default:
                    break;
                }
                // провер¤ем возраст
                switch (type.TimeType)
                {
                // если фильтр ќ“ возраста
                case TimeTypes.FromLimit:
                    // если тек. год меньше или (если года совпадают, тек. мес¤ц меньше)
                    if (age < type.TimeFrom.Year || (age == type.TimeFrom.Year && month < type.TimeFrom.Month))
                    {
                        // тогда удал¤ем
                        listToRemove.Add(protocolRecord);
                    }
                    break;

                // если фильтр ƒќ возраста
                case TimeTypes.ToLimit:
                    // если тек. год больше или (если года совпадают, то тек. мес¤ц больше)
                    if (age > type.TimeTo.Year || (age == type.TimeTo.Year && month > type.TimeTo.Month))
                    {
                        listToRemove.Add(protocolRecord);
                    }
                    break;

                // если диапазон
                case TimeTypes.Range:
                    if (
                        (age < type.TimeFrom.Year || age > type.TimeTo.Year)
                        ||
                        (age == type.TimeFrom.Year && month < type.TimeFrom.Month)
                        ||
                        (age == type.TimeTo.Year && month > type.TimeTo.Month)
                        )
                    {
                        listToRemove.Add(protocolRecord);
                    }
                    break;

                case TimeTypes.All:
                    break;

                default:
                    break;
                }
            }

            foreach (var protocolRecord in listToRemove)
            {
                Records.Remove(protocolRecord);
            }
        }
Exemple #2
0
        // возвращает ТРУ если пациент удовлетворяет условиям, заданных для типа диспансеризации
        public bool CheckPacient(Pacient pacient, DateTime?checkDateFrom = null)
        {
            // проверяем пол
            if (Gender.HasValue)
            {
                if (Gender.Value != pacient.Gender)
                {
                    return(false);
                }
            }

            DateTime now = DateTime.Now;

            if (checkDateFrom.HasValue)
            {
                now = checkDateFrom.Value;
            }

            DateTime bd = pacient.Birthdate.Value;
            // смотрим по году исполнения
            int age = pacient.GetAge(now);

            if (age >= NoMonthAge)
            {
                if (now.Month < bd.Month)
                {
                    age++;
                }
                if (now.Month == bd.Month)
                {
                    if (now.Day < bd.Day)
                    {
                        age++;
                    }
                }
            }


            bool checkMonth = age < NoMonthAge;
            int  month      = 0;

            if (checkMonth)
            {
                // от 0 до 1 - 1 месячный, от 1 до 2 - 2 месячный
                month = pacient.GetMonthWithNoAge(now);
            }

            switch (Type)
            {
            case DispType.ProfOsmotrAdult:
                break;

            case DispType.DOGVN1:
                // проверяем возраст
                if (age != Age)
                {
                    return(false);
                }
                break;

            case DispType.DOGVN2:
                break;

            case DispType.ProfOsmotrChild:
                // проверяем возраст
                if (age != Age)
                {
                    return(false);
                }
                else
                {
                    // проверяем месяц (проверка по месяцам актуальна когда возраст меньше трех)
                    if (checkMonth)
                    {
                        if (Age == 0 && month != Month)
                        {
                            return(false);
                        }
                        if (Age == 1)
                        {
                            // по месяцам 0, 3, 6, 9:
                            // например, для пациента возраста 1 год и 2 месяца будет применяться шаблон 1 год и 0 месяц
                            // 1 год и 8 месяц - 1 год и 6 месяцев
                            if (month < Month || Month + 3 < month)
                            {
                                return(false);
                            }
                        }

                        if (Age == 2)
                        {
                            // по месяцам 0, 6
                            if (month < Month || Month + 6 < month)
                            {
                                return(false);
                            }
                        }
                    }
                }
                break;

            case DispType.PreProfOsmotrChild:
                break;

            case DispType.PeriodProfOsmotrChild:
                // проверяем возраст
                if (age != Age)
                {
                    return(false);
                }
                else
                {
                    // проверяем месяц
                    if (checkMonth)
                    {
                        if (month != Month)
                        {
                            return(false);
                        }
                    }
                }
                break;

            case DispType.DispStacionarChildOrphan1:
                // проверяем возраст
                if (age != Age)
                {
                    return(false);
                }
                break;

            case DispType.DispStacionarChildOrphan12:
                break;

            case DispType.DispChildOrphan1:
                // проверяем возраст
                if (age != Age)
                {
                    return(false);
                }
                break;

            case DispType.DispChildOrphan12:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(true);
        }