예제 #1
0
        /// <summary>
        /// Создать случай посещения с услугой для пациента
        /// </summary>
        /// <param name="objectSpace"></param>
        /// <param name="pacient"></param>
        /// <param name="doctor"></param>
        /// <param name="dateIn"></param>
        public static VisitCase CreateVisitCase(IObjectSpace objectSpace, Pacient pacient, Doctor doctor, DateTime dateIn)
        {
            Doctor    currentDoctor = objectSpace.GetObject((Doctor)SecuritySystem.CurrentUser);
            VisitCase newVisitCase  = objectSpace.CreateObject <VisitCase>();

            newVisitCase.DateIn  = dateIn;
            newVisitCase.Doctor  = doctor;
            newVisitCase.Pacient = pacient;
            MedService newMedService = objectSpace.CreateObject <MedService>();

            newMedService.Case   = newVisitCase;
            newMedService.DateIn = dateIn;
            newMedService.Doctor = doctor;
            return(newVisitCase);
        }
예제 #2
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;
        }
예제 #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
        /*
         * FAM, IM, OT, DR - ФИО и ДР пациента.
         * W - пол (1 - м., 2 - ж.)
         * DOCTP - тип документа удост. личность
         * DOCS - серия
         * DOCN - номер
         * RN - код ОКАТО (Район)
         * NP, UL, DOM, KOR, KV - нас. пункт, улица, дом, корпус, квартира
         * PRN - Тоже какой-то код окато
         * Q - код страховой мед. организации
         * PRZ - Пункт регистрации застрахованного
         * SPOL - серия полиса
         * NPOL - номер полиса
         * OPDOC - тип полиса
         * DBEG - дата начала действия полиса
         * LPU - прикрепленное ЛПУ
         * LPUDT - дата прикрепления к ЛПУ
         * LPUAUTO - ?
         */
        // пример записи из XML
        // <ROWDATA>
        //  <ROW FAM="НЕТ" IM="БАЛАЖИНИМА" OT="НЕТ" DR="01.10.1947" W="1" DOCTP="14" DOCS="81&#160;01" DOCN="141050" RN="81401373000" NP="Улан-Удэ" UL="СМОЛИНА" DOM="54" KOR="А" KV="2" PRN="81401373000" Q="03101" PRZ="137" SPOL="" NPOL="0369250848000218" OPDOC="3" DBEG="30.01.2015" LPU="032021" LPUDT="01.01.2011" LPUAUTO="0"/>

        public static void UpdateDbFromXml(DevExpress.ExpressApp.IObjectSpace objSpace, string xmlPath)
        {
            XDocument    xDoc = XDocument.Load(xmlPath);
            const string elementsContainer     = "ROWDATA";
            const string elementNameStartsWith = "ROW";
            int          counter     = 0;
            int          countToLoad = 120;

            foreach (var element in xDoc.Root.Element(elementsContainer).Elements())
            {
                if (element.Name.ToString().StartsWith(elementNameStartsWith) == false)
                {
                    continue;
                }

                // ищем документ, удостоверяющий личность
                var docType   = objSpace.FindObject <VidDocumenta>(CriteriaOperator.Parse("Code=?", element.Attribute("DOCTP").Value));
                var docSerial = element.Attribute("DOCS").Value;
                var docNumber = element.Attribute("DOCN").Value;
                var document  = objSpace.FindObject <Document>(CriteriaOperator.Parse("Type=? AND Serial=? AND Number=?", docType, docSerial, docNumber));

                Pacient pacient = null;
                // если документ найден
                if (document != null)
                {
                    // ищем пациента с таким документом
                    pacient = objSpace.FindObject <Pacient>(CriteriaOperator.Parse("Document=?", document));
                }
                else
                {
                    document        = objSpace.CreateObject <Document>();
                    document.Type   = docType;
                    document.Serial = docSerial;
                    document.Number = docNumber;
                }

                // если пациент не найден (или не найден документ)
                if (pacient == null)
                {
                    // создаем пациента
                    pacient = objSpace.CreateObject <Pacient>();
                    counter++;
                }
                else
                {
                    counter++;
                    //continue;
                }

                // задаем данные или меняем, если пациент уже был
                pacient.LastName   = element.Attribute("FAM").Value;
                pacient.FirstName  = element.Attribute("IM").Value;
                pacient.MiddleName = element.Attribute("OT").Value;

                DateTime birthDate = DateTime.MinValue;
                DateTime.TryParse(element.Attribute("DR").Value, out birthDate);
                pacient.Birthdate = birthDate == DateTime.MinValue ? null : (DateTime?)birthDate;

                pacient.Gender = element.Attribute("W").Value == "1" ? Gender.Male : Gender.Female;

                pacient.Document = document;


                var SMO = objSpace.FindObject <StrahMedOrg>(CriteriaOperator.Parse("Code=?", element.Attribute("Q").Value));
                pacient.Prikreplenie     = objSpace.FindObject <MedOrg>(CriteriaOperator.Parse("Code=?", element.Attribute("LPU").Value));
                pacient.PrikreplenieDate = (element.Attribute("LPUDT") == null || element.Attribute("LPUDT").Value == "") ? null : (DateTime?)DateTime.Parse(element.Attribute("LPUDT").Value);

                var polisType   = objSpace.FindObject <VidPolisa>(CriteriaOperator.Parse("Code=?", element.Attribute("OPDOC").Value));
                var polisSerial = element.Attribute("SPOL").Value;
                var polisNumber = element.Attribute("NPOL").Value;
                var polis       = objSpace.FindObject <Polis>(CriteriaOperator.Parse("Type=? AND Serial=? AND Number=?", polisType, polisSerial, polisNumber)) ??
                                  objSpace.CreateObject <Polis>();
                polis.Type      = polisType;
                polis.Serial    = polisSerial;
                polis.Number    = polisNumber;
                polis.PRZ       = element.Attribute("PRZ").Value;
                polis.SMO       = SMO;
                polis.DateBegin = (element.Attribute("DBEG") == null || element.Attribute("DBEG").Value == "") ? null : (DateTime?)DateTime.Parse(element.Attribute("DBEG").Value);

                if (pacient.Polises.Contains <Polis>(polis) == false)
                {
                    pacient.Polises.Add(polis);
                }

                var okato = element.Attribute("RN").Value;
                pacient.Address = Address.GetAddressByOkato(objSpace, okato);
                if (pacient.Address != null)
                {
                    var collection = new CriteriaOperatorCollection();
                    if (pacient.Address.Level1 != null)
                    {
                        collection.Add(new BinaryOperator("City", pacient.Address.Level1));
                    }
                    if (pacient.Address.Level2 != null)
                    {
                        collection.Add(new BinaryOperator("City", pacient.Address.Level2));
                    }
                    if (pacient.Address.Level3 != null)
                    {
                        collection.Add(new BinaryOperator("City", pacient.Address.Level3));
                    }
                    if (pacient.Address.Level4 != null)
                    {
                        collection.Add(new BinaryOperator("City", pacient.Address.Level4));
                    }

                    var street = objSpace.FindObject <Street>(CriteriaOperator.And(
                                                                  CriteriaOperator.Or(collection),
                                                                  CriteriaOperator.Parse(string.Format("Lower(Name) like '{0}%'", element.Attribute("UL").Value.ToLower())))
                                                              );
                    pacient.Address.Street = street;

                    pacient.Address.House = element.Attribute("DOM").Value;
                    pacient.Address.Build = element.Attribute("KOR").Value;
                    pacient.Address.Flat  = element.Attribute("KV").Value;
                }

                if (counter > countToLoad)
                {
                    counter = 0;
                    break;
                }
            }
        }
예제 #5
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];
        }
예제 #6
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);
        }