예제 #1
0
        private void SetDefaultValues()
        {
            /*
             * Code = 29 - "За посещение в поликлинике"
             * Code = 30 - "За обращение (законченный случай) в поликлинике"
             */
            var sposobCode = (this.Cel == CelPosescheniya.ProfOsmotr) ? 29 : 30;

            this.SposobOplMedPom = Session.FindObject <Dictionaries.SposobOplatiMedPom>(CriteriaOperator.Parse("Code=?", sposobCode));

            /*
             * Code = 1 - "Стационаро"
             * Code = 2 - "В дневном стационаре"
             * Code = 3 - "Амбулаторно"
             * Code = 4 - "Вне медицинской организации"
             */
            this.UsloviyaPomoshi = Session.FindObject <Dictionaries.VidUsloviyOkazMedPomoshi>(CriteriaOperator.Parse("Code=?", 3));

            /*
             * Code = "1" - "Экстренная"
             * Code = "2" - "Неотложная"
             * Code = "3" - "Плановая"
             */
            this.FormaPomoshi = Session.FindObject <Dictionaries.FormaMedPomoshi>(CriteriaOperator.Parse("Code=?", 3));

            if (Pacient != null)
            {
                this.DetProfil = Pacient.GetAge() >= 18 ? PriznakDetProfila.No : PriznakDetProfila.Yes;

                // если в качестве пациента указан мать, то указывается вес. в посещении не используется (уточнить)
                //if (false)
                //    this.VesPriRozhdenii = 0;
            }

            if (this.Doctor != null)
            {
                this.DoctorSpec = Doctor.SpecialityTree;
                this.Otdelenie  = this.Doctor.Otdelenie;

                if (DoctorSpec != null)
                {
                    this.Profil = DoctorSpec.MedProfil;

                    /*
                     * Первичная мед.-санитарная помощь (код 1) проставляется для терапевтов (код 27), педиаторов (код 22), врачей сем. практики (код 16)
                     */
                    var vidPomoshiCode = 1;
                    if (DoctorSpec.Code == "16" || DoctorSpec.Code == "22" || DoctorSpec.Code == "27")
                    {
                        vidPomoshiCode = 1;
                    }
                    else
                    {
                        // другие значения
                    }
                    this.VidPom = Session.FindObject <Dictionaries.VidMedPomoshi>(CriteriaOperator.Parse("Code=?", vidPomoshiCode));
                }
            }

            // текущая версия классификатора специальностей.
            this.VersionSpecClassifier = "V015";
            this.StatusOplati          = Oplata.NetResheniya;
        }
예제 #2
0
        private void SetDefaultValues()
        {
            // определяем текущего пользователя
            var createdBy = SecuritySystem.CurrentUser as Doctor;

            if (createdBy != null)
            {
                // находим доктора с таким же Логином
                Doctor = Session.FindObject <Doctor>(CriteriaOperator.Parse("UserName=?", createdBy.UserName));
            }

            string MOCode = Settings.MOSettings.GetCurrentMOCode(Session);

            this.LPU   = Session.FindObject <MedOrg>(CriteriaOperator.Parse("Code=?", MOCode));
            this.LPU_1 = MOCode;

            // пока используем ГУИД идентификатор объекта
            this.NHistory = this.Oid.ToString();

            /*
             * Code = 29 - "За посещение в поликлинике"
             * Code = 30 - "За обращение (законченный случай) в поликлинике"
             */
            /*var sposobCode = (this.cel == CelPosescheniya.ProfOsmotr) ? 29 : 30;
             * this.SposobOplMedPom = Session.FindObject<Dictionaries.SposobOplatiMedPom>(CriteriaOperator.Parse("Code=?", sposobCode));*/

            /*
             * Code = 1 - "Стационаро"
             * Code = 2 - "В дневном стационаре"
             * Code = 3 - "Амбулаторно"
             * Code = 4 - "Вне медицинской организации"
             */
            this.UsloviyaPomoshi = Session.FindObject <Dictionaries.VidUsloviyOkazMedPomoshi>(CriteriaOperator.Parse("Code=?", 1));

            /*
             * Code = "1" - "Экстренная"
             * Code = "2" - "Неотложная"
             * Code = "3" - "Плановая"
             */
            this.FormaPomoshi = Session.FindObject <Dictionaries.FormaMedPomoshi>(CriteriaOperator.Parse("Code=?", 3));

            if (Pacient != null)
            {
                this.DetProfil = Pacient.GetAge() >= 18 ? PriznakDetProfila.No : PriznakDetProfila.Yes;

                // если в качестве пациента указан мать, то указывается вес. в посещении не используется (уточнить)
                //if (false)
                //    VesPriRozhdenii = 0;
            }

            if (this.Doctor != null)
            {
                this.DoctorSpec = Doctor.SpecialityTree;

                this.Otdelenie = this.Doctor.Otdelenie;

                if (DoctorSpec != null)
                {
                    this.Profil = DoctorSpec.MedProfil;

                    /*
                     * Первичная мед.-санитарная помощь (код 1) проставляется для терапевтов (код 27), педиаторов (код 22), врачей сем. практики (код 16)
                     */
                    var vidPomoshiCode = 1;
                    if (DoctorSpec.Code == "16" || DoctorSpec.Code == "22" || DoctorSpec.Code == "27")
                    {
                        vidPomoshiCode = 1;
                    }
                    else
                    {
                        // другие значения
                    }
                    this.VidPom = Session.FindObject <Dictionaries.VidMedPomoshi>(CriteriaOperator.Parse("Code=?", vidPomoshiCode));
                }
            }

            // текущая версия классификатора специальностей.
            this.VersionSpecClassifier = "V015";

            this.StatusOplati = Oplata.NetResheniya;

            this.Hospitalizacia = Napravlenie.Planovaya;

            // Проверяем, что услуга по умолчанию создана, если нет - создаем
            if (Services.Count == 0)
            {
                Services.Add(new MedService(Session)
                {
                    IsMainService = true, AutoOpen = false
                });
            }

            // связываем данные с аггрегированным свойством, чтобы иметь возможность добавлять поля услуги во View случая
            Service = Services[0];
        }
예제 #3
0
        public System.Xml.Linq.XElement GetReestrElement(int zapNumber, string lpuCode = null)
        {
            // проверяем поля услуги
            //if (IsValidForReestr() == false)
            //    return null;

            const int isBaby = 0;
            //string lpuCode = Settings.MOSettings.GetCurrentMOCode(Session);
            string       lpuCode_1      = lpuCode;
            const string dateTimeFormat = "{0:yyyy-MM-dd}";
            const string decimalFormat  = "n2";
            var          age            = this.Pacient.GetAge();

            var zap = new XElement("ZAP");

            // номер записи в счете
            zap.Add(new XElement("N_ZAP", zapNumber));
            // признак новой записи: 0, 1
            // в зависимости от результата оплаты (если 0, то запись новая)
            zap.Add(new XElement("PR_NOV", 0)); // ResultatOplati - в стационаре

            // данные пациента
            var polis = this.Pacient.Polises.FirstOrDefault(t => (t.DateEnd == null) || (t.DateEnd != null && DateTime.Now <= t.DateEnd));

            zap.Add(new XElement("PACIENT",
                                 new XElement("ID_PAC", Pacient.Oid), // GUID!
                                                                      // вид полиса. Классификатор
                                 new XElement("VPOLIS", polis != null && polis.Type != null ? polis.Type.Code : string.Empty),
                                                                      // серия полиса
                                 new XElement("SPOLIS", polis != null ? polis.Serial : string.Empty),
                                                                      // номер полиса
                                 new XElement("NPOLIS", polis != null ? polis.Number : string.Empty),
                                                                      // код СМО
                                 new XElement("SMO", polis != null && polis.SMO != null ? polis.SMO.Code : string.Empty),
                                                                      // признак новорожденного
                                 new XElement("NOVOR", isBaby)));

            Decimal tarif = Settings.TarifSettings.GetDnevnoyStacionarTarif(Session);
            //var paymentCode = 43;
            var childFlag = (Pacient.GetAge() < 18) ? 1 : 0;

            XElement sluchElement = new XElement("SLUCH");

            // Номер записи в реестре случаев
            sluchElement.Add(new XElement("IDCASE", zapNumber));
            // Условия оказания мед. помощи
            sluchElement.Add(new XElement("USL_OK", this.UsloviyaPomoshi.Code));
            // Вид мед. помощи
            sluchElement.Add(new XElement("VIDPOM", this.VidPom.Code));
            // Форма мед. помощи
            sluchElement.Add(new XElement("FOR_POM", this.FormaPomoshi.Code));

            // Направившее МО
            if (FromLPU != null)
            {
                sluchElement.Add(new XElement("NPR_MO", this.FromLPU.Code));
            }
            // Код МО
            sluchElement.Add(new XElement("LPU", lpuCode));
            // код подразделения МО
            sluchElement.Add(new XElement("LPU_1", lpuCode));

            string podr = lpuCode + (Profil != null ? (int?)Profil.Code : null) +
                          (Otdelenie != null ? Otdelenie.Code : null);

            // Код отделения
            sluchElement.Add(new XElement("PODR", podr));
            // Профиль
            if (Profil != null)
            {
                sluchElement.Add(new XElement("PROFIL", Profil.Code));
            }
            // Детский профиль
            sluchElement.Add(new XElement("DET", (int)this.DetProfil));
            // Номер истории болезни/талона амбулаторного пациента
            sluchElement.Add(new XElement("NHISTORY", this.Oid));
            // Даты лечения
            sluchElement.Add(new XElement("DATE_1", string.Format(dateTimeFormat, this.DateIn)));
            sluchElement.Add(new XElement("DATE_2", string.Format(dateTimeFormat, this.DateOut)));
            // Первичный диагноз
            if (PreDiagnose != null && PreDiagnose.Diagnose != null)
            {
                sluchElement.Add(new XElement("DS0", PreDiagnose.Diagnose.MKB));
            }
            // основной диагноз
            if (MainDiagnose != null && MainDiagnose.Diagnose != null)
            {
                sluchElement.Add(new XElement("DS1", MainDiagnose.Diagnose.MKB));
            }

            // Сопутствующие диагнозы
            foreach (var ds2 in SoputsDiagnoses)
            {
                sluchElement.Add(new XElement("DS2", ds2.MKB));
            }
            // Диагнозы осложнений
            foreach (var ds3 in OslozhDiagnoses)
            {
                sluchElement.Add(new XElement("DS3", ds3.MKB));
            }

            // проверить карту пациента
            // Вес при рождении
            if (this.VesPriRozhdenii != 0)
            {
                sluchElement.Add(new XElement("VNOV_M", this.VesPriRozhdenii));
            }

            /*// Коды МЭС
             * element.Add(new XElement("CODE_MES1", ));
             *
             * // Коды МЭС сопутствующих заболеваний
             * element.Add(new XElement("CODE_MES2", ));*/

            // Результат обращения
            sluchElement.Add(new XElement("RSLT", Resultat != null ? Resultat.Code : ""));
            // Исход заболевания
            sluchElement.Add(new XElement("ISHOD", Ishod != null ? Ishod.Code : ""));
            // Специальность леч. врача
            sluchElement.Add(new XElement("PRVS", this.DoctorSpec.Code));
            // Код классификатора мед. спец-й
            sluchElement.Add(new XElement("VERS_SPEC", this.VersionSpecClassifier));
            // Код врача, закрывшего случай
            sluchElement.Add(new XElement("IDDOKT", this.Doctor.SNILS));

            // Особые случаи
            //sluchElement.Add(new XElement("OS_SLUCH", (int)this.OsobiySluchay));

            // Способ оплаты мед. помощи
            if (SposobOplMedPom != null)
            {
                sluchElement.Add(new XElement("IDSP", this.SposobOplMedPom.Code));
            }

            /*// Кол-во единиц оплаты мед. помощи
             * element.Add(new XElement("ED_COL", this.MedPomCount));*/

            // Тариф
            if (this.Tarif != 0)
            {
                sluchElement.Add(new XElement("TARIF", this.Tarif));
            }
            // Сумма
            sluchElement.Add(new XElement("SUMV", this.TotalSum.ToString(decimalFormat).Replace(",", ".")));
            // Тип оплаты
            sluchElement.Add(new XElement("OPLATA", (int)this.StatusOplati));

            // Данные по услугам
            int serviceCounter = 1;

            foreach (var usl in Services.OfType <MedService>())
            {
                sluchElement.Add(usl.GetReestrElement(serviceCounter++, lpuCode));
            }

            if (!string.IsNullOrEmpty(this.Comment))
            {
                // Служебное поле
                sluchElement.Add(new XElement("COMMENTSL", this.Comment));
            }

            zap.Add(sluchElement);
            return(zap);
        }
예제 #4
0
        /// <summary>
        /// Получаем запись для реестра HM в формате XElement
        /// </summary>
        /// <returns>Элемент XML</returns>
        public XElement GetReesterElement(int zapNumber, string lpuCode = null)
        {
            const int isBaby = 0;
            //string lpuCode = Settings.MOSettings.GetCurrentMOCode(Session);
            string       lpuCode_1      = lpuCode;
            const string dateTimeFormat = "{0:yyyy-MM-dd}";
            const string decimalFormat  = "0.00";

            var ksg = Session.FindObject <ClinicStatGroups>(CriteriaOperator.Parse("Diagnose.MKB=?", this.Diagnose.MKB));
            var age = this.Pacient.GetAge();

            var zap = new XElement("ZAP");

            // номер записи в счете
            zap.Add(new XElement("N_ZAP", zapNumber));
            // признак новой записи: 0, 1
            // в зависимости от результата оплаты (если 0, то запись новая)
            zap.Add(new XElement("PR_NOV", (ResultatOplati == Oplata.NetResheniya) ? 0 : 1));

            //данные пациента
            var polis = this.Pacient.Polises.FirstOrDefault(t => (t.DateEnd == null) || (t.DateEnd != null && DateTime.Now <= t.DateEnd));

            zap.Add(new XElement("PACIENT",
                                 new XElement("ID_PAC", Pacient.Oid), // GUID!
                                                                      // вид полиса. Классификатор
                                 new XElement("VPOLIS", polis != null && polis.Type != null ? polis.Type.Code : string.Empty),
                                                                      // серия полиса
                                 new XElement("SPOLIS", polis != null ? polis.Serial : string.Empty),
                                                                      // номер полиса
                                 new XElement("NPOLIS", polis != null ? polis.Number : string.Empty),
                                                                      // код СМО
                                 new XElement("SMO", polis != null && polis.SMO != null ? polis.SMO.Code : string.Empty),
                                                                      // признак новорожденного
                                 new XElement("NOVOR", isBaby)));

            Decimal tarif       = Settings.TarifSettings.GetDnevnoyStacionarTarif(Session);
            var     paymentCode = 43;
            var     childFlag   = (Pacient.GetAge() < 18) ? 1 : 0;
            var     codeUslugi  = string.Empty;

            /* код услуги для дневного стационара
             * Терапия, то <CODE_USL> - 098305 для взрослых, 198305 для детей
             * Акушерский, то <CODE_USL> - 098304 для взрослых, 198304 для детей
             * Неврологический, то <CODE_USL> - 098308 для взрослых, 198308 для детей
             */
            switch (this.Type.Code)
            {
            // Код терапии
            case 1:
                codeUslugi = childFlag == 1 ? "198305" : "098305";
                break;

            // Акушерский код
            case 2:
                codeUslugi = childFlag == 1 ? "198304" : "098304";
                break;

            // Неврологический код
            case 4:
                codeUslugi = childFlag == 1 ? "198308" : "098308";
                break;

            case 3:
                codeUslugi = "198308";
                break;

            default:
                break;
            }

            // данные случая
            XElement sluch = new XElement("SLUCH",
                                                                              // порядковый номер случая для пациента. При слиянии с основным реестром следует изменить значение с учетом уже существующих случаев.
                                          new XElement("IDCASE", this.Oid),
                                                                              // код 2: Дневной стацинар. Классификатор условий оказания медицинской помощи (V006)
                                          new XElement("USL_OK", 2),
                                                                              // код 1: Первичная медико-санитарная помощь. Классификатор видов медицинской помощи (V008)
                                          new XElement("VIDPOM", 1),
                                                                              // код 3: Плановая. Классификатор форм оказания медицинской помощи (V014)
                                          new XElement("FOR_POM", 3),
                                                                              // Направление (госпитализация)	1 – плановая; 2 – экстренная
                                          new XElement("EXTR", (int)this.Napravlenie),
                                                                              // Код МО. МО лечения, указывается в соответствии с реестром F003.
                                          new XElement("LPU", lpuCode),
                                                                              // Подразделение МО
                                          new XElement("LPU_1", lpuCode_1),
                                                                              // Код отделения. Отделение МО лечения из регионального справочника.
                                          new XElement("PODR", Doctor.Otdelenie.Code),
                                                                              // Профиль. Классификатор (V002)
                                          new XElement("PROFIL", ksg.Profil.Code),
                                                                              // Признак детского профиля. 0-нет, 1-да.
                                                                              // Заполняется в зависимости от профиля оказанной медицинской помощи. ??
                                          new XElement("DET", childFlag),
                                                                              // Номер истории болезни/талона амбулаторного пациента/карты вызова скорой медицинской помощи
                                          new XElement("NHISTORY", this.Oid), // проверить отправив в ТФОМС
                                                                              // дата приема
                                          new XElement("DATE_1", string.Format(dateTimeFormat, this.DataPriema)),
                                                                              // дата выписки
                                          new XElement("DATE_2", string.Format(dateTimeFormat, this.DataVypiski)),
                                                                              // основной диагноз
                                          new XElement("DS1", Diagnose.MKB),
                                                                              // Классификатор МЭС. Указывается при на-личии утверждённого стандарта.
                                          new XElement("CODE_MES1", ksg.Number),
                                                                              // код 201: Выписан. Классификатор результатов обращения за медицинской помощью (V009)
                                          new XElement("RSLT", 201),
                                                                              // Классификатор исходов заболевания (V012)
                                          new XElement("ISHOD", (int)this.Resultat),
                                                                              // Специальность лечащего врача/врача, закрывшего талон
                                          new XElement("PRVS", this.Doctor.SpecialityCode),
                                                                              // Код классификатора специальностей
                                          new XElement("VERS_SPEC", "V015"),
                                                                              // Код врача, закрывшего талон/историю болезни
                                          new XElement("IDDOKT", this.Doctor.SNILS),
                                          new XElement("IDSP", paymentCode),
                                          // Количество единиц оплаты медицинской помощи
                                          new XElement("ED_COL", 1),
                                          new XElement("TARIF", (tarif * Convert.ToDecimal(ksg.KoeffZatrat)).ToString(decimalFormat).Replace(",", ".")),
                                          new XElement("SUMV", (tarif * Convert.ToDecimal(ksg.KoeffZatrat)).ToString(decimalFormat).Replace(",", ".")),
                                          // тип оплаты. При отправке всегда 0. Решение принимает ТФОМС и возвращает как статус.
                                          // можно фильтровать по оплате (если 1, вообще не трогаем)
                                          new XElement("OPLATA", 0));

            // данные оказанной услуги
            var medService = new XElement("USL",
                                          // порядковый номер в пределах случая. Для дневного стационара всегда 1, т.к. оказывается одна услуга
                                          new XElement("IDSERV", 1),
                                          new XElement("LPU", lpuCode),
                                          new XElement("LPU_1", lpuCode_1),
                                          new XElement("PODR", this.Doctor.Otdelenie.Code),
                                          new XElement("PROFIL", ksg.Profil.Code),
                                          // Признак детского профиля. 0-нет, 1-да.
                                          new XElement("DET", childFlag),
                                          // дата начала оказания услуги
                                          new XElement("DATE_IN", string.Format(dateTimeFormat, this.DataPriema)),
                                          // дата окончания оказания услуги
                                          new XElement("DATE_OUT", string.Format(dateTimeFormat, this.DataVypiski)),
                                          // диагноз
                                          new XElement("DS", Diagnose.MKB),
                                          // Код услуги	Территориальный классификатор услуг
                                          new XElement("CODE_USL", codeUslugi),
                                          // койкодни
                                          new XElement("KOL_USL", KoikoDni),
                                          new XElement("TARIF", (tarif * Convert.ToDecimal(ksg.KoeffZatrat)).ToString(decimalFormat).Replace(",", ".")),
                                          new XElement("SUMV_USL", (tarif * Convert.ToDecimal(ksg.KoeffZatrat)).ToString(decimalFormat).Replace(",", ".")),
                                          // специальность врача
                                          new XElement("PRVS", this.Doctor.SpecialityCode),
                                          // Код врача, закрывшего талон/историю болезни
                                          new XElement("CODE_MD", this.Doctor.SNILS)
                                          );

            var criteria = VidVmeCriteria;

            if (!Object.ReferenceEquals(criteria, null))
            {
                if (VidVme != null)
                {
                    var profilElement = medService.Element("PROFIL");
                    if (profilElement != null)
                    {
                        profilElement.AddAfterSelf(new XElement("VID_VME", VidVme.Code));
                    }
                }
            }

            sluch.Add(medService);
            zap.Add(sluch);
            return(zap);
        }