/// <summary> /// The check. /// </summary> /// <param name="statement"> /// The statement. /// </param> public override void CheckObject(Statement statement) { if (statement == null) { throw new ArgumentNullException("statement"); } if (statement.NotCheckPolisNumber.HasValue && statement.NotCheckPolisNumber.Value) { return; } // Если нужно выдать новый полис и полис выдан, то обязательно надо заполнить номер полиса ////if (statement.AbsentPrevPolicy.HasValue && statement.AbsentPrevPolicy.Value && statement.PolicyIsIssued.HasValue //// && statement.PolicyIsIssued.Value && string.IsNullOrEmpty(statement.NumberPolicy)) ////{ //// throw new FaultEnpException(); ////} // Проверка соответствия полу, дате рождения и контрольному разряду if (!string.IsNullOrEmpty(statement.NumberPolicy)) { if (!EnpChecker.CheckIdentifier(statement.NumberPolicy)) { throw new FaultEnpException(); } if (statement.InsuredPersonData != null && statement.InsuredPersonData.Birthday != null && statement.InsuredPersonData.Gender != null) { if ( !EnpChecker.CheckBirthdayAndGender( statement.NumberPolicy, statement.InsuredPersonData.Birthday.Value, statement.InsuredPersonData.Gender.Id == Sex.Sex1)) { throw new FaultEnpBirthdayAndGenderException(); } } } ////// Если новый полис выдавать не требуется, то ЕНП должен быть известен, он на полисе, который предъявили ////if ((!statement.AbsentPrevPolicy.HasValue || statement.AbsentPrevPolicy == false) //// && string.IsNullOrEmpty(statement.NumberPolicy)) ////{ //// throw new FaultEnpAbsentPrevPolicyException(); ////} }
/// <summary> /// The check. /// </summary> /// <param name="statement"> /// The statement. /// </param> public override void CheckObject(Statement statement) { if (statement == null) { throw new ArgumentNullException("statement"); } // Проверка соответствия полу, дате рождения и контрольному разряду var policy = statement.MedicalInsurances.LastOrDefault(x => x.PolisType.Id != PolisType.В); if (!(statement.PolicyIsIssued.HasValue && statement.PolicyIsIssued.Value)) { return; } if (policy == null) { throw new FaultNewEnpException(); } if (!string.IsNullOrEmpty(policy.Enp)) { if (!EnpChecker.CheckIdentifier(policy.Enp)) { throw new FaultEnpException(); } if (statement.InsuredPersonData != null && statement.InsuredPersonData.Birthday != null && statement.InsuredPersonData.Gender != null) { if ( !EnpChecker.CheckBirthdayAndGender( policy.Enp, statement.InsuredPersonData.Birthday.Value, statement.InsuredPersonData.Gender.Id == Sex.Sex1)) { throw new FaultNewEnpBirthdayAndGenderException(); } } } else { throw new FaultEnpException(); } }
/// <summary> /// The recalculate number policy counter. /// </summary> /// <param name="numberPolicy"> /// The number policy. /// </param> public void RecalculateNumberPolicyCounter(string numberPolicy) { if (string.IsNullOrEmpty(numberPolicy) || numberPolicy.Length != 16) { return; } var session = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession(); // Получаем ТФОМС по коду, входящему в ЕНП var facet = EnpChecker.GetTfFacet(numberPolicy); // ищем запись var numberPolicyCounter = GetById(facet) ?? new NumberPolicyCounter { Id = facet, CurrentNumber = 1 }; // назначем новый номер, либо сохраняем старый var number = int.Parse(numberPolicy.Substring(10, 5)) + 1; numberPolicyCounter.CurrentNumber = Math.Max(numberPolicyCounter.CurrentNumber, number); session.SaveOrUpdate(numberPolicyCounter); }
/// <summary> /// The get next enp number facets. /// </summary> /// <param name="tfomsId"> /// The tfoms id. /// </param> /// <param name="genderId"> /// The gender id. /// </param> /// <param name="birthday"> /// The birthday. /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> public string GetNextEnpNumber(Guid tfomsId, int genderId, DateTime birthday) { var tfoms = ObjectFactory.GetInstance <IOrganisationCacheManager>().GetBy(x => x.Id == tfomsId).FirstOrDefault(); if (tfoms == null || tfoms.Code.Length != 2) { throw new Exception("Не найден ТФОМС для расчета фасеты ЕНП"); } var facet = tfoms.Code + EnpChecker.GetFacet(birthday, genderId == Sex.Sex1); NumberPolicyCounter numberPolicyCounter; // получение значения счетчика var session = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession(); numberPolicyCounter = GetById(facet); var number = "1"; if (numberPolicyCounter == null) { numberPolicyCounter = new NumberPolicyCounter { Id = facet, CurrentNumber = 2 }; } else { number = numberPolicyCounter.CurrentNumber.ToString(CultureInfo.InvariantCulture); numberPolicyCounter.CurrentNumber++; } // сохранение session.SaveOrUpdate(numberPolicyCounter); var enp = string.Format("{0}{1}", facet, number.PadLeft(5, '0')); return(EnpChecker.AppendCheckSum(enp)); }
/// <summary> /// Переносит данные из объекта в элементы на форме /// </summary> /// <param name="statement"> /// The statement. /// </param> public override void MoveDataFromObject2GUI(Statement statement) { fStatus.Value = statement.Status != null ? statement.Status.Id.ToString(CultureInfo.InvariantCulture) : StatusStatement.New.ToString(CultureInfo.InvariantCulture); tbDateFiling.Text = statement.DateFiling.HasValue ? ((DateTime)statement.DateFiling).ToShortDateString() : DateTime.Today.ToShortDateString(); // Причина подачи заявления if (statement.CauseFiling != null) { // если заявление импортировано, то причины подачи заявления не будет и надо его добавить в общий список комбика, но при этом комбик должен быть недоступен для смены значения if (statement.CauseFiling.Id == CauseReinsurance.Initialization) { AddInitializationCauseFiling(); ddlCauseFiling.Enabled = false; } ddlCauseFiling.SelectedValue = statement.CauseFiling.Id.ToString(CultureInfo.InvariantCulture); if (ddlCauseFiling.SelectedValue == CauseReinsurance.Choice.ToString(CultureInfo.InvariantCulture)) { chbNewPolicy.Enabled = false; } } // Способ подачи if (statement.ModeFiling != null) { ddlModeFiling.SelectedValue = statement.ModeFiling.Id.ToString(CultureInfo.InvariantCulture); } // Наличие ходатайства о регистрации в качестве застрахованного лица if (statement.HasPetition != null) { chbHasPetition.Checked = (bool)statement.HasPetition; } // Форма изготовления полиса if (statement.FormManufacturing != null) { ddlPolicyType.SelectedValue = statement.FormManufacturing.Id.ToString(CultureInfo.InvariantCulture); hfPolicyType.Value = ddlPolicyType.SelectedValue; } chbNewPolicy.Checked = statement.AbsentPrevPolicy.HasValue && statement.AbsentPrevPolicy.Value; hfNewPolicy.Value = chbNewPolicy.Checked ? "1" : "0"; // Номер полиса tbNumberPolicy.Text = statement.NumberPolicy; cbNotCheckEnp.Checked = statement.NumberPolicy != null && statement.NumberPolicy.Length == 16 && statement.InsuredPersonData != null && statement.InsuredPersonData.Birthday.HasValue && statement.InsuredPersonData.Gender != null && (!EnpChecker.CheckIdentifier(statement.NumberPolicy) || !EnpChecker.CheckBirthdayAndGender( statement.NumberPolicy, statement.InsuredPersonData.Birthday.Value, statement.InsuredPersonData.Gender.Code == "1")); if (cbNotCheckEnp.Checked) { cbNotCheckEnp.Visible = true; } CheckIsRightToEdit(); }
public void CheckEnpFaset() { var r = EnpChecker.CheckBirthdayAndGender("7856510844000446", new DateTime(1984, 3, 5), true); Assert.IsTrue(r); }
public void CheckEnp() { var r = EnpChecker.CheckIdentifier("7856130840000017"); Assert.AreEqual(true, r); }
public void CheckBadEnp() { var r = EnpChecker.CheckIdentifier("7856130840000018"); Assert.AreEqual(false, r); }