Ejemplo n.º 1
0
        /// <summary>
        /// Расчитывает ключ для указанных параметров
        /// </summary>
        /// <param name="searchKeyTypeXml">
        /// </param>
        /// <param name="insuredPersonDataXml">
        /// </param>
        /// <param name="documentXml">
        /// </param>
        /// <param name="address1Xml">
        /// </param>
        /// <param name="address2Xml">
        /// </param>
        /// <param name="medicalInsuranceXml">
        /// </param>
        /// <param name="okato">
        /// </param>
        /// <returns>
        /// The <see cref="byte[]"/>.
        /// </returns>
        public byte[] CalculateUserSearchKey(
            string searchKeyTypeXml,
            string insuredPersonDataXml,
            string documentXml,
            string address1Xml,
            string address2Xml,
            string medicalInsuranceXml,
            string okato)
        {
            // Парсинг
            ModelAdapter model = null;

            try
            {
                model = new ModelAdapter
                {
                    SearchKeyType    = SearchKeyType.FromXML(searchKeyTypeXml),
                    PersonData       = InsuredPersonDatum.FromXML(insuredPersonDataXml),
                    Document         = Document.FromXML(documentXml),
                    Address1         = address.FromXML(address1Xml),
                    Address2         = address.FromXML(address2Xml),
                    MedicalInsurance = MedicalInsurance.FromXML(medicalInsuranceXml),
                    Okato            = okato
                };
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка парсинга xml", ex);
            }

            return(CalculateUserSearchKey(model));
        }
        /// <summary>
        /// The check object.
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        public override void CheckObject(Statement statement)
        {
            var number = statement.NumberTemporaryCertificate;

            var session = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();

            if (string.IsNullOrEmpty(number))
            {
                return;
            }

            MedicalInsurance m = null;
            var count          =
                session.QueryOver <Statement>()
                .JoinAlias(x => x.MedicalInsurances, () => m)
                .Where(x => m.PolisType.Id == PolisType.В)
                .And(x => m.PolisNumber == number)
                .And(x => x.Id != statement.Id)
                .And(x => x.Status.Id != StatusStatement.Cancelled)
                .And(x => x.Status.Id != StatusStatement.Declined)
                .RowCount();

            if (count > 0)
            {
                throw new FaultTemporaryCertificateNumberExists();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Заполняет информацию о факте страхования
        /// </summary>
        /// <param name="insurance">
        /// The insurance.
        /// </param>
        /// <param name="statement">
        /// The statement.
        /// </param>
        protected virtual void FillInsurance(InsuranceType insurance, Statement statement)
        {
            var conceptManager = ObjectFactory.GetInstance <IConceptCacheManager>();

            // Номер полиса
            statement.NumberPolicy = insurance.ENP;

            // Информация о документе, подтверждающем факт страхования по ОМС
            statement.MedicalInsurances = new List <MedicalInsurance>();
            foreach (var polis in insurance.POLIS)
            {
                var medInsurance = new MedicalInsurance();

                medInsurance.Statement = statement;

                medInsurance.PolisType =
                    conceptManager.GetBy(x => x.Code == polis.VPOLIS && x.Oid.Id == Oid.Формаизготовленияполиса).FirstOrDefault();

                medInsurance.PolisSeria  = polis.SPOLIS;
                medInsurance.PolisNumber = polis.NPOLIS;

                DateTime dateFrom;
                if (!string.IsNullOrEmpty(polis.DBEG) && DateTime.TryParse(polis.DBEG, out dateFrom))
                {
                    medInsurance.DateFrom = dateFrom;
                }

                DateTime dateTo;
                if (!string.IsNullOrEmpty(polis.DEND) && DateTime.TryParse(polis.DEND, out dateTo))
                {
                    medInsurance.DateTo = dateTo;
                }

                DateTime dateStop;
                if (!string.IsNullOrEmpty(polis.DSTOP) && DateTime.TryParse(polis.DSTOP, out dateStop))
                {
                    medInsurance.DateStop = dateStop;
                }

                statement.MedicalInsurances.Add(medInsurance);

                if (!string.IsNullOrEmpty(medInsurance.PolisNumber))
                {
                    ////// Временное свидетельство
                    ////if (medInsurance.PolisNumber.Length == 9)
                    ////{
                    ////  statement.NumberTemporaryCertificate = medInsurance.PolisNumber;
                    ////  statement.DateIssueTemporaryCertificate = medInsurance.DateFrom;
                    ////}

                    ////// Номер бланка полиса
                    ////if (medInsurance.PolisNumber.Length == 11)
                    ////{
                    ////  statement.NumberPolisCertificate = medInsurance.PolisNumber;
                    ////  statement.DateIssuePolisCertificate = medInsurance.DateFrom;
                    ////}
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// The get insurance.
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <param name="insurance">
        /// The insurance.
        /// </param>
        /// <returns>
        /// The <see cref="ADT_A01_INSURANCE"/>.
        /// </returns>
        private ADT_A01_INSURANCE GetInsurance(Statement statement, MedicalInsurance insurance)
        {
            var ins = new ADT_A01_INSURANCE {
                In1 = GetIn1(statement, insurance)
            };

            return(ins);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Формирует список страховок
 /// </summary>
 /// <param name="statementCurrent">
 /// Текущее заявление
 /// </param>
 /// <param name="medicalInsurance">
 /// The medical Insurance.
 /// </param>
 /// <param name="statementPrevios">
 /// The statement Previos.
 /// </param>
 /// <param name="medicalInsurancePrevios">
 /// The medical Insurance Previos.
 /// </param>
 /// <returns>
 /// The <see cref="List{ADT_A01_INSURANCE}"/>.
 /// </returns>
 protected override List <ADT_A01_INSURANCE> GetInsuranceList(
     Statement statementCurrent,
     MedicalInsurance medicalInsurance,
     Statement statementPrevios,
     MedicalInsurance medicalInsurancePrevios)
 {
     return(new List <ADT_A01_INSURANCE> {
         GetInsuranceCurrent(statementCurrent, medicalInsurance)
     });
 }
Ejemplo n.º 6
0
        private Statement MoveDataFromGui2Object(Statement statement)
        {
            var statementService  = ObjectFactory.GetInstance <IStatementService>();
            var regulatoryService = ObjectFactory.GetInstance <IRegulatoryService>();
            var user = ObjectFactory.GetInstance <ISecurityService>().GetCurrentUser();

            // Выдан полис
            statement.PolicyIsIssued = true;

            statement.NotCheckPolisNumber = true;

            if (statement.MedicalInsurances == null)
            {
                statement.MedicalInsurances = new List <MedicalInsurance>(2);
            }

            var insurance = statement.MedicalInsurances.FirstOrDefault(x => x.PolisType.Id != PolisType.В && x.PolisType.Id != PolisType.С);

            if (insurance == null)
            {
                insurance = new MedicalInsurance();
                statement.MedicalInsurances.Add(insurance);
            }

            insurance.IsActive      = true;
            insurance.Statement     = statement;
            insurance.StateDateTo   = new DateTime(2200, 1, 1);
            insurance.StateDateFrom = DateTime.Now;
            insurance.Smo           = user.HasSmo() ? user.GetSmo() : null;

            // Тип выдаваемого полиса
            var policyType = int.Parse(ctrlIssueOfPolicy.PolicyTypeId);

            if (policyType >= 0)
            {
                insurance.PolisType = regulatoryService.GetConcept(policyType);
            }

            // Номер ЕНПk
            insurance.Enp = ctrlIssueOfPolicy.EnpNumber;
            // Серия полиса
            insurance.PolisSeria = string.Empty;
            // Номер полиса
            insurance.PolisNumber = ctrlIssueOfPolicy.PolicyNumber;
            // Дата выдачи
            DateTime dateTime;

            insurance.DateFrom = !string.IsNullOrEmpty(ctrlIssueOfPolicy.PolicyDateIssue) && DateTime.TryParse(ctrlIssueOfPolicy.PolicyDateIssue, out dateTime)
        ? dateTime : DateTime.Now.Date;
            // Дата окончания
            insurance.DateTo = !string.IsNullOrEmpty(ctrlIssueOfPolicy.PolicyDateEnd) && DateTime.TryParse(ctrlIssueOfPolicy.PolicyDateEnd, out dateTime)
        ? dateTime : DateTime.Now.Date;

            return(statement);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Возвращает маппинг Statment на ADT_A01
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <param name="insurance">
        /// The insurance.
        /// </param>
        /// <param name="message">
        /// The message.
        /// </param>
        /// <returns>
        /// The <see cref="ADT_A01"/>.
        /// </returns>
        public ADT_A01 GetAdtA01(Statement statement, MedicalInsurance insurance, Message message)
        {
            var adt01 = new ADT_A01
            {
                Msh           = GetMsh(statement, message),
                Evn           = GetEvn(statement),
                InsuranceList = new List <ADT_A01_INSURANCE> {
                    GetInsurance(statement, insurance)
                },
                Pid = GetPid(statement),

                // Pv1 = GetPv1(statement),
                // Zvn = GetZvn(statement)
            };

            return(adt01);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 获取门诊职工异地刷卡参数
        /// </summary>
        /// <param name="param"></param>
        public YdBaseParam GetYdOutpatientPayCardParam(
            GetYdOutpatientPayCardParam param)
        {
            var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId);

            userBase.TransKey = param.TransKey;
            var           result = new YdBaseParam();
            StringBuilder ctrXml = new StringBuilder();

            ctrXml.Append("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>");
            ctrXml.Append("<row>");
            ctrXml.Append($"<pi_xzqh>{param.AreaCode}</pi_xzqh>");        //行政区划
            ctrXml.Append($"<pi_fyze>{param.DownAmount}</pi_fyze>");      //费用总额
            ctrXml.Append($"<pi_cardid>{param.InsuranceNo}</pi_cardid>"); //费用总额
            ctrXml.Append($"<pi_hklb>1</pi_hklb>");                       //划卡类别
            ctrXml.Append($"<pi_jbr>{userBase.UserName}</pi_jbr>");       //经办人
            ctrXml.Append("</row>");
            result.TransactionCode = "YYJK014";
            result.InputXml        = ctrXml.ToString();
            var deleteData = _hisSqlRepository.DeleteDatabase(new DeleteDatabaseParam()
            {
                User      = userBase,
                Field     = "BusinessId",
                Value     = param.BusinessId,
                TableName = "MedicalInsurance"
            });
            var medicalInsurance = new MedicalInsurance()
            {
                Id                    = Guid.NewGuid(),
                InsuranceNo           = param.InsuranceNo,
                AdmissionInfoJson     = result.InputXml,
                MedicalInsuranceState = (int)MedicalInsuranceState.MedicalInsurancePreSettlement,
                InsuranceType         = 310,
                AreaCode              = param.AreaCode,
                IsBirthHospital       = false,
                BusinessId            = param.BusinessId,
            };

            _medicalInsuranceMap.InsertData(medicalInsurance, userBase);
            return(result);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Расчитывает ключ для указанных параметров
        /// </summary>
        /// <param name="keyType">
        /// </param>
        /// <param name="personData">
        /// </param>
        /// <param name="document">
        /// </param>
        /// <param name="address1">
        /// </param>
        /// <param name="address2">
        /// </param>
        /// <param name="medicalInsurance">
        /// </param>
        /// <param name="okato">
        /// </param>
        /// <returns>
        /// The <see cref="byte[]"/>.
        /// </returns>
        public byte[] CalculateUserSearchKey(
            SearchKeyType keyType,
            InsuredPersonDatum personData,
            Document document,
            address address1,
            address address2,
            MedicalInsurance medicalInsurance,
            string okato)
        {
            var model = new ModelAdapter
            {
                SearchKeyType    = keyType,
                PersonData       = personData,
                Document         = document,
                Address1         = address1,
                Address2         = address2,
                MedicalInsurance = medicalInsurance,
                Okato            = okato
            };

            return(CalculateUserSearchKey(model));
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Возвращает текущую страховку
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <param name="medicalInsurance">
        /// The medical Insurance.
        /// </param>
        /// <param name="id">
        /// Номер страховки в сегменте
        /// </param>
        /// <returns>
        /// Страховка
        /// </returns>
        protected ADT_A01_INSURANCE GetInsuranceCurrent(Statement statement, MedicalInsurance medicalInsurance, int id = 1)
        {
            var in1 = new IN1();

            // IN1.1	SI	Да	Порядковый номер сегмента
            in1.Id = id.ToString(CultureInfo.InvariantCulture);

            // IN1.2	CWE	Да	Идентификатор плана страхования
            in1.PlanId = new PlanId();

            // IN1.3	CX	Да	Идентификатор организации
            in1.CompanyId = new CompanyId {
                Id = medicalInsurance.Smo.Ogrn, CompanyIdType = "NII"
            };

            // IN1.4	XON	Нет	Наименование организации
            in1.CompanyName = new CompanyName {
                Name = medicalInsurance.Smo.FullName
            };

            // IN1.12	DT	Да	Дата начала действия страховки
            in1.DateBeginInsurence = Hl7Helper.FormatDate(medicalInsurance.DateFrom);

            // IN1.13	DT	Да	Дата окончания действия страховки
            in1.DateEndInsurence = medicalInsurance.DateTo.Year == 2200 ? string.Empty : Hl7Helper.FormatDate(medicalInsurance.DateTo);

            // IN1.15	IS	Да	Код территории страхования
            in1.CodeOfRegion = medicalInsurance.Smo.Parent.Okato;

            // IN1.35	IS	Нет	Тип страховки
            in1.InsuranceType = medicalInsurance.PolisType != null ? medicalInsurance.PolisType.Code : string.Empty;

            // IN1.36	ST	Да	Номер страховки
            in1.InsuranceSerNum = medicalInsurance.SeriesNumber;

            return(new ADT_A01_INSURANCE {
                In1 = in1
            });
        }
Ejemplo n.º 11
0
        /// <summary>
        /// The move data from gui 2 object.
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <param name="setCurrentStatement">
        /// The set current statement.
        /// </param>
        public override void MoveDataFromGui2Object(ref Statement statement, bool setCurrentStatement = true)
        {
            if (statement.MedicalInsurances == null)
            {
                statement.MedicalInsurances = new List <MedicalInsurance>(2);
            }

            foreach (var medicalInsurance in statement.MedicalInsurances)
            {
                medicalInsurance.IsActive = false;
            }

            // Выдача ВС
            if (statement.AbsentPrevPolicy.HasValue && statement.AbsentPrevPolicy.Value)
            {
                var temp = statement.MedicalInsurances.FirstOrDefault(x => x.PolisType.Id == PolisType.В);
                if (temp == null)
                {
                    temp = new MedicalInsurance();
                    statement.MedicalInsurances.Add(temp);
                }

                temp.IsActive      = true;
                temp.PolisType     = regulatoryService.GetConcept(PolisType.В);
                temp.PolisSeria    = string.Empty;
                temp.PolisNumber   = tbTemporaryCertificateNumber.Text;
                temp.Statement     = statement;
                temp.StateDateTo   = new DateTime(2200, 1, 1);
                temp.StateDateFrom = DateTime.Now;

                // Дата выдачи ВС
                DateTime dateTime;
                temp.DateFrom = !string.IsNullOrEmpty(tbTemporaryCertificateDateIssue.Text) &&
                                DateTime.TryParse(tbTemporaryCertificateDateIssue.Text, out dateTime)
                          ? dateTime
                          : new DateTime(1900, 1, 1);

                temp.DateTo   = statementService.CalculateEndPeriodWorkingDay(temp.DateFrom, 30);
                temp.DateStop = PolisEndDate != new DateTime(2200, 1, 1) ? (DateTime?)PolisEndDate : null;
            }

            // Выдача полиса
            statement.PolicyIsIssued = chbPolicyIsIssued.Checked;
            if (statement.PolicyIsIssued.Value)
            {
                var polis = statement.MedicalInsurances.FirstOrDefault(x => x.PolisType.Id != PolisType.В);
                if (polis == null)
                {
                    polis = new MedicalInsurance();
                    statement.MedicalInsurances.Add(polis);
                }

                polis.IsActive = true;
                var policyType = int.Parse(ddlPolicyType.SelectedValue);
                polis.PolisType     = regulatoryService.GetConcept(policyType);
                polis.PolisSeria    = string.Empty;
                polis.PolisNumber   = tbPolicyNumber.Text;
                polis.Enp           = tbEnpNumber.Text;
                polis.Statement     = statement;
                polis.StateDateTo   = new DateTime(2200, 1, 1);
                polis.StateDateFrom = DateTime.Now;

                // Дата выдачи ВС
                DateTime dateTime;
                polis.DateFrom = !string.IsNullOrEmpty(tbPolicyDateIssue.Text) &&
                                 DateTime.TryParse(tbPolicyDateIssue.Text, out dateTime)
                           ? dateTime
                           : new DateTime(2011, 1, 1);

                // Дата окончания действия
                polis.DateTo = !string.IsNullOrEmpty(tbPolicyDateEnd.Text) &&
                               DateTime.TryParse(tbPolicyDateEnd.Text, out dateTime)
                         ? dateTime
                         : new DateTime(2200, 1, 1);
                polis.DateStop = null;
            }

            // сохранение изменений в сессию
            if (setCurrentStatement)
            {
                CurrentStatement = statement;
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// The search.
        /// </summary>
        /// <param name="criteria">
        /// The criteria.
        /// </param>
        /// <param name="addCriteriaDelegate">
        /// The add criteria delegate.
        /// </param>
        /// <returns>
        /// The
        ///   <see>
        ///     <cref>SearchResult</cref>
        ///   </see>
        ///   .
        /// </returns>
        private SearchResult <SearchStatementResult> Search(
            SearchStatementCriteria criteria,
            Action <SearchStatementCriteria, QueryOver <Statement, Statement>, InsuredPersonDatum, Document, MedicalInsurance, bool> addCriteriaDelegate)
        {
            var session     = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();
            var currentUser = ObjectFactory.GetInstance <ISecurityProvider>().GetCurrentUser();
            var currentSmo  = currentUser.GetSmo();

            InsuredPersonDatum dpersonDatum      = null;
            InsuredPerson      dperson           = null;
            Document           ddocument         = null;
            MedicalInsurance   dmedicalInsurance = null;
            var deatachQuery =
                QueryOver.Of <Statement>()
                .JoinAlias(x => x.InsuredPersonData, () => dpersonDatum)
                .JoinAlias(x => x.InsuredPerson, () => dperson)
                .JoinAlias(x => x.DocumentUdl, () => ddocument)
                .JoinAlias(x => x.MedicalInsurances, () => dmedicalInsurance, JoinType.LeftOuterJoin)
                .Select(x => dperson.Id);

            Statement          statement    = null;
            InsuredPersonDatum personDatum  = null;
            InsuredPerson      person       = null;
            CauseReinsurance   cause        = null;
            Organisation       tfom         = null;
            Organisation       smo          = null;
            Organisation       point        = null;
            Concept            gender       = null;
            Concept            citizenship  = null;
            Document           document     = null;
            Concept            documentType = null;
            Concept            status       = null;
            var query =
                session.QueryOver(() => statement)
                .Left.JoinAlias(x => x.Status, () => status)
                .Left.JoinAlias(x => x.InsuredPersonData, () => personDatum)
                .Left.JoinAlias(x => x.InsuredPerson, () => person)
                .Left.JoinAlias(x => x.CauseFiling, () => cause)
                .Left.JoinAlias(x => x.PointDistributionPolicy, () => point)
                .Left.JoinAlias(() => point.Parent, () => smo)
                .Left.JoinAlias(() => smo.Parent, () => tfom)
                .Left.JoinAlias(() => personDatum.Gender, () => gender)
                .Left.JoinAlias(() => personDatum.Citizenship, () => citizenship)
                .Left.JoinAlias(x => x.DocumentUdl, () => document)
                .Left.JoinAlias(() => document.DocumentType, () => documentType)
                .WithSubquery.WhereProperty(x => x.InsuredPerson.Id)
                .In(deatachQuery);

            var emptyCriteria = true;

            // Статус заявления
            if (criteria.StatementStatus > 0)
            {
                switch (criteria.StatementStatus)
                {
                case 9000:
                    query.Where(x => document.IsBad);
                    query.Where(x => point.Parent.Id == currentSmo.Id);
                    break;

                case 9001:
                    query.Where(x => personDatum.IsBadSnils);
                    query.Where(x => point.Parent.Id == currentSmo.Id);
                    break;

                default:
                    query.Where(x => x.Status.Id == criteria.StatementStatus);
                    break;
                }

                emptyCriteria = false;
            }

            // Тип заявления
            if (criteria.StatementType > 0)
            {
                emptyCriteria = false;
                query.WhereRestrictionOn(x => x.CauseFiling.Id).IsInG(Statement.GetCauseFillingByType(criteria.StatementType));
            }

            // Поиск по дате подачи заявления
            if (criteria.UseDateFiling && criteria.DateFilingFrom != null && criteria.DateFilingTo != null)
            {
                if (criteria.DateFilingFrom > criteria.DateFilingTo)
                {
                    throw new SearchException("Дата начала периода больше, чем дата его окончания.");
                }

                criteria.DateFilingTo = criteria.DateFilingTo.Value.Date.AddHours(23).AddMinutes(59).AddSeconds(59);

                emptyCriteria = false;
                query.WhereRestrictionOn(x => x.DateFiling).IsBetween(criteria.DateFilingFrom).And(criteria.DateFilingTo);
            }

            // Выводить только последние значения
            if (criteria.ReturnLastStatement)
            {
                query.Where(x => x.IsActive);
            }

            addCriteriaDelegate(criteria, deatachQuery, dpersonDatum, ddocument, dmedicalInsurance, emptyCriteria);

            var count        = query.RowCount();
            var searchResult = new SearchResult <SearchStatementResult> {
                Skip = criteria.Skip, Total = count
            };

            query = AddOrder(criteria, statement, cause, smo, personDatum, gender, citizenship, documentType, document, query);

            query.Skip(criteria.Skip).Take(criteria.Take);

            SearchStatementResult result = null;
            var res =
                query.SelectList(
                    y =>
                    y.Select(x => x.Id)
                    .WithAlias(() => result.Id)
                    .Select(x => x.DateFiling)
                    .WithAlias(() => result.DateFiling)
                    .Select(x => x.IsActive)
                    .WithAlias(() => result.IsActive)
                    .Select(x => cause.Name)
                    .WithAlias(() => result.CauseFiling)
                    .Select(x => x.CauseFiling.Id)
                    .WithAlias(() => result.CauseFilingId)
                    .Select(x => smo.Id)
                    .WithAlias(() => result.SmoId)
                    .Select(x => smo.ShortName)
                    .WithAlias(() => result.Smo)
                    .Select(x => smo.Ogrn)
                    .WithAlias(() => result.SmoOGRN)
                    .Select(x => tfom.Okato)
                    .WithAlias(() => result.TfomOKATO)
                    .Select(x => personDatum.FirstName)
                    .WithAlias(() => result.FirstName)
                    .Select(x => personDatum.LastName)
                    .WithAlias(() => result.LastName)
                    .Select(x => personDatum.MiddleName)
                    .WithAlias(() => result.MiddleName)
                    .Select(x => gender.Name)
                    .WithAlias(() => result.Gender)
                    .Select(x => personDatum.Birthday)
                    .WithAlias(() => result.Birthday)
                    .Select(x => personDatum.Birthplace)
                    .WithAlias(() => result.Birthplace)
                    .Select(x => x.Address2)
                    .WithAlias(() => result.AddressLive)
                    .Select(x => x.Address)
                    .WithAlias(() => result.AddressRegistration)
                    .Select(x => x.NumberPolicy)
                    .WithAlias(() => result.PolicyNumber)
                    .Select(x => citizenship.Name)
                    .WithAlias(() => result.Citizenship)
                    .Select(x => documentType.Name)
                    .WithAlias(() => result.DocumentType)
                    .Select(x => document.Series)
                    .WithAlias(() => result.DocumentSeria)
                    .Select(x => document.Number)
                    .WithAlias(() => result.DocumentNumber)
                    .Select(x => personDatum.Snils)
                    .WithAlias(() => result.Snils)
                    .Select(x => status.Name)
                    .WithAlias(() => result.StatusStatement)
                    .Select(x => status.Id)
                    .WithAlias(() => result.Status)
                    .Select(x => person.Status.Id)
                    .WithAlias(() => result.PersonStatus)
                    .Select(x => x.IsExportPolis)
                    .WithAlias(() => result.IsSinhronized))
                .TransformUsing(Transformers.AliasToBean <SearchStatementResult>())
                .List <SearchStatementResult>();

            var errorManager        = ObjectFactory.GetInstance <IErrorManager>();
            var conceptCacheManager = ObjectFactory.GetInstance <IConceptCacheManager>();

            // получение текущего пользователя и текущей страховой
            foreach (var statementResult in res)
            {
                if (statementResult.IsActive)
                {
                    statementResult.StatusStatement += " (Активное";
                    if (statementResult.PersonStatus == StatusPerson.Dead)
                    {
                        statementResult.StatusStatement += " , Умерший";
                    }

                    statementResult.StatusStatement += ")";
                }

                statementResult.Errors =
                    errorManager.GetBy(x => x.Statement.Id == statementResult.Id)
                    .Select(
                        x =>
                        string.IsNullOrEmpty(x.Repl) ? x.Message1 : string.Format("{0} ({1})", x.Message1, x.Repl))
                    .ToList();
                statementResult.TypeStatement =
                    conceptCacheManager.GetById(Statement.GetTypeStatementId(statementResult.CauseFilingId)).Name;
                statementResult.FromCurrentSmo   = currentSmo.Id == statementResult.SmoId;
                statementResult.DateInsuranceEnd = new DateTime(2030, 1, 1); // TODO: логика для даты окончания

                var temp =
                    ObjectFactory.GetInstance <IMedicalInsuranceManager>()
                    .GetBy(x => x.Statement.Id == statementResult.Id && x.IsActive && x.PolisType.Id == PolisType.В)
                    .FirstOrDefault();
                if (temp != null)
                {
                    statementResult.NumberTemporaryCertificate = temp.PolisNumber;
                }

                var polis =
                    ObjectFactory.GetInstance <IMedicalInsuranceManager>()
                    .GetBy(x => x.Statement.Id == statementResult.Id && x.IsActive && x.PolisType.Id != PolisType.В)
                    .FirstOrDefault();
                if (polis != null)
                {
                    statementResult.PolicyNumber = polis.Enp;
                }
            }

            searchResult.Rows = res;
            return(searchResult);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// The add criteria keys.
        /// </summary>
        /// <param name="criteria">
        /// The criteria.
        /// </param>
        /// <param name="deatachQuery">
        /// The deatach query.
        /// </param>
        /// <param name="dpersonDatum">
        /// The dperson datum.
        /// </param>
        /// <param name="ddocument">
        /// The ddocument.
        /// </param>
        /// <param name="dmedicalInsurance">
        /// The dmedical Insurance.
        /// </param>
        /// <param name="emptyCriteria">
        /// The empty Criteria.
        /// </param>
        private void AddCriteriaKeys(
            SearchStatementCriteria criteria,
            QueryOver <Statement, Statement> deatachQuery,
            InsuredPersonDatum dpersonDatum,
            Document ddocument,
            MedicalInsurance dmedicalInsurance,
            bool emptyCriteria)
        {
            ////// Статус заявления
            ////if (criteria.StatementStatus > 0)
            ////{
            ////  deatachQuery.Where(x => x.Status.Id == criteria.StatementStatus);
            ////}

            ////// Тип заявления
            ////if (criteria.StatementType > 0)
            ////{
            ////  deatachQuery.WhereRestrictionOn(x => x.CauseFiling.Id)
            ////    .IsInG(Statement.GetCauseFillingByType(criteria.StatementType));
            ////}

            ////// Поиск по дате подачи заявления
            ////if (criteria.UseDateFiling && criteria.DateFilingFrom != null && criteria.DateFilingTo != null)
            ////{
            ////  if (criteria.DateFilingFrom > criteria.DateFilingTo)
            ////  {
            ////    throw new SearchException("Дата начала периода больше, чем дата его окончания.");
            ////  }

            ////  deatachQuery.WhereRestrictionOn(x => x.DateFiling).IsBetween(criteria.DateFilingFrom).And(criteria.DateFilingTo);
            ////}
            var statement = new Statement
            {
                InsuredPersonData =
                    new InsuredPersonDatum
                {
                    Birthday      = criteria.BirthDate,
                    Birthplace    = criteria.BirthPlace,
                    FirstName     = criteria.FirstName,
                    LastName      = criteria.LastName,
                    MiddleName    = criteria.MiddleName,
                    Snils         = criteria.SNILS,
                    NotCheckSnils = criteria.NotCheckSnils
                },
                DocumentUdl =
                    new Document
                {
                    Series       = criteria.DocumentSeries,
                    Number       = criteria.DocumentNumber,
                    DocumentType =
                        ObjectFactory.GetInstance <IConceptCacheManager>()
                        .GetById(criteria.DocumentTypeId)
                },
            };

            var searchKeyManager = ObjectFactory.GetInstance <ISearchKeyManager>();

            var keys = searchKeyManager.CalculateStandardKeys(statement);

            var queryKeys =
                QueryOver.Of <SearchKey>()
                .WhereRestrictionOn(x => x.KeyValue)
                .IsIn(keys.Select(y => y.KeyValue).ToList())
                .Select(x => x.InsuredPerson.Id);

            deatachQuery.WithSubquery.WhereProperty(x => x.InsuredPerson.Id).In(queryKeys);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// The add criteria data.
        /// </summary>
        /// <param name="criteria">
        /// The criteria.
        /// </param>
        /// <param name="deatachQuery">
        /// The deatach query.
        /// </param>
        /// <param name="dpersonDatum">
        /// The dperson datum.
        /// </param>
        /// <param name="ddocument">
        /// The ddocument.
        /// </param>
        /// <param name="dmedicalInsurance">
        /// The dmedical Insurance.
        /// </param>
        /// <param name="emptyCriteria">
        /// The empty Criteria.
        /// </param>
        private void AddCriteriaData(
            SearchStatementCriteria criteria,
            QueryOver <Statement, Statement> deatachQuery,
            InsuredPersonDatum dpersonDatum,
            Document ddocument,
            MedicalInsurance dmedicalInsurance,
            bool emptyCriteria)
        {
            // Номер ВС
            if (!string.IsNullOrEmpty(criteria.CertificateNumber))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dmedicalInsurance.PolisNumber == criteria.CertificateNumber)
                .And(x => dmedicalInsurance.PolisType.Id == PolisType.В);
            }

            // Имя
            if (!string.IsNullOrEmpty(criteria.FirstName))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.FirstName == criteria.FirstName.Trim());
            }

            // Фамилия
            if (!string.IsNullOrEmpty(criteria.LastName))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.LastName == criteria.LastName.Trim());
            }

            // Отчество
            if (!string.IsNullOrEmpty(criteria.MiddleName))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.MiddleName == criteria.MiddleName.Trim());
            }

            // СНИЛС
            if (!string.IsNullOrEmpty(criteria.SNILS))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.Snils == SnilsChecker.SsToShort(criteria.SNILS));
            }

            // Тип документа
            if (criteria.DocumentTypeId > 0 &&
                (!string.IsNullOrEmpty(criteria.DocumentSeries) || !string.IsNullOrEmpty(criteria.DocumentNumber)))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => ddocument.DocumentType.Id == criteria.DocumentTypeId);
            }

            // Серия документа
            if (!string.IsNullOrEmpty(criteria.DocumentSeries))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => ddocument.Series == criteria.DocumentSeries);
            }

            // Номер документа
            if (!string.IsNullOrEmpty(criteria.DocumentNumber))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => ddocument.Number == criteria.DocumentNumber);
            }

            // Номер документа
            if (!string.IsNullOrEmpty(criteria.BirthPlace))
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.Birthplace == criteria.BirthPlace.Trim());
            }

            // Номер полиса
            if (!string.IsNullOrEmpty(criteria.PolicyNumber))
            {
                emptyCriteria = false;

                // deatachQuery.Where(x => x.NumberPolicy == criteria.PolicyNumber.Trim());
                deatachQuery.Where(x => dmedicalInsurance.Enp == criteria.PolicyNumber.Trim())
                .And(x => dmedicalInsurance.PolisType.Id != PolisType.В);
            }

            // Дата рождения
            if (criteria.BirthDate.HasValue)
            {
                emptyCriteria = false;
                deatachQuery.Where(x => dpersonDatum.Birthday == criteria.BirthDate.Value);
            }

            if (!string.IsNullOrEmpty(criteria.Error))
            {
                emptyCriteria = false;
                Error error = null;
                deatachQuery.JoinAlias(x => x.Errors, () => error).Where(x => error.Message1 == criteria.Error);
            }

            // если не сработал ни один критерий то осталяем выборку пустой
            if (emptyCriteria)
            {
                throw new SetParameterSearchException();
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// The get message template.
        /// </summary>
        /// <param name="messageId"></param>
        /// <param name="statementCurrent">
        ///   The statement current.
        /// </param>
        /// <param name="medicalInsuranceCurrent">
        ///   The medical insurance current.
        /// </param>
        /// <param name="statementPrevios">
        ///   The statement previos.
        /// </param>
        /// <param name="medicalInsurancePrevios">
        ///   The medical insurance previos.
        /// </param>
        /// <returns>
        /// The <see cref="BaseMessageTemplate"/>.
        /// </returns>
        public override BaseMessageTemplate GetMessageTemplate(Guid messageId, Statement statementCurrent, MedicalInsurance medicalInsuranceCurrent, Statement statementPrevios = null, MedicalInsurance medicalInsurancePrevios = null)
        {
            var adt3 = new ADT_A03();

            if (statementCurrent.InsuredPerson.DeadInfo != null)
            {
                adt3.Evn = GetEvn(statementCurrent.InsuredPerson.DeadInfo.DateDead);
            }

            adt3.Pv1 = GetPv1();

            adt3.Pid = GetPid(statementCurrent);

            return(adt3);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// The get in 1.
        /// </summary>
        /// <param name="statement">
        /// The statement.
        /// </param>
        /// <param name="insurance">
        /// The insurance.
        /// </param>
        /// <returns>
        /// The <see cref="IN1"/>.
        /// </returns>
        private IN1 GetIn1(Statement statement, MedicalInsurance insurance)
        {
            var pvp               = statement.PointDistributionPolicy;
            var smo               = pvp.Parent;
            var personData        = statement.InsuredPersonData;
            var insuredPerson     = statement.InsuredPerson;
            var residencyDocument = statement.ResidencyDocument;
            var polisEndDate      = statement.ResidencyDocument != null && statement.ResidencyDocument.DateExp.HasValue
                           ? Hl7Helper.FormatDate(statement.ResidencyDocument.DateExp.Value)
                           : Hl7Helper.FormatDate(new DateTime(2200, 1, 1));
            var contact     = statement.ContactInfo;
            var tfoms       = statement.PointDistributionPolicy.Parent.Parent;
            var documentUdl = statement.DocumentUdl;

            var in1 = new IN1();

            // IN1.1	SI	Да	Порядковый номер сегмента
            in1.Id = "1";

            // IN1.2	CWE	Да	Идентификатор плана страхования
            in1.PlanId = new PlanId {
                Id = "ОМС", Oid = "1.2.643.2.40.5.100.72"
            };

            // IN1.3	CX	Да	Идентификатор организации
            in1.CompanyId = new CompanyId {
                Id = smo.Ogrn, CompanyIdType = "NII"
            };

            // IN1.4	XON	Нет	Наименование организации
            in1.CompanyName = new CompanyName {
                Name = smo.FullName
            };

            // IN1.5	XAD	Усл	Адрес СМО
            // IN1.6	XPN	Усл	Контактное лицо в СМО
            // IN1.7	XTN	Усл	Контактные телефоны СМО

            // IN1.12	DT	Да	Дата начала действия страховки
            in1.DateBeginInsurence = statement.DateFiling.HasValue
                                 ? Hl7Helper.FormatDate(statement.DateFiling.Value)
                                 : string.Empty;

            // IN1.13	DT	Да	Дата окончания действия страховки
            in1.DateEndInsurence = polisEndDate;

            // IN1.15	IS	Да	Код территории страхования
            in1.CodeOfRegion = smo.Parent.Okato;

            // IN1.16	XPN	Да	Фамилия, имя, отчество
            in1.FioList = new List <Fio>
            {
                new Fio(
                    new Surname(personData.FirstName),
                    personData.LastName,
                    personData.MiddleName,
                    "L")
            };

            // IN1.18	DTM	Да	Дата рождения
            in1.BirthDay = personData.Birthday.HasValue ? Hl7Helper.FormatDate(personData.Birthday.Value) : null;

            var adr  = statement.Address;
            var adr2 = statement.Address2 ?? adr;

            in1.AddressList = new List <Address>
            {
                adr.IsHomeless.HasValue&& adr.IsHomeless.Value
                            ? new Address {
                    AddressType = "L"
                }
                            : new Address
                {
                    Region      = tfoms.Okato,
                    Country     = "RUS",
                    AddressType = "L",
                }
            };

            if (!(adr.IsHomeless.HasValue && adr.IsHomeless.Value))
            {
                in1.AddressList.Add(new Address {
                    Region = tfoms.Okato, Country = "RUS", AddressType = "H",
                });
            }

            // IN1.35	IS	Нет	Тип страховки
            in1.InsuranceType = insurance.PolisType != null ? insurance.PolisType.Code : string.Empty;

            // IN1.36	ST	Да	Номер страховки
            in1.InsuranceSerNum = insurance.SeriesNumber;

            // IN1.42
            in1.Employment = new Employment {
                employment = CategoryPerson.IsWorking(personData.Category.Id) ? "1" : "0"
            };

            // IN1.43	IS	Усл	Пол
            in1.Sex = personData.Gender.Code;

            var documentManager = ObjectFactory.GetInstance <IDocumentManager>();

            // IN1.49	CX	Да	Список идентификаторов
            in1.IdentificatorsList = new List <Identificators>();

            in1.IdentificatorsList.Add(
                new Identificators
            {
                identificator     = documentUdl.SeriesNumber,
                identificatorType = documentUdl.DocumentType.Code,
                identificatorFrom = Hl7Helper.FormatDate(documentUdl.DateIssue),
                identificatorTo   =
                    documentUdl.DateExp.HasValue
                                       ? Hl7Helper.FormatDate(documentUdl.DateExp.Value)
                                       : null
            });

            // Номер полиса
            if (!string.IsNullOrEmpty(insuredPerson.MainPolisNumber))
            {
                in1.IdentificatorsList.Add(
                    new Identificators
                {
                    identificatorType = "NI",
                    identificator     = insuredPerson.MainPolisNumber
                });
            }

            // СНИЛС
            if (!string.IsNullOrEmpty(personData.Snils))
            {
                in1.IdentificatorsList.Add(new Identificators {
                    identificatorType = "PEN", identificator = personData.Snils
                });
            }

            // IN1.52	ST	Да	Место рождения
            in1.PlaceOfBirth = personData.Birthplace;

            return(in1);
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Формирует список страховок
 /// </summary>
 /// <param name="statementCurrent">
 /// Текущее заявление
 /// </param>
 /// <param name="medicalInsurance">
 /// The medical Insurance.
 /// </param>
 /// <param name="statementPrevios">
 /// The statement Previos.
 /// </param>
 /// <param name="medicalInsurancePrevios">
 /// The medical Insurance Previos.
 /// </param>
 /// <returns>
 /// The <see cref="List{ADT_A01_INSURANCE}"/>.
 /// </returns>
 protected abstract List <ADT_A01_INSURANCE> GetInsuranceList(
     Statement statementCurrent,
     MedicalInsurance medicalInsurance,
     Statement statementPrevios,
     MedicalInsurance medicalInsurancePrevios);
        public ActionResult CreateContract(ContractMedical medical)
        {
            var contract = new Contract
            {
                TotalPrice        = medical.Totalprice,
                UserID            = User.Identity.GetUserId(),
                InsuranceId       = 4,
                MedicalInsurances = new List <MedicalInsurance>()
            };

            foreach (var item in medical.items)
            {
                var medicalinsurace = new MedicalInsurance()
                {
                    InsurancePackageId = System.Int32.Parse(item.InsurancePackageId),
                    ProgrammeId        = System.Int32.Parse(item.Programmeid),
                    Name        = item.Name,
                    ContractId  = contract.Id,
                    Gender      = item.Gender,
                    Address     = item.Address,
                    Quantity    = 1,
                    UnitPrice   = item.unitprice,
                    DateOfBirth = item.DateOfbirth
                };
                contract.MedicalInsurances.Add(medicalinsurace);
                db.Contracts.Add(contract);
            }
            db.SaveChanges();
            var transaction = db.Database.BeginTransaction();

            try
            {
                var    em            = db.Users.Where(x => x.Id == contract.UserID).FirstOrDefault();
                var    e             = db.InsurancePackages.Where(x => x.InsuranceId == contract.InsuranceId).FirstOrDefault();
                var    senderemail   = new MailAddress("*****@*****.**", "Insurance Company");
                var    receivermail  = new MailAddress(em.Email, "Insurance Company");
                var    passwordemail = "vtacl123";
                var    subject       = "Notification Order";
                string body          = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
                body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">" +
                        "<style>table, td, th {border: 1px solid black; font-size: 15px}</style>" +
                        "<style> p {font-size: 18px}</style>"
                ;
                body += "<p>" + "Your order information is : " + "</p>"
                        + "<p>" + "Name Insurance : MedicalInsurance</p>"
                        + "<p>" + "Total Price :" + contract.TotalPrice + "$" + "</p>" +
                        "<br>";
                body += "</HEAD><BODY>" +
                        "<tr>" +
                        "<th>Package Insurance</th>" +
                        "<th>Name</th>" +
                        "<th>Gender</th>" +
                        "<th>Address</th>" +
                        "<th>Quantity</th>" +
                        "<th>UnitPrice</th>" +
                        "<th>DateOfBirth</th>" +
                        "</tr>";
                foreach (var data in medical.items)
                {
                    body +=
                        "<tr>" +
                        "<td>" + e.Name + "</td>" +
                        "<td>" + data.Name + "</td>" +
                        "<td>" + data.Gender + "</td>" +
                        "<td>" + data.Address + "</td>" +
                        "<td>" + 1 + "</td>" +
                        "<td>" + data.unitprice + "</td>" +
                        "<td>" + data.DateOfbirth + "</td>" +
                        "</tr>";
                }
                var smtp = new SmtpClient
                {
                    Host                  = "smtp.gmail.com",
                    Port                  = 587,
                    DeliveryMethod        = SmtpDeliveryMethod.Network,
                    EnableSsl             = true,
                    UseDefaultCredentials = false,
                    Credentials           = new NetworkCredential(senderemail.Address, passwordemail)
                };
                using (var mess = new MailMessage(senderemail, receivermail)
                {
                    IsBodyHtml = true,
                    Subject = subject,
                    Body = body
                }
                       )
                {
                    smtp.Send(mess);
                };
                transaction.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                transaction.Rollback();
            }
            return(Json(new { status = 201 }));
        }
Ejemplo n.º 19
0
        /// <summary>
        /// The write prz buff.
        /// </summary>
        /// <param name="st">
        /// The st.
        /// </param>
        /// <param name="log">
        /// The log.
        /// </param>
        /// <param name="sessionAtl">
        /// The session atl.
        /// </param>
        /// <param name="medicalInsurance">
        /// The medical insurance.
        /// </param>
        /// <param name="op">
        /// The op.
        /// </param>
        /// <returns>
        /// The <see cref="Przbuf"/>.
        /// </returns>
        private Przbuf WritePrzBuff(
            StatementMaximum st,
            Przlog log,
            ISession sessionAtl,
            MedicalInsurance medicalInsurance,
            string op)
        {
            var contentManager    = ObjectFactory.GetInstance <IContentManager>();
            var personData        = st.InsuredPersonData;
            var documentUdl       = st.DocumentUdl;
            var address           = st.Address;
            var address2          = st.Address2 ?? st.Address;
            var documentResidency = st.ResidencyDocument;

            ////if (documentResidency == null && (st.InsuredPersonData.Citizenship == null || st.InsuredPersonData.Citizenship.Id != Country.RUS))
            ////{
            ////  documentResidency = documentUdl;
            ////}
            var contactInfo = st.ContactInfo;
            var pvp         = st.PointDistributionPolicy;
            var smo         = pvp.Parent;

            var foto               = contentManager.GetFoto(st.InsuredPersonData.Id);
            var signature          = contentManager.GetSignature(st.InsuredPersonData.Id);
            var okatoRn            = GetOkatoRn(address, sessionAtl) ?? string.Empty;
            var okatoPrn           = GetOkatoRn(address2, sessionAtl) ?? string.Empty;
            var regulatoryAddress  = address.Regulatory();
            var regulatoryAddress2 = address2.Regulatory();
            var przBuff            = new Przbuf
            {
                Fam = personData.LastName,
                Im  = personData.FirstName,
                Ot  = personData.MiddleName,
                W   = int.Parse(personData.Gender.Code),
                Dr  = personData.Birthday,
                Dra = personData.IsIncorrectDate,
                Drt = personData.BirthdayType.HasValue ? personData.BirthdayType.Value : 1,
                Mr  = personData.Birthplace,
                Ss  =
                    !string.IsNullOrEmpty(personData.Snils)
                          ? SnilsChecker.SsToLong(personData.Snils)
                          : null,
                Cn        = personData.Citizenship != null ? personData.Citizenship.Code : "Б/Г",
                Kateg     = int.Parse(personData.Category.Code),
                BirthOksm = personData.OldCountry != null ? personData.OldCountry.Code : null,

                // Документ УДЛ
                Doctp  = documentUdl.DocumentType.Code,
                Docs   = documentUdl.Series,
                Docn   = documentUdl.Number,
                Docdt  = documentUdl.DateIssue,
                Docend = documentUdl.DateExp,
                Docorg = documentUdl.IssuingAuthority,

                // Адрес регистрации
                Subj =
                    !string.IsNullOrEmpty(address.Okato)
                          ? address.Okato.Substring(0, Math.Min(2, address.Okato.Length)) + "000"
                          : okatoRn.Substring(0, Math.Min(2, okatoRn.Length)) + "000",
                Rn     = okatoRn,
                Indx   = address.Postcode,
                Rnname = address.Area,
                City   = address.City,
                Np     =
                    !string.IsNullOrEmpty(address.Town)
                          ? address.Town
                          : !string.IsNullOrEmpty(address.City) ? address.City : address.Subject,
                Ul  = address.Street,
                Dom = address.House,
                Kor = address.Housing,
                Kv  =
                    address.Room.HasValue
                          ? address.Room.Value.ToString(CultureInfo.InvariantCulture)
                          : string.Empty,
                Dmj    = address.DateRegistration,
                Kladrg = regulatoryAddress != null ? regulatoryAddress.Code : null,

                // Адрес проживания
                Psubj =
                    !string.IsNullOrEmpty(address2.Okato)
                          ? address2.Okato.Substring(0, Math.Min(2, address2.Okato.Length)) + "000"
                          : okatoPrn.Substring(0, Math.Min(2, okatoPrn.Length)) + "000",
                Prn     = okatoPrn,
                Pindx   = address2.Postcode,
                Prnname = address2.Area,
                Pcity   = address2.City,
                Pnp     =
                    !string.IsNullOrEmpty(address2.Town)
                          ? address2.Town
                          : !string.IsNullOrEmpty(address2.City) ? address2.City : address2.Subject,
                Pul  = address2.Street,
                Pdom = address2.House,
                Pkor = address2.Housing,
                Pkv  =
                    address2.Room.HasValue
                          ? address2.Room.Value.ToString(CultureInfo.InvariantCulture)
                          : string.Empty,
                Pdmj   = address2.DateRegistration,
                Kladrp = regulatoryAddress2 != null ? regulatoryAddress2.Code : null,

                // Документ регистрации

                // Контактная информация
                Email    = contactInfo.Email,
                Phone    = contactInfo.HomePhone,
                Enp      = medicalInsurance.Enp ?? st.NumberPolicy,
                Q        = smo.Code,
                Qogrn    = smo.Ogrn,
                Prz      = st.PointDistributionPolicy.Code,
                Dviz     = st.DateFiling,
                Meth     = int.Parse(st.ModeFiling.Code),
                Sp       = personData.Category.Code,
                Petition = st.HasPetition,
                Photo    = foto ?? string.Empty,
                Signat   = signature ?? string.Empty,
                PRZLOG   = log,
                Op       = op,
                Opdoc    = GetPolisType(medicalInsurance.PolisType.Id),
                Spol     =
                    !string.IsNullOrEmpty(medicalInsurance.PolisSeria)
                          ? medicalInsurance.PolisSeria
                          : null,
                Npol  = medicalInsurance.PolisNumber,
                Dbeg  = medicalInsurance.DateFrom,
                Dend  = medicalInsurance.DateTo,
                Dstop = medicalInsurance.DateStop
            };

            var repr = st.Representative;

            if (repr != null)
            {
                przBuff.Fiopr   = string.Format("{0} {1} {2}", repr.FirstName, repr.LastName, repr.MiddleName).Crop(60);
                przBuff.Contact = repr.HomePhone;
                przBuff.Zphone  = repr.WorkPhone;
                przBuff.Zt      = repr.RelationType.Id - 317;
                przBuff.Zfam    = repr.LastName;
                przBuff.Zim     = repr.FirstName;
                przBuff.Zot     = repr.MiddleName;
                if (repr.Document != null && repr.Document.DocumentType != null)
                {
                    var doc = repr.Document;
                    przBuff.Zdoctp  = doc.DocumentType.Code;
                    przBuff.Zdocs   = doc.Series;
                    przBuff.Zdocn   = doc.Number;
                    przBuff.Zdocdt  = doc.DateIssue;
                    przBuff.Zdocorg = doc.IssuingAuthority;
                    przBuff.Zdr     = doc.DateExp;
                }
            }

            if (address.IsHomeless.HasValue && address.IsHomeless.Value)
            {
                przBuff.Bomj  = address.IsHomeless;
                przBuff.Subj  = smo.Parent.Okato.Substring(0, Math.Min(2, smo.Parent.Okato.Length)) + "000";
                przBuff.Psubj = smo.Parent.Okato.Substring(0, Math.Min(2, smo.Parent.Okato.Length)) + "000";
            }

            if (st.PreviousStatement != null)
            {
                if (st.PreviousStatement.InsuredPersonData != null)
                {
                    var oldpersonData = st.PreviousStatement.InsuredPersonData;
                    przBuff.Oldfam = oldpersonData.LastName;
                    przBuff.Oldim  = oldpersonData.FirstName;
                    przBuff.Oldot  = oldpersonData.MiddleName;
                    przBuff.Oldw   = int.Parse(oldpersonData.Gender.Code);
                    przBuff.Olddr  = oldpersonData.Birthday;

                    przBuff.Oldmr = oldpersonData.Birthplace;
                    przBuff.Oldss = !string.IsNullOrEmpty(oldpersonData.Snils) ? SnilsChecker.SsToLong(oldpersonData.Snils) : null;
                }

                // Документ УДЛ
                if (st.PreviousStatement.DocumentUdl != null)
                {
                    var olddoc = st.PreviousStatement.DocumentUdl;
                    przBuff.Olddoctp  = olddoc.DocumentType.Code;
                    przBuff.Olddocs   = olddoc.Series;
                    przBuff.Olddocn   = olddoc.Number;
                    przBuff.Olddocdt  = olddoc.DateIssue;
                    przBuff.Olddocend = olddoc.DateExp;
                    przBuff.Olddocorg = olddoc.IssuingAuthority;
                }

                // Документ УДЛ
                if (st.PreviousStatement.ResidencyDocument != null &&
                    st.PreviousStatement.ResidencyDocument.DocumentType != null)
                {
                    var olddoc = st.PreviousStatement.ResidencyDocument;
                    przBuff.Oldrdoctp  = olddoc.DocumentType.Code;
                    przBuff.Oldrdocs   = olddoc.Series;
                    przBuff.Oldrdocn   = olddoc.Number;
                    przBuff.Oldrdocdt  = olddoc.DateIssue;
                    przBuff.Oldrdocend = olddoc.DateExp;
                    przBuff.Oldrdocorg = olddoc.IssuingAuthority;
                }
            }

            if (przBuff.Dend == new DateTime(2200, 1, 1))
            {
                przBuff.Dend = null;
            }

            if (przBuff.Dstop == new DateTime(2200, 1, 1))
            {
                przBuff.Dstop = null;
            }

            if (st.FormManufacturing != null)
            {
                przBuff.Polvid = GetPolisVid(st.FormManufacturing.Id);
            }

            if (documentResidency != null && documentResidency.DocumentType != null)
            {
                // Документ на право проживания в РФ
                przBuff.Rdoctp  = documentResidency.DocumentType.Code;
                przBuff.Rdocs   = documentResidency.Series;
                przBuff.Rdocn   = documentResidency.Number;
                przBuff.Rdocdt  = documentResidency.DateIssue;
                przBuff.Rdocorg = documentResidency.IssuingAuthority;
                przBuff.Rdocend = documentResidency.DateExp;
            }

            // Помечаем заявление созданные через нашу систему
            // Будет использовать впоследствии при импорте из СРЗ
            przBuff.Num = "-1";

            // Помечаем адреса структурированный/не структурированный
            var args = address.IsNotStructureAddress.HasValue
                   ? Convert.ToInt16(address.IsNotStructureAddress.Value)
                       .ToString(CultureInfo.InvariantCulture)
                   : "0";
            var s = address2.IsNotStructureAddress.HasValue
                ? Convert.ToInt16(address2.IsNotStructureAddress.Value)
                    .ToString(CultureInfo.InvariantCulture)
                : "0";

            przBuff.Zaddr = string.Format("{0}{1}", args, s);

            sessionAtl.Save(przBuff);

            log.Reccount++;
            logger.Trace(przBuff);
            return(przBuff);
        }
Ejemplo n.º 20
0
 /// <summary>
 /// Формирует сообщение
 /// </summary>
 /// <param name="messageId"></param>
 /// <param name="statementCurrent">
 ///   Текущее заявление.
 /// </param>
 /// <param name="medicalInsuranceCurrent">
 ///   The medical Insurance Current.
 /// </param>
 /// <param name="statementPrevios">
 ///   The statement Previos.
 /// </param>
 /// <param name="medicalInsurancePrevios">
 ///   The medical Insurance Previos.
 /// </param>
 /// <returns>
 /// The <see cref="BaseMessageTemplate"/>.
 /// </returns>
 public abstract BaseMessageTemplate GetMessageTemplate(Guid messageId, Statement statementCurrent, MedicalInsurance medicalInsuranceCurrent, Statement statementPrevios = null, MedicalInsurance medicalInsurancePrevios = null);
Ejemplo n.º 21
0
        /// <summary>
        /// Формирует сообщение
        /// </summary>
        /// <param name="messageId">
        ///   The message Id.
        /// </param>
        /// <param name="statementCurrent">
        ///   Текущее заявление.
        /// </param>
        /// <param name="medicalInsuranceCurrent">
        ///   The medical Insurance Current.
        /// </param>
        /// <param name="statementPrevios">
        ///   The statement Previos.
        /// </param>
        /// <param name="medicalInsurancePrevios">
        ///   The medical Insurance Previos.
        /// </param>
        /// <returns>
        /// The <see cref="BaseMessageTemplate"/>.
        /// </returns>
        public override BaseMessageTemplate GetMessageTemplate(Guid messageId, Statement statementCurrent, MedicalInsurance medicalInsuranceCurrent, Statement statementPrevios = null, MedicalInsurance medicalInsurancePrevios = null)
        {
            var adt1 = new ADT_A01();

            adt1.Msh           = GetMsh(messageId);
            adt1.Evn           = GetEvn(medicalInsuranceCurrent.StateDateFrom);
            adt1.Pv1           = GetPv1();
            adt1.Pid           = GetPid(statementCurrent);
            adt1.InsuranceList = GetInsuranceList(
                statementCurrent,
                medicalInsuranceCurrent,
                statementPrevios,
                medicalInsurancePrevios);

            adt1.Zvn = GetZvn();
            return(adt1);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Дубликаты по критерию для разбивки постранично
        /// </summary>
        /// <param name="criteria">
        /// The criteria.
        /// </param>
        /// <returns>
        /// The
        ///   <see>
        ///     <cref>SearchResult</cref>
        ///   </see>
        ///   .
        /// </returns>
        public SearchResult <Twin> GetTwins(SearchTwinCriteria criteria)
        {
            var              session           = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();
            var              currentUser       = ObjectFactory.GetInstance <ISecurityProvider>().GetCurrentUser();
            Concept          twinType          = null;
            InsuredPerson    insuredPerson1    = null;
            MedicalInsurance medicalInsurance1 = null;
            Organisation     smo1 = null;

            InsuredPerson    insuredPerson2    = null;
            MedicalInsurance medicalInsurance2 = null;
            Organisation     smo2 = null;

            var query =
                session.QueryOver <Twin>()
                .JoinAlias(x => x.TwinType, () => twinType)
                .Where(x => twinType.Id == TypeTwin.TypeTwin2);

            if (currentUser.HasTf())
            {
                var tf = currentUser.GetTf();
                query.JoinAlias(x => x.FirstInsuredPerson, () => insuredPerson1)
                .JoinAlias(() => insuredPerson1.MedicalInsurances, () => medicalInsurance1)
                .JoinAlias(() => medicalInsurance1.Smo, () => smo1)
                .And(() => medicalInsurance1.IsActive)
                .And(() => smo1.Parent.Id == tf.Id)
                .JoinAlias(x => x.SecondInsuredPerson, () => insuredPerson2)
                .JoinAlias(() => insuredPerson2.MedicalInsurances, () => medicalInsurance2)
                .JoinAlias(() => medicalInsurance2.Smo, () => smo2)
                .And(() => medicalInsurance2.IsActive)
                .And(() => smo2.Parent.Id == tf.Id);
            }

            TwinsKey      twinKeys = null;
            SearchKeyType skt      = null;

            switch (criteria.KeyType)
            {
            case TwinKeyType.All:
                break;

            case TwinKeyType.Standard:
                query.JoinAlias(t => t.TwinsKeys, () => twinKeys)
                .JoinAlias(t => twinKeys.KeyType, () => skt)
                .WhereRestrictionOn(t => skt.Tfoms)
                .IsNull();
                break;

            case TwinKeyType.NonStandard:
                query.JoinAlias(t => t.TwinsKeys, () => twinKeys).Where(t => twinKeys.KeyType.Id == criteria.KeyId);
                break;
            }

            var count        = query.RowCount();
            var searchResult = new SearchResult <Twin> {
                Skip = criteria.Skip, Total = count
            };

            query.Skip(criteria.Skip).Take(criteria.Take);
            searchResult.Rows = query.List();
            return(searchResult);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Разделение
        /// </summary>
        /// <param name="personId">
        /// The person Id.
        /// </param>
        /// <param name="statementsToSeparate">
        /// The statements To Separate.
        /// </param>
        /// <param name="copyDeadInfo">
        /// The copy Dead Info.
        /// </param>
        /// <param name="status">
        /// The status.
        /// </param>
        public void Separate(Guid personId, IList <Statement> statementsToSeparate, bool copyDeadInfo, int status)
        {
            var session                    = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession();
            var conceptManager             = ObjectFactory.GetInstance <IConceptCacheManager>();
            var currentUser                = ObjectFactory.GetInstance <ISecurityProvider>().GetCurrentUser();
            var personManager              = ObjectFactory.GetInstance <IInsuredPersonManager>();
            var statementManager           = ObjectFactory.GetInstance <IStatementManager>();
            var twinManager                = ObjectFactory.GetInstance <ITwinManager>();
            var numberPolicyCounterManager = ObjectFactory.GetInstance <INumberPolicyCounterManager>();

            var transaction = session.BeginTransaction();

            try
            {
                var person = personManager.GetById(personId);
                var statementToSeparateIdList = statementsToSeparate.Select(x => x.Id).ToList();

                var searchKeys =
                    session.QueryOver <SearchKey>().WhereRestrictionOn(x => x.Statement.Id).IsIn(statementToSeparateIdList).List();

                // Создаем пипла
                var personNew = new InsuredPerson {
                    Status = conceptManager.GetById(status)
                };

                // Определяем ЕНП, последний, заполненный
                var enp =
                    statementsToSeparate.Where(x => !string.IsNullOrEmpty(x.NumberPolicy))
                    .OrderByDescending(x => x.DateFiling)
                    .Select(x => x.NumberPolicy)
                    .FirstOrDefault();
                if (enp == null)
                {
                    var statement = statementsToSeparate.OrderByDescending(x => x.DateFiling).FirstOrDefault();
                    if (statement != null)
                    {
                        var personData = statement.InsuredPersonData;

                        if (personData.Birthday != null)
                        {
                            enp = numberPolicyCounterManager.GetNextEnpNumber(
                                currentUser.GetTf().Id,
                                personData.Gender.Id,
                                personData.Birthday.Value);
                        }
                    }
                }

                personNew.MainPolisNumber = enp;

                // создаём новую персону и делаем копию инфы о смерти
                if (copyDeadInfo && person.DeadInfo != null)
                {
                    var resultDeadInfo = new DeadInfo
                    {
                        ActRecordDate   = person.DeadInfo.ActRecordDate,
                        ActRecordNumber = person.DeadInfo.ActRecordNumber,
                        DateDead        = person.DeadInfo.DateDead
                    };
                    session.Save(resultDeadInfo);
                    personNew.DeadInfo = resultDeadInfo;
                }

                session.Save(personNew);

                // создаём копию истории и назначаем новой персоне
                var historyManager = ObjectFactory.GetInstance <IEmploymentHistoryManager>();
                var histories      = historyManager.GetByInsuredPersonId(person.Id);
                foreach (var history in histories)
                {
                    session.Evict(history);
                    history.Id            = Guid.Empty;
                    history.InsuredPerson = personNew;
                    session.Save(history);
                }

                // переставляем ссылки в периодах страхования
                MedicalInsurance medicalInsurance = null;

                var periodInsurances =
                    session.QueryOver <MedicalInsurance>()
                    .WhereRestrictionOn(x => medicalInsurance.Statement.Id)
                    .IsIn(statementToSeparateIdList)
                    .List();
                foreach (var periodInsurance in periodInsurances)
                {
                    periodInsurance.InsuredPerson = personNew;
                    session.Update(periodInsurance);
                }

                // переставляем ссылки в ключах поиска
                foreach (var key in searchKeys)
                {
                    key.InsuredPerson = personNew;
                    session.SaveOrUpdate(key);
                }

                // В заявлениях на разделение переставляем ссылки на новую персону
                foreach (var statement in statementsToSeparate)
                {
                    statement.InsuredPerson = personNew;
                    session.SaveOrUpdate(statement);
                }

                // Перестраиваем заявления
                statementManager.ApplyActive(person);
                statementManager.ApplyActive(personNew);

                // Отменять обработку дубликата не нужно!!!
                // Ищем все дуликаты с исходным пиплом и пораждаем новые дубликаты этих же дубликатов, но уже с новым пиплом
                var twins = twinManager.GetBy(x => x.FirstInsuredPerson.Id == personId);
                foreach (var twin in twins)
                {
                    session.Evict(twin);
                    twin.Id = Guid.Empty;
                    twin.FirstInsuredPerson = personNew;
                    session.Save(twin);
                }

                twins = twinManager.GetBy(x => x.SecondInsuredPerson.Id == personId);
                foreach (var twin in twins)
                {
                    session.Evict(twin);
                    twin.Id = Guid.Empty;
                    twin.SecondInsuredPerson = personNew;
                    session.Save(twin);
                }

                // А теперь помечаем пару как обработанный дубликат
                var twin1 = new Twin
                {
                    FirstInsuredPerson  = person,
                    SecondInsuredPerson = personNew,
                    TwinType            = conceptManager.GetById(TypeTwin.TypeTwin3)
                };
                session.Save(twin1);

                session.Flush();
                transaction.Commit();
            }
            catch
            {
                transaction.Dispose();
                throw;
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// The page_ load.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        protected void Page_Load(object sender, EventArgs e)
        {
            statementService = ObjectFactory.GetInstance <IStatementService>();
            CheckIsRightToEdit();

            if (!IsPostBack)
            {
                return;
            }

            if (CurrentStatement.FormManufacturing == null)
            {
                return;
            }

            // Пытаемся получить редактируемое заявление, и проверить наличие уже имеющегося полиса
            ////var _statementService = ObjectFactory.GetInstance<IStatementService>();
            ////var tempStatementId = Guid.Empty;

            // Guid.TryParse(StatementId, out tempStatementId);
            MedicalInsurance polis = null;

            if (CurrentStatement.Id != Guid.Empty /* tempStatementId != null*/)
            {
                // var statement = _statementService.GetStatement(tempStatementId);
                if (CurrentStatement != null && CurrentStatement.MedicalInsurances != null)
                {
                    polis = CurrentStatement.MedicalInsurances.FirstOrDefault(x => x.PolisType.Id != PolisType.В);
                }
            }

            // В случае если полис заказан в составе УЭК, то пользователь может осуществить только операцию
            // выдачи бумажного полиса
            string polisType;

            if (CurrentStatement.FormManufacturing.Id == PolisType.К && chbPolicyIsIssued.Checked && polis == null)
            {
                ddlPolicyType.SelectedValue = polisType = PolisType.П.ToString(CultureInfo.InvariantCulture);
            }
            else
            {
                if (polis != null)
                {
                    ddlPolicyType.SelectedValue = polisType = polis.PolisType.Id.ToString(CultureInfo.InvariantCulture);
                }
                else
                {
                    ddlPolicyType.SelectedValue =
                        polisType = CurrentStatement.FormManufacturing.Id.ToString(CultureInfo.InvariantCulture);
                }
            }

            hfRequestedPolicyType.Value = polisType;

            // Дата окончания действия полиса
            tbPolicyDateEnd.Text = PolisEndDate.ToShortDateString();

            if (IsPostBack)
            {
                var st = CurrentStatement;
                MoveDataFromGui2Object(ref st);
            }
        }
Ejemplo n.º 25
0
        /// <summary>
        /// The get insurance previos.
        /// </summary>
        /// <param name="statement">
        /// The statement current.
        /// </param>
        /// <param name="medicalInsurance">
        /// The medical insurance.
        /// </param>
        /// <returns>
        /// The <see cref="ADT_A01_INSURANCE"/>.
        /// </returns>
        private ADT_A01_INSURANCE GetInsurancePrevios(Statement statement, MedicalInsurance medicalInsurance)
        {
            var in1 = new IN1();

            // IN1.1	SI	Да	Порядковый номер сегмента
            in1.Id = "1";

            // IN1.2	CWE	Да	Идентификатор плана страхования
            in1.PlanId = new PlanId();

            // IN1.3	CX	Да	Идентификатор организации
            in1.CompanyId = new CompanyId {
                Id = medicalInsurance.Smo.Ogrn, CompanyIdType = "NII"
            };

            // IN1.4	XON	Нет	Наименование организации
            in1.CompanyName = new CompanyName {
                Name = medicalInsurance.Smo.FullName
            };

            // IN1.12	DT	Да	Дата начала действия страховки
            in1.DateBeginInsurence = Hl7Helper.FormatDate(medicalInsurance.DateFrom);

            // IN1.13	DT	Да	Дата окончания действия страховки
            in1.DateEndInsurence = medicalInsurance.DateTo.Year == 2200 ? null : Hl7Helper.FormatDate(medicalInsurance.DateTo);

            // IN1.15	IS	Да	Код территории страхования
            in1.CodeOfRegion = medicalInsurance.Smo.Parent.Okato;

            // IN1.35	IS	Нет	Тип страховки
            in1.InsuranceType = medicalInsurance.PolisType != null ? medicalInsurance.PolisType.Code : string.Empty;

            // IN1.36	ST	Да	Номер страховки
            in1.InsuranceSerNum = medicalInsurance.SeriesNumber;

            var personData = statement.InsuredPersonData;

            // IN1.16	XPN	Да	Фамилия, имя, отчество
            in1.FioList = new List <Fio>
            {
                new Fio(
                    new Surname(personData.FirstName),
                    personData.LastName,
                    personData.MiddleName,
                    "L")
            };

            // IN1.18	DTM	Да	Дата рождения
            in1.BirthDay = personData.Birthday.HasValue ? Hl7Helper.FormatDate(personData.Birthday.Value) : null;

            var adr  = statement.Address;
            var adr2 = statement.Address2 ?? adr;

            in1.AddressList = new List <Address>
            {
                adr.IsHomeless.HasValue&& adr.IsHomeless.Value
                            ? new Address {
                    AddressType = "L"
                }
                            : new Address {
                    Region = adr.Okato, Country = "RUS", AddressType = "L",
                }
            };

            if (!(adr.IsHomeless.HasValue && adr.IsHomeless.Value))
            {
                in1.AddressList.Add(new Address {
                    Region = adr2.Okato, Country = "RUS", AddressType = "H",
                });
            }

            // IN1.42
            in1.Employment = new Employment {
                employment = CategoryPerson.IsWorking(personData.Category.Id) ? "1" : "0"
            };

            // IN1.43	IS	Усл	Пол
            in1.Sex = personData.Gender.Code;

            // IN1.49	CX	Да	Список идентификаторов
            in1.IdentificatorsList = new List <Identificators>();

            var document = statement.DocumentUdl;

            in1.IdentificatorsList.Add(
                new Identificators
            {
                identificator     = document.SeriesNumber,
                identificatorType = document.DocumentType.Code,
                identificatorFrom = Hl7Helper.FormatDate(document.DateIssue),
                identificatorTo   =
                    document.DateExp.HasValue
                                       ? Hl7Helper.FormatDate(document.DateExp.Value)
                                       : null
            });

            document = statement.DocumentRegistration;

            if (document != null)
            {
                in1.IdentificatorsList.Add(
                    new Identificators
                {
                    identificator     = document.SeriesNumber,
                    identificatorType = document.DocumentType.Code,
                    identificatorFrom = Hl7Helper.FormatDate(document.DateIssue),
                    identificatorTo   =
                        document.DateExp.HasValue
                                         ? Hl7Helper.FormatDate(document.DateExp.Value)
                                         : null
                });
            }

            // Номер полиса
            if (!string.IsNullOrEmpty(statement.InsuredPerson.MainPolisNumber))
            {
                in1.IdentificatorsList.Add(
                    new Identificators
                {
                    identificatorType = "NI",
                    identificator     = statement.InsuredPerson.MainPolisNumber
                });
            }

            // СНИЛС
            if (!string.IsNullOrEmpty(personData.Snils))
            {
                in1.IdentificatorsList.Add(new Identificators {
                    identificatorType = "PEN", identificator = personData.Snils
                });
            }

            // IN1.52	ST	Да	Место рождения
            in1.PlaceOfBirth = personData.Birthplace;

            return(new ADT_A01_INSURANCE {
                In1 = in1
            });
        }