/// <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); }
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; }
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); }
/* * 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 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; } } }
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]; }
/// <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); }