Автоматизированная система управления медицинского страхования

 

Введение


В соответствие с Законом РФ «О медицинском страховании граждан в Российской Федерации» обязательное медицинское страхование (ОМС) является составной частью государственной системы социального страхования.

Все граждане РФ независимо от пола, возраста, состояния здоровья, места жительства, уровня личного дохода, имеют право на бесплатное получение медицинских услуг, включенных в государственную программу ОМС. Нормы, касающиеся обязательного медицинского страхования, распространяются на всех взрослых граждан с момента заключения с ними трудового соглашения, а также на детей.

Средства ОМС находятся в государственной собственности РФ. Для реализации государственной политики в области ОМС созданы Федеральный и территориальный фонды обязательного медицинского страхования как самостоятельные некоммерческие финансово-кредитные учреждения.

На территории Хабаровского края обязательным медицинским страхованием занимается Хабаровский краевой фонд обязательного медицинского страхования (ХКФОМС). Основными задачами краевого фонда являются:

обеспечение реализации Закона Российской Федерации «О медицинском страхование граждан в Российской Федерации»;

обеспечение предусмотренных федеральным законодательством прав граждан в системе обязательного медицинского страхования;

обеспечение всеобщности обязательного медицинского страхования граждан;

обеспечение финансовой устойчивости системы обязательного медицинского страхования;

достижение социальной справедливости и равенства всех граждан в системе обязательного медицинского страхования.

Информационный контур формирования сводного регистра застрахованных на территории края является трехуровневым.

Субъектами первого (нижнего) уровня являются пункты регистрации застрахованных (ПРЗ) в качестве которых выступают представительства филиалов Хабаровского краевого фонда ОМС. ПРЗ непосредственно заключают договоры с предприятиями плательщиками на страхование сотрудников, регистрируют договоры, выдают полисы ОМС сотрудникам предприятий, регистрируют застрахованных, для страхования неработающего населения заключаются договоры с администрацией территории.

Программное обеспечение филиала должно обеспечивать:

а)ввод в базу данных реквизитов договоров с предприятиями плательщиками;

б)присвоение уникального номера каждому договору в рамках территории;

в)ввод в базу данных реквизитов застрахованных;

г)присвоение уникального номера каждому застрахованному в рамках территории;

д)передавать в электронном виде в соответствии с определённым форматом изменения в регистре договоров и регистре застрахованных;

е)принимать в соответствии с протоколом результаты приема регистров от субъектов верхних уровней.

Субъектами второго (среднего) уровня являются филиалы ХКОФМС. На уровне филиала непосредственно договоры не регистрируются и полисы ОМС не выдаются, а проводится агрегирование и проверка информации от ПРЗ, относящихся к данному филиалу с последующей передачей её в ХКФОМС.

Программное обеспечение филиала должно обеспечивать:

а)приём информации от всех подчинённых ПРЗ в установленном формате;

б)проверка представленной информации;

в)агрегирование всех регистров в единый регистр договоров (ЕРД) филиала;

г)агрегирование всех регистров в единый регистр застрахованных (ЕРЗ) филиала;

д)передача ЕРД и ЕРЗ в установленном формате в ХКФОМС.

Субъектами третьего (верхнего) уровня является ХКФОМС, на уровне которого производится агрегирование сводного регистра застрахованных (СРЗ).

Программное обеспечение ТФОМС должно обеспечивать:

а)ведение и формирование сводного регистра жителей территории и предприятий плательщиков;

б)ежемесячное формирование СРД и СРЗ по итогам приема и обработки ЕРД и ЕРЗ от всех филиалов;

в)формирование текущего ЕРД и ЕРЗ для каждого филиала (по запросу);

г)формирование отчётных документов.



1. Постановка задачи


.1 Введение


Разрабатываемый программный комплекс предназначен для замены устаревшего программного обеспечения «Программа учёта выдачи полисов ОМС» работающего в системе MS-DOS и написанного на языке программирования Clipper.

Clipper - система программирования приложений в среде БД, включающая в себя быстрый компилятор программ. Система Clipper представляет собой, по существу, СУБД компилирующего типа с автономным языком, в значительной мере совместимую по входному языку программирования и организации базы данных с СУБД dBaseIII PLUS. Clipper работает в среде операционной системы MS DOS версии 2.0 и выше. В компиляции текстов программ на исходном языке он порождает загрузочные программные модули, не требующие каких-либо системных средств на стадии исполнения. Язык программирования Clipper позволяет создавать отдельные программы, пакеты программ и независимые информационные системы благодаря возможности манипулирования файлами различных типов - таблиц данных (.dbf), «примечания» (.dbt), индексов (.ntx), форм и отчетов (.frm), временных переменных (.mem) и текстов (.txt).

К недостаткам использования в качестве СУБД Clipper, можно отнести следующее:

все рабочие файлы находятся на файл-сервере, в данном случае на локальной машине размещения программного обеспечения;

база данных является однопользовательской;

низкий уровень обеспечения безопасности;

проблемы с русской кодировкой;

проблемы с масштабированием;

отсутствие параллельной обработки данных;

невозможность распределённой обработки данных.

Заменяемое программное обеспечение, написанное на языке программирования баз данных Clipper, имеет ряд существенных недостатков:

база данных не является нормализованной, так как присутствует избыточность и дублирование информации. В результате ввода не корректных и противоречивых данных возникает нарушения целостности данных.

не отвечает требованиям, предъявляемым к информационной безопасности - безопасность данных обеспечивается на программном уровне, что не может обеспечить необходимый уровень безопасности, так как таблицы базы данных хранятся в открытом виде в файлах с расширением dbf, для модификации которых достаточно открыть их в любом dbf-редакторе.

низкая скорость обработки данных;

неудобный пользовательский интерфейс;

Разрабатываемый программный комплекс «АСУ медицинского страхования» работающий под управлением СУБД MS SQL Server 2005 лишён всех выше перечисленных недостатков. Преимущества перехода от СУБД Clipper к СУБД MS SQL Server 2005, следующие:

оптимизированный многопользовательский режим работы с развитой системой транзакционной обработки данных, что обеспечивает одновременную работу с базой данных большого числа пользователей;

надёжные средства защиты информации;

эффективные инструменты для разграничения доступа к БД;

поддержка широкого диапазона аппаратно - программных платформ;

развитые средства управления, контроля, мониторинга и администрирования сервера БД;

поддержка таких эффективных инструментариев, как: триггеры, функции, хранимые процедуры, представления, курсоры, язык Transact - SQL;

масштабируемость.

застрахованный программный автоматизированный медицинский

1.1.1 Цель проекта и область применения

Необходимо разработать модули, обеспечивающие:

импорт данных из Clipper в MS SQL Server 2005;

подготовка файлов регистра застрахованных и регистра договоров для передачи в представительства и филиалы ХКФОМС;

приём файлов регистра застрахованных и регистра договоров из представительств и филиалов ТФОМС;

формирование отчётных документов;

регистрация пользователей на сервере;

установка прав доступа пользователей на инструкции и объекты базы данных.

Разрабатываемые модули являются частью программного комплекса «АСУ медицинского страхования», предназначенного для замены устаревшего программного обеспечения используемого в страховой медицинской компании «Газпроммедтсрах» и обеспечивающего распределённую обработку данных.


1.1.2 Термины и сокращения

АСУ - автоматизированная система управления.

БД - база данных.

ИФС - информационно - функциональная схема.

ЛПУ - лечебно профилактическое учреждение.

РД - регистр договоров.

РЗ - регистр застрахованных.

ПРЗ - пункт регистрации застрахованных.

ПО - программное обеспечение.

ПС - программное средство.

ОМС - обязательное медицинское страхование.

ОС - операционная система.

СМО - страховая медицинская организация.

СУБД - система управления базами данных.

ТФОМС - территориальный фонд обязательного медицинского страхования.

ХКФОМС - Хабаровский краевой фонд обязательного медицинского страхования.


1.1.3 Краткий обзор

Необходимо разработать программный комплекс, предназначенный для осуществления основных функций СМО: функции страхования, функции контроля за выполнением условий договоров со страхователями и медицинскими учреждениями, функции формирования отчётов СМО в ТФОМС.

Функции пунктов выдачи страховых медицинских полисов ОМС:

регистрация граждан, застрахованных по ОМС, выдача и учёт движения страховых медицинских полисов ОМС;

регистрация договоров ОМС граждан, заключённых между СМО и юридическим или физическим лицом - плательщиком единого социального налога;

регистрация договоров на предоставление лечебно-профилактической помощи (медицинских услуг) гражданам, застрахованным по ОМС, заключённых между МСО и медицинским учреждением;

формирование и ведение баз данных застрахованных по ОМС граждан, договоров страхования и договоров на оказание медицинской помощи застрахованным гражданам (ввод, изменение, удаление записей);

контроль баз данных - формирование результатов запросов к базам данных по заданным пользователем критериям.

Функции головных СМО:

формирование сводных баз по страховой медицинской организации;

формирование отчётов СМО в ТФОМС о численности застрахованных, движении страховых медицинских полисов, операциях по обязательному медицинскому страхованию;


1.2 Общее описание


.2.1 Обзор программного средства

Аппаратный и программный интерфейсы

Разрабатываемый программный комплекс предназначен для работы под управлением ОС Microsoft Windows NT/2k/XP, обеспечивающей взаимодействие с аппаратными средствами компьютера. База данных работает под управлением СУБД MS SQL Server 2005, расположенной на специально выделенном компьютере сервере. Между компьютерами пользователей и сервером будут постоянно осуществляться сетевые взаимодействия в рамках локальной вычислительной сети. В качестве протокола передачи данных необходимо использовать стек протоколов управления передачей TCP/IP.

Для взаимодействия с базами данных СУБД MS SQL Server 2005 и СУБД Clipper используется технология ADO.NET. Для доступа к MS SQL Server технология ADO.NET использует источник данных SQL Managed Provider, а для доступа к Clipper - ADO Managed Provider. SQL Managed Provider работает по специальному протоколу, называемому TabularData Stream (TDS) и ориентированному на работу с MS SQL Server, что позволяет увеличить скорость передачи данных и тем самым повысить общую производительность приложения. ADO Managed Provider - предназначен для работы с произвольной базой данных, за счёт своей универсальности имеет проигрыш в производительности по сравнению с SQL Managed Provider. Для работы программного комплекса необходимо установить на машине клиента Microsoft Windows®.NET Framework 2.0, основными компонентами которой являются общеязыковая среда выполнения и библиотека классов. Общеязыковая среда выполнения управляет кодом во время работы приложения, а также обеспечивает управление памятью, управление потоками и удалённое взаимодействие. Библиотека классов представляет коллекцию многократно используемых типов, которые надежно интегрируются с общеязыковой средой выполнения.

Требования к адаптации рабочих мест

Предъявляются следующие требования:

-операционная система Windows NT/2k/XP;

-NET. Framework версии 2.0 - набор библиотек и системных компонентов, необходимых для работы приложений, созданных на платформе.NET. Компоненты этой платформы используются в процессе работы программного комплекса;

-наличие сетевого соединения по протоколу TCP/IP между компьютерами в сети.


1.2.2 Характеристики пользователя

Пользователями программного комплекса «АСУ медицинского страхования», являются сотрудники СМО. Все пользователи должны обладать элементарными навыками работы на компьютере.

Пользователями программного комплекса являются:

системный администратор организации, владеющий профессиональными навыками работы с СУБД MS SQL Server и ОС семейства Windows;

оператор - работа с клиентами, ведение БД;

секретарь - контроль соблюдения нормативных документов.

1.2.3 Пользовательский интерфейс

На рисунке 1 представлена главная экранная форма программного комплекса.


Рисунок 1 - Главная экранная форма программного комплекса «АСУ медицинского страхования»


На главной экранной форме представлено:

строка меню - предоставляет доступ к основным командам, выполняемым программным комплексом;

панель инструментов «База данных» - панель с кнопками предназначенными для выполнения команд над таблицами (добавление записи, редактирование записи, удаление записи, поиск данных в таблице, быстрый поиск данных в таблице, фильтрация данных в таблице, отмена изменений в таблице);

графическое окно - служит для представления табличной информации;

строка состояния - вывод вспомогательной информации по выполняемым задачам, вывод подсказок к пунктам меню.

Импорт данных из Clipper в SQL Server 2005

Для выполнения импорта данных необходимо выбрать пункт меню «Файл->Импорт базы данных», после чего пользователю необходимо в диалоговом окне (рисунок 2) указать папку в качестве источника данных. Выбрав папку, можно выполнить одно из следующих действий:

- «Отмена» - произойдёт закрытие диалогового окна и отмена выполнения импорта данных;

«ОК» - произойдёт закрытие диалогового окна и начнётся процесс импорта данных.

При импорте данных, все не обработанные записи РЗ и РД будут занесены в лог-файл. По завершению импорта данных будет выведено диалоговое окно, информирующее о завершение задачи. Если какие-то записи будут не обработаны, то в диалоговом окне (рисунок 3) будет указано количество не обработанных записей, а так же будет предложено открыть лог-файл.


Рисунок 2 - Выбор папки источника данных

Рисунок 3 - Завершение импорта данных


Формирование файла регистра договоров

Выбрав пункт меню «Файл -> Сводный регистр договоров -> Экспорт данных в файл», на экране появится форма (рисунок 4), где будет предложено выбрать период регистрации договоров. Далее необходимо указать период и выполнить одно из следующих действий:

нажав кнопку «Отмена» произойдёт закрытие формы и отмена выполнения формирования файла РД;

нажав кнопку «ОК» начнётся процесс формирования файла РД, по окончании которого на экране появится окно (рисунок 5), информирующее о завершение выполнения задачи и количестве обработанных записей.


Рисунок 4 - Выбор периода регистрации договоров


Рисунок 5 - Сообщение о завершение выполнения задачи

Формирование файла регистра застрахованных

Выбрав пункт меню «Файл -> Сводный регистр застрахованных -> Экспорт данных в файл», на экране появится форма (рисунок 6), где будет предложено выбрать период регистрации застрахованных. Далее необходимо указать период и выполнить одно из следующих действий:

нажав кнопку «Отмена» произойдёт закрытие формы и отмена выполнения формирования файла РЗ;

нажав кнопку «ОК» начнётся процесс формирования файла РЗ, по окончании которого на экране появится окно (рисунок 7), информирующее о завершение выполнения задачи и количестве обработанных записей.


Рисунок 6 - Выбор периода регистрации застрахованных


Рисунок 7 - Сообщение о завершение выполнения задачи


Приём файла регистра договоров

Выбрав пункт меню «Файл -> Сводный регистр договоров -> Импорт данных из файла», на экране появится форма (рисунок 8), где необходимо выбрать файл РД. Выбрав файл и нажав кнопку «Открыть», на экране появится диалоговое окно с вопросом на подтверждение выполнения извлечения данных. Нажав кнопку «ОК» произойдёт извлечение данных. По окончании извлечения данных, пользователь будет проинформирован о завершение операции. Если во время выполнения извлечения данных происходит сбой, то по завершении данной операции на экране появляется окно (рисунок 9), информирующее о количестве не обработанных записей, так же будет предложено просмотреть лог-файл.


Рисунок 8 - Выбор файла РД


Рисунок 9 - Неудачное извлечение данных


Приём файла регистра застрахованных

Выбрав пункт меню «Файл -> Сводный регистр застрахованных -> Импорт данных из файла», на экране появится форма (рисунок 10), где необходимо выбрать файл РЗ. Выбрав файл и нажав кнопку «Открыть», на экране появится диалоговое окно с вопросом на подтверждение выполнения извлечения данных. Нажав кнопку «ОК» произойдёт извлечение данных. При успешном выполнение извлечения данных, появится диалоговое окно с сообщением о завершение операции извлечения данных. Если во время выполнения извлечения данных происходит сбой, то по завершении данной операции на экране появляется окно (рисунок 11), информирующее о количестве не обработанных записей, так же будет предложено просмотреть лог-файл.


Рисунок 10 - Выбор файла РЗ


Рисунок 11 - Неудачное извлечение данных


Формирование отчётов

При формировании отчёта РЗ, предоставляется полная информация о численности застрахованных по: району выдачи, району проживания, ЛПУ, предприятиям.

Формирование бланков для страховых медицинских полисов

Выбрав пункт меню «Файл -> Отчёты -> Страховой полис» на экране появится диалоговое окно (рисунок 12), для выбора критерия формирования полиса:

период - период регистрации полисов

При отсутствии зарегистрированных полисов за отчётный период, будет показан пустой бланк;

фамилия - фамилия застрахованного

Будут показаны все полисы, где фамилия застрахованного будет соответствовать указанной в поле ввода;

показать все полисы.

Будут показаны медицинские полисы для всех застрахованных.


Рисунок 12 - Выбор критерия для формирования бланка


На рисунке 13 представлена форма для предварительного просмотра и распечатки бланков страховых медицинских полисов. Для просмотра бланков помимо панели навигации, предусмотрен список застрахованных, в котором указываются застрахованные, для которых были сформированы бланки. Чтобы просмотреть бланк для застрахованного, необходимо в списке застрахованных выбрать необходимое имя. В строке состояния указывается общее количество бланков, номер текущего бланка, а также масштаб отображения бланка. Имеется: поиск, быстрый поиск, панель навигации для быстрого просмотра бланков, настройка печати, вывод документа на печать.

В бланке для каждого застрахованного предоставляется следующая информация:

серия полиса;

номер полиса;

Ф.И.О. застрахованного;

социальное положение;

год рождения;

пол;

место работы;

адрес постоянного места проживания;

период действия полиса;

номер договора ОМС;

период действия договора;

дата выдачи полиса.

Формирование отчёта регистра застрахованных по району выдачи

Выбрав пункт меню «Файл -> Отчёты -> Регистр застрахованных -> По районам выдачи», появится отчёт РЗ по району выдачи медицинского полиса.

Формирование отчёта регистра застрахованных по месту проживания

Выбрав пункт меню «Файл -> Отчёты -> Регистр застрахованных -> По месту проживания», появится отчёт РЗ по месту проживания застрахованного.

Формирование отчёта регистра застрахованных по лечебно профилактическим учреждениям

Выбрав пункт меню «Файл -> Отчёты -> Регистр застрахованных -> По ЛПУ» на экране появится отчёт РЗ по ЛПУ (рисунок 16).

Формирование отчёта регистра застрахованных по предприятиям

Выбрав пункт меню «Файл -> Отчёты -> Регистр застрахованных -> По предприятиям» на экране появится отчёт РЗ по предприятиям.

Администрирование БД

Выбрав пункт меню «Функции -> Администрирование», появится форма подключения к серверу (рисунок 18).


Рисунок 18 - Форма подключения к серверу


Здесь необходимо обязательно указать:

сервер - адрес сервера, к которому происходит подключение;

логин - логин системного администратора или администратора безопасности;

пароль;

база - имя БД над которой будет производиться администрирование.

Нажав после ввода необходимой информации кнопку «Подключение», будет выполнено одно из следующих действий:

при не корректно введённых параметрах на экране появится диалоговое окно с сообщение об ошибке подключения к серверу;

при правильно введённых параметрах на экране появится форма для администрирования.

Функции формы администрирования:

регистрация учётной записи;

редактирования учётной записи;

удаление учётной записи;

установка прав доступа на объекты и инструкции БД.

Регистрация учётной записи

Для регистрации учётной записи необходимо указать:

имя пользователя - пользователь БД;

логин - логин для подключения к БД;

пароль.

После чего нужно нажать кнопку «Добавить», для регистрации пользователя, либо «Отмена», для отмены регистрации пользователя.

После регистрации пользователя он будет добавлен в список пользователей.

Редактирование учётной записи

Для редактирования учётной записи, необходимо выбрать учётную запись в списке пользователей, после чего необходимо указать новые данные и нажать кнопку «Изменить» для принятия изменений, либо «Отмена» для отмены изменений.

Удаление учётной записи

Для удаления учётной записи, необходимо выбрать учётную запись в списке пользователей и нажать кнопку «Удалить», после чего появится форма для подтверждения удаления учётной записи.

Установка прав доступа на объекты и инструкции БД

Для установки прав доступа на объекты и инструкции БД, необходимо указать пользователя в всплывающем меню и нажать кнопку «Выбрать», после чего на экране будут отображены все права доступа пользователя на таблицы (рисунок 20) и хранимые процедуры (рисунок 21).

Доступны следующие ограничения:

операция выборки (SELECT) - просмотр записей в таблице или представление;

операция вставки (INSERT) - добавление новых записей в таблицу или представление;

операция изменения (UPDATE) - изменение содержимого записей таблицы или представления;

операция удаления (DELETE) - удаление записей из таблиц или представлений;

выполнение хранимых процедур (EXECUTE) - выполнение хранимой процедуры или определяемой пользователем функции. Все SQL - инструкции выполняются внутри хранимых процедур, что значительно повышает уровень безопасности данных, а также снижает сетевой трафик, так как при вызове процедуры, необходимо только указать входные данные, вся обработка происходит на стороне сервера.


1.2.4 Характеристики ПО

Надёжность

Приложение должно:

контролировать корректность передаваемых данных;

корректно реагировать на исключительные ситуации;

информировать пользователя о возникших ошибках;

обеспечивать пользователю функциональность в соответствие с назначенными ему правами;

реализовывать все предусмотренные функции;

время реакции системы на запросы должно быть приемлемым.

Переносимость

Приложение корректно работает на операционных системах Windows NT/2k/XP и корректно передаёт данные по протоколу TCP/IP.



2. Функциональная часть


.1 Список функций


Должны быть реализованы следующие функции:

извлечения данных из СУБД Clipper в СУБД SQL Server 2005

формирование файлов РЗ для отправки в филиалы;

формирование файлов РД для отправки в филиалы;

приём файлов РЗ от филиалов;

приём файлов РД от филиалов;

формирования отчётных документов:

отчёт РЗ по районам выдачи;

отчёт РЗ по месту проживания;

отчёт РЗ по ЛПУ;

отчёт РЗ по предприятиям;

бланк страхового медицинского полиса;

управление правами доступа пользователей над объектами БД:

регистрация новой учётной записи;

редактирования учётной записи;

удаления учётной записи;

установка прав над объектами и инструкциями БД для учётной записи.


2.2 Требования к функциям


.2.1 Информационно-функциональная схема

Информационно-функциональная схема дает комплексное представление об основных элементах реализации конкретного функционального процесса. Схема позволяет видеть, на какие элементы информационной базы опирается реализация отдельных функций приложения, источники информации, ее пользователей, также пользователей, участвующих в реализации функций АИС. В ИФС используются следующие условные обозначения (рисунок 22).


Рисунок 22 - Условные обозначения, принятые для описания информационно-функциональной схемы


2.2.2 Импорт данных из СУБД Clipper в СУБД MS SQL Server 2005

Данная функция предназначена для автоматизации импорта данных из СУБД Clipper в СУБД MS SQL Server 2005, выполняя при этом преобразование данных к нужному формату и проверяя их на корректность. Выполняется импорт всех данных, при этом будет сформирован лог-файл для РЗ и РД, где будут указаны ошибочные записи. Типичные ошибки: дублирование ключевых полей, расхождение даты регистрации с датой окончания действия документа, незаполненные необходимые поля, не правильный формат данных.

При извлечении данных, должны выполняться следующие действия:

подключение к серверу под логином администратора;

выбор папки источника данных;

извлечение данных из файлов;

формирование лог - файла при возникновении ошибок;

информирование пользователя о завершение операции извлечения.

Рисунок 23 - Фрагмент ИФС для функции «Импорт данных»


2.2.3 Формирование файлов регистра застрахованных

Данная функция предназначена для формирования файла регистра застрахованного за отчётный период для оправки в СМО. После формирования файла РЗ, необходимо проверить правильность и полноту заполнения всех данных.

Не допускается:

нулевое значение, неполное либо неверное заполнение поля: серия и номер паспорта (свидетельства о рождении);

нулевое значение серии полиса;

пустое поле улицы, номера дома.


Рисунок 24 - Фрагмент ИФС для функции «Формирование файла регистра застрахованных»

2.2.4 Формирование файлов регистра договоров

Данная функция предназначена для формирования файла регистра договоров за отчётный период для оправки в СМО. После формирования файла РД, необходимо проверить правильность и полноту заполнения всех данных. Дата начала действия договора должна быть указана у всех договоров и не должна быть больше или равна дате окончания действия договора, а также не должна быть больше даты проведения корректировки.

При формировании файла РД для отправки в филиал, должны выполняться следующие действия:

выбор периода регистрации договоров;

формирование файла РД по дате регистрации;

информирования пользователя о завершение операции формирования файла.

Информационно-функциональная схема представлена на рисунке 25


Рисунок 25 - Фрагмент ИФС для функции «Формирование файла регистра договоров»


2.2.5Приём файлов регистра застрахованных

Данная функция предназначена для импорта данных из файла РЗ, поступающего от СМО. При выполнении импорта осуществляется проверка данных и формируется лог-файл.

При приёме файла РЗ, должны выполняться следующие действия:

выбор файла для приёма;

извлечение данных из файла РЗ;

формирование лог-файла при возникновении ошибок;

информирования пользователя о завершение операции приёма файла.

Информационно-функциональная схема представлена на рисунке 26.


Рисунок 26 - Фрагмент ИФС для функции «Импорт данных из файла регистра застрахованных»


2.2.6Приём файлов регистра договоров

Данная функция предназначена для импорта данных из файла РД, поступающего от СМО. При выполнении импорта осуществляется проверка данных и формируется лог-файл.

При приёме файла РД из филиала, должны выполняться следующие действия:

выбор файла для приёма;

извлечение данных из файла РД;

формирование лог-файла при возникновении ошибок;

информирования пользователя о завершение операции приёма файла.

Информационно-функциональная схема представлена на рисунке 27.


Рисунок 27 - Фрагмент ИФС для функции «Импорт данных из файла регистра договоров»


2.2.7Формирование отчётных документов

Данные функции предназначены для формирования отчётной информации и документов на печать. Отчёты должен быть представлены на формате А4 с возможностью вывода содержащейся в них информации на печать. Реализованы следующие отчёты:

отчёт РЗ по районам выдачи (рисунок 28);

отчёт РЗ по месту проживания (рисунок 29);

отчёт РЗ по ЛПУ (рисунок 30);

отчёт РЗ по предприятиям (рисунок 31);

бланк медицинского полиса (рисунок 32).


Рисунок 28 - Фрагмент ИФС для отчёта «Регистр застрахованных по району выдачи»


Рисунок 29 - Фрагмент ИФС для отчёта «Регистр застрахованных по району проживания»


Рисунок 30 - Фрагмент ИФС для отчёта «Регистр застрахованных по ЛПУ»


2.2.8 Управления правами доступа над объектами БД

Для администрирования БД необходимо подключиться к серверу, указав: адрес сервера, логин администратора либо администратора безопасности, пароль, имя БД над которой будет производиться администрирование. Для администрирования предусмотрены следующие действия:

а)регистрация новой учётной записи

1)ввод имени учётной записи, для которой будут настроены права доступа;

2)ввод логина и пароля, для подключения к серверу;

3)регистрация учётной записи.

б)редактирования учётной записи

1)ввод нового логина и пароля для подключения к серверу;

2)редактирование учётной записи.

в)удаления учётной записи

1)запрос на подтверждение удаления учётной записи;

2)при подтверждении удаления, должно выполняться удаление учётной записи.

г)установка прав над объектами и инструкциями БД для учётной записи.

При регистрации учётной записи, ей автоматически присваиваются роли: db_reader - члены этой роли, могут выполнять инструкцию SELECT для любой таблицы или представления в базе; db_datawriter - члены это роли, могут выполнять добавление (insert), редактирование (update) и удаление (delete) записей таблиц и представлений базы данных.

Роли db_datareader и db_datawriter обеспечивают доступ ко всем таблицам базы данных. После этого для учётной записи можно запретить или разрешить выполнение той или иной инструкции над объектами БД.



3. Информационное обеспечение приложения


.1 Концептуальная модель данных


Концептуальная модель является логической схемой базы данных для проектируемой системы. Основными объектами концептуальной модели являются сущности и связи. Сущность - некоторый обособленный объект или событие моделируемой системы, имеющий определенный набор свойств - атрибутов. Сущность может обладать одним или несколькими атрибутами, которые однозначно идентифицируют каждый образец сущности, и может обладать любым количеством связей с другими сущностями.


3.2 Физическая модель данных


Между таблицами базы данных существуют определенные взаимосвязи. Для поддержания этих взаимосвязей, а также для обеспечения корректности хранимых данных на вводимую информацию накладывают ряд ограничений, называемых ограничениями целостности (ОЦ). Ограничения целостности - логические ограничения, накладываемые на данные. Этим внутренним ОЦ описываются функциональные зависимости между атрибутами внутри отношения.


3.2.1 Список таблиц базы данных

Список таблиц приложения «Автоматизированная система управления медицинского страхования» представлен в таблице 3.1.


Таблица 3.1 - Список таблиц базы данных

Идентификатор таблицыНазвание таблицыОписание таблицыallowableservicesДополнительные услугиСписок дополнительных услуг для ЛПУareasРайоныСписок районов субъектов РФbrancheslistУслугиСписок допустимых услуг для отделений ЛПУcitizensageВозрастная группаСписок возрастных группclasstypeКлассификатор типов договораСписок договоров с юридическими и физическими лицамиcontractlistРегистр договоровСписок заключённых договоров с СМОdocumentДокументыСписок доступных типов документа удостоверяющих личность гражданинаinsuredcategoriesКатегории застрахованныхСписок категорий застрахованныхinsuredlistРегистр застрахованныхСправочник застрахованныхlpubranchesОтделения ЛПУСписок отделений ЛПУlpucategoriesКатегории ЛПУСправочник категорий ЛПУlpulistЛПУСписок ЛПУlpusubordПодчинённость ЛПУСписок типов подчинения ЛПУlputypeТип ЛПУСписок типов ЛПУoccupieditemНаселённые пунктыСправочник населённых пунктовperiodsПериодыСписок календарных месяцевpoliciesmovementДвижение полисаСписок признаков движения полисовPrzПункт регистра застрахованныхСправочник пунктов регистра застрахованныхregionsРегионыСписок регионов РФsecondnamesКлассификатор отчествСписок классификаторов отчествSmoСтраховые медицинские организацииСписок страховых медицинских организацийsocialstatusСоциальное положениеСписок классификаторов социального положенияspecificationslistУточнения предприятийСписок уточнений предприятийstreetslistУлицыТерриториальный список улиц

3.2.2Структура таблиц базы данных

Структура таблиц базы данных программного комплекса представлена в таблицах 3.2-3.25.


Таблица 3.2 - Структура таблицы «allowableservices»

Код поляНаименование поляТип поляasid*Код дополнительной услугиintStandartСтандартintTariffКоэффициент регионального тарифаfloattariffnonresidentТариф иногороднимfloatSalaryПроцент на заработную платуfloatchargeПроцент начисления на заработную платуfloatFeedПроцент на питаниеfloatmedicinesПроцент на медикаментыfloat

Таблица 3.3 - Структура таблицы «areas»

Код поляНаименование поляТип поляaid*Код районаintainameРайонvarchar(50)RidКод регионаint

Таблица 3.4 - Структура таблицы «brancheslist»

Код поляНаименование поляТип поляblid*Код отделенияsmallintblnameОтделениеvarchar(50)

Таблица 3.5 - Структура таблицы «citizensage»

Код поляНаименование поляТип поляcaid*Код возрастной группыsmallintcanameВозрастная группаvarchar(50)

Таблица 3.6 - Структура таблицы «classtype»

Код поляНаименование поляТип поляctid*Код типа договораIntctnameТип договораvarchar(50)Таблица 3.7 - Структура таблицы «document»

Код поляНаименование поляТип поляDocid*Код документаintdocnameДокументvarchar(50)

Таблица 3.8 - Структура таблицы «contractlist»

Код поляНаименование поляТип поляclid*Номер договораintRegРегистрационный индексsmallintregistrationidРегистрационный номерintregistrationdateДата регистрацииsmalldatetimeCtidКод типа договораintinn1Инн1bigintinn2Инн2bigintKppКппbigintNwСостояние договораbitclnameДоговорvarchar(100)startdateНачало действия договораsmalldatetimeenddateОкончание действия договораsmalldatetimeaddressАдресvarchar(50)mailindexПочтовый индексintOiidКод населённого пунктаintSlidКод улицыinthnumberНомер домаsmallintOfkvНомер офисаsmallintChiefРуководительvarchar(40)telephoneТелефонbigintomsrespondibleОтветственный за ОМСvarchar(40)addinfДополнительная информацияvarchar(100)paymentsПлатежиbit

Таблица 3.9 - Структура таблицы «insuredcategories»

Код поляНаименование поляТип поляicid*Код категории застрахованныхsmallinticnameКатегория застрахованныхvarchar(70)

Таблица 3.10 - Структура таблицы «lpubranches»

Код поляНаименование поляТип поляLpuid*Код ЛПУintblid*Код отделения ЛПУsmallintCountКоличество работниковsmallint

Таблица 3.11 - Структура таблицы «lpucategories»

Код поляНаименование поляТип поляlcid*Код категории ЛПУsmallintlcnameКатегория ЛПУvarchar(15)

Таблица 3.12 - Структура таблицы «insuredlist»

Код поляНаименование поляТип поляnumber*Номер полисаintclid*Серия полисаintPmidКод признака движения полисаsmallintKmsКМСbigintPrПризнак печатиbitstartdateДата начала действия полисаsmalldatetimeenddateДата окончания действия полисаsmalldatetimetelephoneТелефонbigintslid2Код уточнения предприятияchar(1)DocidКод типа документаintdocnumberДокументvarchar(20)OsОСbitsurnameФамилияvarchar(20)NidКод имениintSnidКод отчестваintbirthdateДата рожденияsmalldatetimeMaleПолbitSsidКод социального статусаsmallintdisterrКод населённого пунктаintIlsИЛСintresterrКод населённого пунктаintSlidКод улицыintHouseНомер домаsmallintCasНомер корпусаchar(5)StrНомер строенияchar(5)apartamentНомер квартирыsmallintIcidКод категории застрахованныхsmallintpigroupКатегория инвалидностиsmallintLpuidКод ЛПУintoutdateДата сдачи полисаsmalldatetimechangedateДата изменения данныхsmalldatetimeoperatorОператорsmallintSmoidКод СМОchar(2)

Таблица 3.13 - Структура таблицы «lpusubord»

Код поляНаименование поляТип поляlsid*Код подчинения ЛПУsmallintlsnameНаименование подчинения ЛПУvarchar(40)

Таблица 3.14 - Структура таблицы «lpulist»

Код поляНаименование поляТип поляLpuid*Код ЛПУintlpunameЛПУvarchar(50)LsidКод подчинения ЛПУsmallintCaidКод возрастной группыsmallintLtidКод типа ЛПУsmallintltnumberНомер ЛПУsmallintTuzoТузоintOkpoОКПОintOkoguОКОГУintOkatoОКАТОintCodeКодfloatOkopfОКПФintOiidКод районаintaddressАдресvarchar(50)SlidКод улицыinthnumberНомер домаsmallintmailindexПочтовый индексintLcidКод категории ЛПУsmallintregtarКоэффициент регионального тарифаfloatmaindoctorГлавный врачvarchar(20)chiefaccountantГлавный бухгалтерvarchar(20)contractnumberНомер договораintDateДата заключения договораsmalldatetimeattachedpopПрикреплённое населениеintm16Младше 16intm1660Мужчины от 16 до 60intg1655Женщины от 16 до 55intm60Мужчины старше 60intg55Женщины старше 55intAsidКод дополнительных услуг ЛПУint

Таблица 3.15 - Структура таблицы «occupieditem»

Код поляНаименование поляТип поляoiid*Код населённого пунктаintoinameНаселённый пунктvarchar(50)AidКод районаint

Таблица 3.16 - Структура таблицы «lputype»

Код поляНаименование поляТип поляltid*Код типа ЛПУsmallintltnameТип ЛПУvarchar(50)

Таблица 3.17 - Структура таблицы «names»

Код поляНаименование поляТип поляnid*Код имениIntNnameИмяvarchar(20)

Таблица 3.18 - Структура таблицы «policiesmovement»

Код поляНаименование поляТип поляpmid*Код признака движения полисаsmallintPmnameПризнак движения полисаvarchar(40)

Таблица 3.19 - Структура таблицы «prz»

Код поляНаименование поляТип поляPrzid*Код ПРЗchar(4)PrznameПРЗvarchar(40)SmoidКод СМОchar(2)OiidКод районаintSlidКод улицыintHnumberНомер домаsmallintChiefРуководительvarchar(20)MatresponМатериально ответственныйvarchar(20)ProperatorОператорvarchar(20)TelephoneТелефонint

Таблица 3.20 - Структура таблицы «regions»

Код поляНаименование поляТип поляrid*Код регионаintRnameРегионvarchar(50)

Таблица 3.21 - Структура таблицы «secondnames»

Код поляНаименование поляТип поляsnid*Код отчестваintsnnameОтчествоvarchar(20)

Таблица 3.22 - Структура таблицы «smo»

Код поляНаименование поляТип поляSmoid*Код СМОchar(2)smnameСМОvarchar(50)OiidКод районаintSlidКод улицыinthnumberНомер домаsmallintChiefРуководительvarchar(40)chiefaccountantГлавный бухгалтерvarchar(40)mischiefРуководитель АСУvarchar(40)telephoneТелефонinttfomscontractДоговор с ТФМСОvarchar(8)stardateДата началаsmalldatetimeenddateДата окончанияsmalldatetime

Таблица 3.23 - Структура таблицы «socialstatus»

Код поляНаименование поляТип поляssid*Код социального положенияsmallintSsnameСоциальное положениеvarchar(40)SscategoryКатегория социального положенияvarchar(25)Таблица 3.24 - Структура таблицы specificationslist»

Код поляНаименование поляТип поляslid*Код уточнения предприятияchar(1)SlnameУточнение предприятияvarchar(25)

Таблица 3.25 - Структура таблицы «streetslist»

Код поляНаименование поляТип поляslid*Код улицыintslnameУлицаvarchar(50)

.2.3 Оценка объёма БД

Расчёт верхней оценки объёма информационной базы для разрабатываемого программного комплекса представлен в таблице 3.26.


Таблица 3.26 - Объём таблиц БД

Название таблицыРазмер записи, бКоличество записейОбъём, КбДополнительные услуги321003,1Районы583000169,9Услуги521005,1Возрастная группа5230,2Классификатор типов договора54301,6Регистр договоров40650001982,4Документы54201,1Категории застрахованных72503,5Регистр застрахованных1461500000213867,2Отделения ЛПУ8500,4Категории ЛПУ1760,1ЛПУ232500113,3Подчинённость ЛПУ42301,2Тип ЛПУ52402,0Классификатор имён2410000234,4Населённые пункты585000283,2Движение полиса42100,4Пункт регистра застрахованных12030035,2Регионы54904,7Классификатор отчеств2420000468,8Страховые медицинские организации202305,9Социальное положение67151,0Уточнения предприятий2630,1Улицы5410000527,3

Максимальный суммарный объем БД программного комплекса «АСУ медицинского страхования» может достигать 212,6 Мб.



4. Программное обеспечение приложения


Программный комплекс разработан в среде программирования Microsoft Visual Studio 2005 для Windows 2000/XP/2003 с использованием в качестве механизма доступа к ресурсам СУБД программного инструментария ADO.NET. Интерфейс ADO.NET реализует все низкоуровневые операции работы с базами данных и является разделяемым ресурсом, то есть может использоваться несколькими приложениями одновременно.

Выбор в качестве среды разработки Microsoft Visual Studio 2005 обусловлен хорошим сочетанием возможностей технологии визуального программирования с мощью объектно-ориентированного аппарата языка C#.

Технология визуального программирования позволяет быстро и качественно создавать всевозможные экранные формы и элементы интерфейса, что необходимо для удобства работы конечного пользователя.

Язык C#, являясь объектно-ориентированным, позволяет подходить к разработке внутреннего ядра программы, опираясь на концепцию системного анализа. Унаследовав все лучшие стороны языков высокого уровня, C# объединяет высокую производительность средств быстрой разработки (RAD) с мощью и гибкостью C++. При проектировании программного комплекса активно использовались методы объектно-ориентированного программирования.

Выбор интерфейс ADO.NET обусловлен универсальностью подхода к технологии управления базами данных.

Ориентирование приложения для работы под операционными системами Windows 2000/XP/2003 позволяет в полной мере использовать в программе унифицированный данными операционными системами механизм взаимодействия пользователя с программным комплексом - интерфейс пользователя.

Разработка концептуальной и физической модели данных выполнена в Power Designer v9.0. фирмы Sybase.

В качестве СУБД использовалась СУБД Microsoft SQL Server 2005 фирмы Microsoft.



Заключение


В результате дипломного проектирования для филиала открытого акционерного общества «Газпроммедстрах» был разработан и реализован программный комплекс «Автоматизированная система управления медицинского страхования». В системе реализованы основные функции СМО: функции страхования, функции контроля за выполнением условий договора со страхователями и медицинскими учреждениями, функции формирования отчётов СМО в ТФОМС о численности застрахованных, движении страховых медицинских полисов, операциях по обязательному медицинскому страхованию.

Приложение отвечает всем поставленным требованиям. Осуществлён импорт данных из СУБД Clipper в СУБД MS SQL Server, обеспечивающий перенос существующих данных из устаревшего программного обеспечения в разработанный программный комплекс. Реализовано формирование отчётных документов, предоставляющих всю необходимую для работы информацию. Разработан модуль для администрирования БД, обеспечивающий гибкую настройку прав пользователей над объектами БД.

Разработанные в ВКР модули являются составной частью программного комплекса «Автоматизированная система управления медицинского страхования», который планируется к внедрению в компании ОАО «Газпроммедстрах».



Список источников


1.Нейгель, Кристиан, Ивьен, Билл, Глин, Джей. C# 2005 для профессионалов.: Пер. с англ. - М.: Издательский дом «Вильямс», 2006. - 1376 с.: - Парал.тит. англ.

2.Постолит А.В. Visual Studio.NET: разработка приложений баз данных. - СПб.: БХВ-Петербург, 2003. - 544 с.: ил.

.Сеппа Д. Microsoft ADO.NET/Пер. с англ. - М.: Издательско-торговый дом Русская Редакция, 2003- - 640 стр.: ил.

.#"justify">.#"justify">.#"justify">ПРИЛОЖЕНИЕ А


Исходный текст приложения.


/*Импорт БД*/

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Data.OleDb;System.Data.SqlClient;System.IO;System.Globalization;Microsoft.Office.Interop.Excel;connect_dbf = null;connect_mdf = null;rdr_dbf;cmd_dbf = new OleDbCommand();cmd_mdf = new SqlCommand();workdirectory = "";decimal_sep = System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator;//разделитель дробных чисел(регионалные стандарты)_log_File to_file = null;e = new DataSet();

#region Обрабатываем выбор пункта меню "импорт базы данных"void импортБазыДанныхToolStripMenuItem_Click(object sender, EventArgs e)

{

//указываем путь к файлам бд(folderBrowser.ShowDialog() == DialogResult.OK)

{(folderBrowser.SelectedPath);();

}

}

#endregion

#region Создаём временную директорию и копируем необходимые файлы из папки источника для дальнейшей обработкиcreateFiles(string directoryOut)

{

{directoryIn = "";= Directory.CreateDirectory(".\\Temp").ToString();.Copy(directoryOut + "\\common\\region.dbf", directoryIn + "\\region.dbf", true);.Copy(directoryOut + "\\common\\region.cdx", directoryIn + "\\region.cdx", true);.Copy(directoryOut + "\\fizpers\\sltipdog.dbf", directoryIn + "\\sltipdog.dbf", true);.Copy(directoryOut + "\\fizpers\\sltipdog.cdx", directoryIn + "\\sltipdog.cdx", true);.Copy(directoryOut + "\\fizpers\\dogovor.dbf", directoryIn + "\\dogovor.dbf", true);.Copy(directoryOut + "\\fizpers\\dogovor.cdx", directoryIn + "\\dogovor.cdx", true);.Copy(directoryOut + "\\common\\tpdoc.dbf", directoryIn + "\\tpdoc.dbf", true);.Copy(directoryOut + "\\common\\tpdoc.cdx", directoryIn + "\\tpdoc.cdx", true);.Copy(directoryOut + "\\common\\kateg.dbf", directoryIn + "\\kateg.dbf", true);.Copy(directoryOut + "\\common\\kateg.cdx", directoryIn + "\\kateg.cdx", true);.Copy(directoryOut + "\\fizpers\\fizpers.dbf", directoryIn + "\\fizpers.dbf", true);.Copy(directoryOut + "\\fizpers\\fizpers.cdx", directoryIn + "\\fizpers.cdx", true);.Copy(directoryOut + "\\common\\klpu.dbf", directoryIn + "\\klpu.dbf", true);.Copy(directoryOut + "\\common\\klpu.cdx", directoryIn + "\\klpu.cdx", true);.Copy(directoryOut + "\\common\\infostr.dbf", directoryIn + "\\infostr.dbf", true);.Copy(directoryOut + "\\common\\infostr.cdx", directoryIn + "\\infostr.cdx", true);.Copy(directoryOut + "\\common\\slpod.dbf", directoryIn + "\\slpod.dbf", true);.Copy(directoryOut + "\\common\\slpod.cdx", directoryIn + "\\slpod.cdx", true);.Copy(directoryOut + "\\common\\sltlpu.dbf", directoryIn + "\\sltlpu.dbf", true);.Copy(directoryOut + "\\common\\sltlpu.cdx", directoryIn + "\\sltlpu.cdx", true);.Copy(directoryOut + "\\fizpers\\slimx.dbf", directoryIn + "\\slimx.dbf", true);.Copy(directoryOut + "\\fizpers\\slimx.cdx", directoryIn + "\\slimx.cdx", true);.Copy(directoryOut + "\\common\\slprz.dbf", directoryIn + "\\slprz.dbf", true);.Copy(directoryOut + "\\common\\slprz.cdx", directoryIn + "\\slprz.cdx", true);.Copy(directoryOut + "\\common\\slprp.dbf", directoryIn + "\\slprp.dbf", true);.Copy(directoryOut + "\\common\\slprp.cdx", directoryIn + "\\slprp.cdx", true);.Copy(directoryOut + "\\fizpers\\slotx.dbf", directoryIn + "\\slotx.dbf", true);.Copy(directoryOut + "\\fizpers\\slotx.cdx", directoryIn + "\\slotx.cdx", true);.Copy(directoryOut + "\\common\\slmso.dbf", directoryIn + "\\slmso.dbf", true);.Copy(directoryOut + "\\common\\slmso.cdx", directoryIn + "\\slmso.cdx", true);.Copy(directoryOut + "\\common\\socpol.dbf", directoryIn + "\\socpol.dbf", true);.Copy(directoryOut + "\\common\\socpol.cdx", directoryIn + "\\socpol.cdx", true);.Copy(directoryOut + "\\common\\slreg.dbf", directoryIn + "\\slreg.dbf", true);.Copy(directoryOut + "\\common\\slreg.cdx", directoryIn + "\\slreg.cdx", true);.Copy(directoryOut + "\\fizpers\\streetx.dbf", directoryIn + "\\street.dbf", true);.Copy(directoryOut + "\\fizpers\\streetx.cdx", directoryIn + "\\street.cdx", true);.Copy(directoryOut + "\\fizpers\\slpred.dbf", directoryIn + "\\slpred.dbf", true);.Copy(directoryOut + "\\fizpers\\slpred.cdx", directoryIn + "\\slpred.cdx", true);

//начинаем извлекать данные

}(Exception exp)

{.Show(exp.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

#endregion

#region Подключение к БД/Отключениеvoid ConnectToBD()

{

{_dbf = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+workdirectory+"\\Temp\\;Extended Properties=dBase IV;User ID=Admin;Password=");_dbf.Open();_mdf = new SqlConnection(@"Data Source=(local)\SQLEXPRESS;Initial Catalog=DataBase;Integrated Security=SSPI");_mdf.Open();

}(Exception exp)

{.Show("Ошибка подключения к базе данных:\n" + exp.ToString());

}

}void отклчToolStripMenuItem_Click(object sender, EventArgs e)

{_dbf.Close();_mdf.Close();

}

#endregion

#region заполнение таблицvoid FillingTables()

{

{

//Функция извлечения списка улиц_list_streets();

//Функция извлечения категорий застрахованных_insured_categories();

//Функция извлечения категорий ЛПУ _lpu_categories();

//Функция извлечения типов документа_documents();

//Функция извлевчения категорий социального положения_social_status();

//Функция извлевчения типов ЛПУ_lpu_types();

//Функция извлечения списка признака движения полиса_policie_movement();

//Функция извлечения списка подчинённости ЛПУ_lpu_subord();

//Функция извлечения списка имён_list_names();

//Функция извлечения списка отчеств_list_second_names();

//Функция извлечения списка уточнений предприятия_list_specifications();

//Функция извлечения классификаторов договора_type_class();

//Функция извлечения списка регионов/районов/населённых пунктов_cadastr();

//Функция установки возрастного положения_age();

//Функция извлечения списка страховых медецинских организаций_smo();

//Функция извлечения списка пунктов регистра застрахованных_prz();

//Функция извлечения списка лечебно профилактических учреждений_lpu();

//Функция извлечения списка договоров_contracts();

//Функция извлечения списка застрахованных_insureds();

}(Exception exp)

{.Show(exp.ToString());

}

}

#endregion

#region функции заполения таблиц

//Извлекаем список улицextract_list_streets()

{_dbf.CommandText = "(select name from street where name<>'') union (select ul from fizpers where ul<>'' order by ul)";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_street') is not null drop function select_street";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_street(@name varchar(50)) returns int as begin return (select count(slname) from streetslist where slname=@name) end";_mdf.ExecuteNonQuery();

//Процедура добавления улицы_mdf.CommandText = "if object_id('streetslist_insert') is not null drop procedure streetslist_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure streetslist_insert @street varchar(50) as begin if(dbo.select_street(@street)=0) insert into streetslist (slname) values (@street) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec streetslist_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем категории застрахованныхextract_insured_categories()

{_dbf.CommandText = "select distinct name from kateg where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_insured_categories') is not null drop function select_insured_categories";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_insured_categories(@name varchar(70)) returns int as begin return (select count(icname) from insuredcategories where icname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('insured_categories_insert') is not null drop procedure insured_categories_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure insured_categories_insert @categ varchar(70) as begin if(dbo.select_insured_categories(@categ)=0) insert into insuredcategories (icname) values (@categ) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText =string.Format("exec insured_categories_insert '{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем категории ЛПУextract_lpu_categories()

{_dbf.CommandText = "select distinct name from klpu where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_lpu_categories') is not null drop function select_lpu_categories";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_categories(@name varchar(15)) returns int as begin return (select count(lcname) from lpucategories where lcname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('lpu_categories_insert') is not null drop procedure lpu_categories_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure lpu_categories_insert @categ varchar(15) as begin if(dbo.select_lpu_categories(@categ)=0) insert into lpucategories (lcname) values (@categ) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec lpu_categories_insert '{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем типы документовextract_documents()

{_dbf.CommandText = "select distinct name from tpdoc where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_document') is not null drop function select_document";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_document(@name varchar(50)) returns int as begin return (select count(docname) from document where docname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('documents_insert') is not null drop procedure documents_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure documents_insert @doc varchar(50) as begin if(dbo.select_document(@doc)=0) insert into document (docname) values (@doc) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec documents_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем категории социального положенияextract_social_status()

{_dbf.CommandText = "select distinct name from socpol where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_social_status') is not null drop function select_social_status";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_social_status(@name varchar(40)) returns int as begin return (select count(ssname) from socialstatus where ssname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('social_status_insert') is not null drop procedure social_status_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure social_status_insert @social varchar(40),@sscategory varchar(25) as begin if(dbo.select_social_status(@social)=0) insert into socialstatus (ssname,sscategory) values (@social,@sscategory) end";_mdf.ExecuteNonQuery();category="";//категория: работающий/не работающий(rdr_dbf.Read())

{

{((rdr_dbf["name"].ToString() == "В\\служащий") || (rdr_dbf["name"].ToString() == "Пенсионер (работающий)") || (rdr_dbf["name"].ToString() == "Работающий, служащий"))= "Работающее население";= "Неработающее население";

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec social_status_insert '{0}','{1}'", rdr_dbf["name"].ToString(),category);_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем типы ЛПУextract_lpu_types()

{_dbf.CommandText = "select distinct name from sltlpu where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_lpu_type') is not null drop function select_lpu_type";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_type(@name varchar(40)) returns int as begin return (select count(ltname) from lputype where ltname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('lpu_type_insert') is not null drop procedure lpu_type_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure lpu_type_insert @type varchar(40) as begin if(dbo.select_lpu_type(@type)=0) insert into lputype (ltname) values (@type) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec lpu_type_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список признака движения полисаextract_policie_movement()

{_dbf.CommandText = "select distinct name from slprp where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_policie_movement') is not null drop function select_policie_movement";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_policie_movement(@name varchar(40)) returns int as begin return (select count(pmname) from policiesmovement where pmname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('policie_movement_insert') is not null drop procedure policie_movement_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure policie_movement_insert @policie varchar(40) as begin if(dbo.select_policie_movement(@policie)=0) insert into policiesmovement (pmname) values (@policie) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec policie_movement_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список подчинённости ЛПУextract_lpu_subord()

{_dbf.CommandText = "select distinct name from slpod where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_lpu_subord') is not null drop function select_lpu_subord";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_subord(@name varchar(40)) returns int as begin return (select count(lsname) from lpusubord where lsname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('lpu_subord_insert') is not null drop procedure lpu_subord_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure lpu_subord_insert @subord varchar(40) as begin if(dbo.select_lpu_subord(@subord)=0) insert into lpusubord (lsname) values (@subord) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec lpu_subord_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список имёнextract_list_names()

{_dbf.CommandText = "(select name from slimx where high<>'' and name<>'') union (select im from fizpers where im<>'' order by im)";_dbf = cmd_dbf.ExecuteReader();

//Функция проверки наличия имени в базе данных_mdf.CommandText = "if object_id('select_name') is not null drop function select_name";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_name(@name varchar(20)) returns int as begin return(select count(nname) from names where nname=@name) end";_mdf.ExecuteNonQuery();

//Процедура добавления имени_mdf.CommandText = "if object_id('names_insert') is not null drop procedure names_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure names_insert @name varchar(20) as begin if(dbo.select_name(@name)=0) insert into names (nname) values (@name) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec names_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список отчествextract_list_second_names()

{_dbf.CommandText = "(select name from slotx where high<>'' and name<>'') union (select ot from fizpers where ot<>'' order by ot)";_dbf = cmd_dbf.ExecuteReader();

//Функция проверки наличия отчества в базе данных_mdf.CommandText = "if object_id('select_second_name') is not null drop function select_second_name";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_second_name(@sname varchar(20)) returns int as begin return(select count(snname) from secondnames where snname=@sname) end";_mdf.ExecuteNonQuery();

//Процедура добавления отчества_mdf.CommandText = "if object_id('second_names_insert') is not null drop procedure second_names_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure second_names_insert @sname varchar(20) as begin if(dbo.select_second_name(@sname)=0) insert into secondnames (snname) values (@sname) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec second_names_insert '{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список уточнений предприятияextract_list_specifications()

{_dbf.CommandText = "select distinct code,name from slpred where name<>'' and code<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_list_specifications') is not null drop function select_list_specifications";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_list_specifications(@name varchar(25)) returns int as begin return(select count(slname) from specificationslist where slname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('list_specifications_insert') is not null drop procedure list_specifications_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure list_specifications_insert @id char(1), @specific varchar(25) as begin if(dbo.select_list_specifications(@specific)=0) insert into specificationslist (slid,slname) values (@id,@specific) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec list_specifications_insert '{0}','{1}'", rdr_dbf["code"].ToString().Trim(), rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}{ }

}_dbf.Close();

}

//Извлекаем классификаторы типов договораextract_type_class()

{ _dbf.CommandText = "select distinct name from sltipdog where name<>'' order by name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_type_class') is not null drop function select_type_class";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_type_class(@name varchar(50)) returns int as begin return(select count(ctname) from classtype where ctname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('type_class_insert') is not null drop procedure type_class_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure type_class_insert @type varchar(50) as begin if(dbo.select_type_class(@type)=0) insert into classtype (ctname) values (@type) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec type_class_insert '{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список регионов/районов/населённых пунктовextract_cadastr()

{request = "";//строка запроса_dbf.CommandText = "select code,name from region order by code";_dbf = cmd_dbf.ExecuteReader();

//Функция проверки наличия региона в базе данных_mdf.CommandText = "if object_id('select_region') is not null drop function select_region";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_region(@name varchar(50)) returns int as begin return (select count(rname) from regions where rname=@name) end";_mdf.ExecuteNonQuery();

//Функция проверки наличия района в базе данных_mdf.CommandText = "if object_id('select_area') is not null drop function select_area";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_area(@code int,@name varchar(50)) returns int as begin return (select count(aname) from areas where aname=@name and aid=@code) end";_mdf.ExecuteNonQuery();

//Функция проверки наличия населённого пункта в базе данных_mdf.CommandText = "if object_id('select_occupieditem') is not null drop function select_occupieditem";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_occupieditem(@code int,@name varchar(50)) returns int as begin return (select count(oiname) from occupieditem where oiname=@name and oiid=@code) end";_mdf.ExecuteNonQuery();

//Процедура добавления регион/район/населённый пункт_mdf.CommandText = "if object_id('cadastr_insert') is not null drop procedure cadastr_insert";_mdf.ExecuteNonQuery();= "create procedure cadastr_insert ";+= "@code varchar(10),@name varchar(50) as ";+= "begin ";+= "declare @length int set @length=len(@code) ";+= "if ((@length=3) and (substring(@code,1,1)='0')) if (dbo.select_region(@name)=0) insert into regions (rid,rname) values (@code,@name) ";+= "if (@length=6) if (dbo.select_area(@code,@name)=0) insert into areas (aid,aname,rid) values (@code,@name,substring(@code,1,3)) ";+= "if (@length>6) if (dbo.select_occupieditem(@code,@name)=0) insert into occupieditem (oiid,oiname,aid) values (@code,@name,substring(@code,1,6)) ";+= "end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();(rdr_dbf.Read())

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec cadastr_insert '{0}','{1}'",rdr_dbf["code"].ToString(),rdr_dbf["name"].ToString().Replace("'",""));_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Устанавливаем возрастное положениеinsert_age()

{[] age_str ={ "Взрослое население", "Детское население", "Взрослое и детское население" };_mdf.CommandText = "if object_id('select_age') is not null drop function select_age";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_age(@name varchar(50)) returns int as begin return (select count(caname) from citizensage where caname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if object_id('age_insert') is not null drop procedure age_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create procedure age_insert @status varchar(50) as begin if(dbo.select_age(@status)=0) insert into citizensage (caname) values (@status) end";_mdf.ExecuteNonQuery();(int i = 0; i < 3; i++)

{

{

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec age_insert '{0}'",age_str[i]);_mdf.ExecuteNonQuery();

}

{ }

}

}

//Извлекаем список страховых организацийextract_smo()

{request = "";//строка запроса_dbf.CommandText = "select m.code,m.name,(select distinct region from slreg where code=m.okr) as region,m.gd,m.gb,m.sasu,m.tel,m.dogovor, m.dbeg, m.dend from slmso m order by m.code";_dbf = cmd_dbf.ExecuteReader();

//Функция проверки наличия СМО в базе данных_mdf.CommandText = "if object_id('select_smo') is not null drop function select_smo";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_smo(@smoid char(2)) returns int as begin return(select count(smoid) from smo where smoid=@smoid) end";_mdf.ExecuteNonQuery();

//Процедура добавления новой СМО_mdf.CommandText = "if object_id('smo_insert') is not null drop procedure smo_insert";_mdf.ExecuteNonQuery();= "create procedure smo_insert @smoid char(2),@smoname varchar(50),@oiid int,@chief varchar(40),@chiefaccountant varchar(40),@mischief varchar(40), @telephone int,@tfomscontract varchar(8),@startdate datetime,@enddate datetime ";+= "as begin ";+= "if(year(@startdate)=1900) set @startdate=null if(year(@enddate)=1900) set @enddate=null ";+= "if(dbo.select_smo(@smoid)=0) ";+= "insert into smo (smoid,smoname,oiid,chief,chiefaccountant,mischief,telephone,tfomscontract,startdate,enddate) values (@smoid,@smoname,@oiid,@chief,@chiefaccountant,@mischief,@telephone,@tfomscontract,@startdate,@enddate) end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();telephone;start = new DateTime();//дата началаend = new DateTime();//дата окончания(rdr_dbf.Read())

{

{.TryParse(rdr_dbf["tel"].ToString(), out telephone);.TryParse(rdr_dbf["dbeg"].ToString(),out start);(start.Year == 1)= Convert.ToDateTime("1.1.1900");.TryParse(rdr_dbf["dend"].ToString(),out end);(end.Year == 1)= Convert.ToDateTime("1.1.1900");

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec smo_insert '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}'", rdr_dbf["code"].ToString(), rdr_dbf["name"].ToString(), rdr_dbf["region"].ToString(), rdr_dbf["gd"].ToString(), rdr_dbf["gb"].ToString(), rdr_dbf["sasu"].ToString(), telephone, rdr_dbf["dogovor"].ToString(), start.ToString("MM.dd.yyyy"), end.ToString("MM.dd.yyyy"));_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлекаем список пунктов регистра застрахованныхextract_prz()

{request="";//строка запроса_dbf.CommandText = "select p.code,p.name,p.q,(select distinct region from slreg where code=p.okr) as region,p.gd,p.gb,p.sasu,p.tel from slprz p order by p.code";_dbf = cmd_dbf.ExecuteReader();

//Функция проверки наличия ПРЗ в базе данных_mdf.CommandText = "if object_id('select_prz') is not null drop function select_prz";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_prz(@przid char(4)) returns int as begin return(select count(przid) from prz where przid=@przid) end";_mdf.ExecuteNonQuery();

//Процедура добавления ПРЗ_mdf.CommandText = "if object_id('prz_insert') is not null drop procedure prz_insert";_mdf.ExecuteNonQuery();= "create procedure prz_insert @przid char(4),@przname varchar(50),@smoid char(2),@oiid int,@chief varchar(20),@matrespon varchar(20),@pcoperator varchar(20),@telephone int ";+= "as begin "; += "if (dbo.select_prz(@przid)=0) ";+= "insert into prz (przid,przname,smoid,oiid,chief,matrespon,pcoperator,telephone) values (@przid,@przname,@smoid,@oiid,@chief,@matrespon,@pcoperator,@telephone) end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();tel = 0;//телефон(rdr_dbf.Read())

{

{.TryParse(rdr_dbf["tel"].ToString(),out tel);

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec prz_insert '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}'",rdr_dbf["code"],rdr_dbf["name"],rdr_dbf["q"],rdr_dbf["region"],rdr_dbf["gd"],rdr_dbf["gb"],rdr_dbf["sasu"],tel);_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлечение списка лечебно профилактических учрежденийextract_lpu()

{request = ""; //строка запроса_dbf.CommandText = "select i.code,i.name,(select distinct sl.name from slpod sl where sl.code=i.pod),i.tl1,(select distinct slt.name from sltlpu slt where slt.code=i.tl),i.nom,i.tuzo,i.okpo,i.okogu,i.okato,i.otr,i.okopf,(select distinct s.region from slreg s where s.code=i.okr) as region,i.addr,(select k.name from klpu k where k.code=i.kt) as klpu,i.krr,i.gv,i.gb,dd from infostr i order by i.code";_dbf = cmd_dbf.ExecuteReader();

//Функция поиска ключа подчинённости ЛПУ по наименованию_mdf.CommandText = "if object_id('select_lpu_subord') is not null drop function select_lpu_subord";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_subord(@lsname varchar(40)) returns int as begin return(select lsid from lpusubord where lsname=@lsname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа возрастного ограничения по наименованию_mdf.CommandText = "if object_id('select_citizens_age') is not null drop function select_citizens_age";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_citizens_age(@caname varchar(30)) returns int as begin return(select caid from citizensage where caname=@caname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа типа ЛПУ по наименованию_mdf.CommandText = "if object_id('select_lpu_type') is not null drop function select_lpu_type";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_type(@ltname varchar(40)) returns int as begin return(select ltid from lputype where ltname=@ltname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа категорий ЛПУ по наименованию_mdf.CommandText = "if object_id('select_lpu_categories') is not null drop function select_lpu_categories";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu_categories(@lcname varchar(15)) returns int as begin return(select lcid from lpucategories where lcname=@lcname) end";_mdf.ExecuteNonQuery();

//Функция проверки наличия ЛПУ в базе данных_mdf.CommandText = "if object_id('select_lpu') is not null drop function select_lpu";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu(@lpuid int) returns int as begin return(select count(lpuid) from lpulist where lpuid=@lpuid) end";_mdf.ExecuteNonQuery();

//Процедура добавления лечебно профилактического учреждения_mdf.CommandText = "if object_id('lpu_insert') is not null drop procedure lpu_insert";_mdf.ExecuteNonQuery();= "create procedure lpu_insert @lpuid int,@lpuname varchar(50),@lsname varchar(40),@age_id int,@ltname varchar(40),@ltnumber int,@tuzo int,@okpo int,@okogu int,@okato int,@code float,@okopf int,@oiid int,@address varchar(50),@lcname varchar(15),@regtar float,@maindoctor varchar(20),@chiefaccountant varchar(20),@date datetime ";+= "as begin ";+= "declare @age varchar(30) ";+= "if (@age_id=1) set @age='Взрослое население' ";+= "if (@age_id=2) set @age='Детское население' ";+= "if (@age_id=3) set @age='Взрослое и детское население' ";+= "if (year(@date)=1900) set @date=null ";+= "if (dbo.select_lpu(@lpuid)=0) ";+= "insert into lpulist (lpuid,lpuname,lsid,caid,ltid,ltnumber,tuzo,okpo,okogu,okato,code,okopf,oiid,address,lcid,regtar,maindoctor,chiefaccountant,date) values (@lpuid,@lpuname,dbo.select_lpu_subord(@lsname),dbo.select_citizens_age(@age),dbo.select_lpu_type(@ltname),@ltnumber,@tuzo,@okpo,@okogu,@okato,@code,@okopf,@oiid,@address,dbo.select_lpu_categories(@lcname),@regtar,@maindoctor,@chiefaccountant,@date) end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();code_ot = 0;//код отр.kof = 0;//коэффициент регистрационного тарифаdate = new DateTime();//дата регистрации(rdr_dbf.Read())

{

{.TryParse(rdr_dbf["otr"].ToString().Replace(",",decimal_sep).Replace(".",decimal_sep), out code_ot);.TryParse(rdr_dbf["krr"].ToString().Replace(",",decimal_sep).Replace(".",decimal_sep), out kof);.TryParse(rdr_dbf["dd"].ToString(),out date);(date.Year == 1)= Convert.ToDateTime("1.1.1900");

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec lpu_insert '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}'", rdr_dbf["code"].ToString(), rdr_dbf[1].ToString(), rdr_dbf[2].ToString(), rdr_dbf["tl1"].ToString(), rdr_dbf[4].ToString(), rdr_dbf["nom"].ToString(), rdr_dbf["tuzo"].ToString(), rdr_dbf["okpo"].ToString(), rdr_dbf["okogu"].ToString(), rdr_dbf["okato"].ToString(), code_ot.ToString().Replace(",", "."), rdr_dbf["okopf"].ToString(), rdr_dbf["region"].ToString(), rdr_dbf["addr"].ToString(), rdr_dbf["klpu"].ToString(), kof.ToString().Replace(",", "."), rdr_dbf["gv"].ToString(), rdr_dbf["gb"].ToString(), date.ToString("MM.dd.yyyy"));_mdf.ExecuteNonQuery();

}

{ }

}_dbf.Close();

}

//Извлечения списка договоровextract_contracts()

{request = "";//строка запроса_dbf.CommandText = "select ndog,rnp,regdat,(select distinct name from sltipdog where code=sltipdog) as ctname,inn,kpp,unemp,name,dbeg,dend,adres,boss,tel,otv,dopinf from dogovor order by ndog";_dbf = cmd_dbf.ExecuteReader();

//Функция поиска ключа типа классификатора по наименованию_mdf.CommandText = "if object_id('select_type_class') is not null drop function select_type_class";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_type_class(@ctname varchar(50)) returns int as begin return(select ctid from classtype where ctname=@ctname) end";_mdf.ExecuteNonQuery();

//Функция проверки наличия договора в базе данных_mdf.CommandText = "if object_id('select_contract') is not null drop function select_contract";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_contract(@clid int) returns int as begin return(select count(clid) from contractlist where clid=@clid) end";_mdf.ExecuteNonQuery();

//Процедура добавления договора_mdf.CommandText = "if object_id('contracts_insert') is not null drop procedure contracts_insert";_mdf.ExecuteNonQuery();= "create procedure contracts_insert @clid int,@regnum varchar(8),@registrationdate smalldatetime,@ctname varchar(50),@inn1 bigint,@inn2 bigint,@kpp bigint,@nw bit,@clname varchar(100),@startdate datetime,@enddate datetime,@address varchar(50),@chief varchar(40),@telephone bigint,@omsresponsible varchar(40),@addinf varchar(100) ";+= "as begin ";+= "declare @reg varchar(2) ";+= "declare @registrationid varchar(5) ";+= "set @reg=substring(@regnum,1,2) ";+= "set @registrationid=substring(@regnum,4,5) ";+= "if (year(@registrationdate)=1900) set @registrationdate=null ";+= "if (dbo.select_contract(@clid)=0) ";+= "insert into contractlist (clid,reg,registrationid,registrationdate,ctid,inn1,inn2,kpp,nw,clname,startdate,enddate,address,chief,telephone,omsresponsible,addinf) values (@clid,@reg,ltrim(@registrationid),@registrationdate,isnull(dbo.select_type_class(@ctname),null),@inn1,@inn2,@kpp,@nw,@clname,@startdate,@enddate,@address,@chief,@telephone,@omsresponsible,@addinf) end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();regdate = new DateTime();//дата регистрацииstart_reg = new DateTime();//дата начала действияend_reg = new DateTime();//дата окончания действияinn1, inn2;//ИННpos, kpp;tel;//телефон

//переменные для работы c Excelfile = "";count_string = 0;column = 0;<string[]> records_list = new List<string[]>();//список не обработанных записей(rdr_dbf.Read())

{

{.TryParse(rdr_dbf["regdat"].ToString(),out regdate);(regdate.Year==1)=Convert.ToDateTime("1.1.1900");

//выделяем инн=rdr_dbf["inn"].ToString();=rdr_dbf["inn"].ToString().IndexOf("/");(pos!= -1)

{= rdr_dbf["inn"].ToString().Substring(0, pos);= rdr_dbf["inn"].ToString().Substring(pos + 1, rdr_dbf["inn"].ToString().Length - pos - 1);

}= "0";(rdr_dbf["kpp"].ToString() == "")= 0;= Convert.ToInt32(rdr_dbf["kpp"]);.TryParse(rdr_dbf["dbeg"].ToString(),out start_reg);.TryParse(rdr_dbf["dend"].ToString(),out end_reg);.TryParse(rdr_dbf["tel"].ToString().Replace("-","").Trim(),out tel);

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec contracts_insert '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'", rdr_dbf["ndog"], rdr_dbf["rnp"], regdate.ToString("MM.dd.yyyy"), rdr_dbf["ctname"], inn1, inn2, kpp, rdr_dbf["unemp"], rdr_dbf["name"], start_reg.ToString("MM.dd.yyyy"), end_reg.ToString("MM.dd.yyyy"),rdr_dbf["adres"],rdr_dbf["boss"],tel,rdr_dbf["otv"],rdr_dbf["dopinf"]);_mdf.ExecuteNonQuery();

}

{[] temp_record = new string[16];//текущая запись_string++;(column = 0; column < 16; column++)_record[column] = rdr_dbf[column].ToString();_list.Add(temp_record);

}

}

//создание лог файла(count_string > 0)

{_file = new To_log_File();= workdirectory + "\\log_file_contract_" + DateTime.Now.Date.ToString().Substring(0, 10) + ".xls";_file.create_log_file(records_list, count_string, file, true);

}.Show("Импорт данных завершён.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);_dbf.Close();

}

//Извлечение списка застрахованныхextract_insureds()

{request="";//строка запроса_dbf.CommandText = "select s_pol,n_pol,(select distinct name from slprp where code=jt) as pmid,lprint,n_kms,dp,dendp,tel,namewk,(select name from tpdoc where code=tipd) as docname,sn_pasp,ft,fam,im,ot,dr,w,(select name from socpol where code=sp) as ssname,regp,ils,regs,ul,dom,kor,str,kv,(select distinct name from kateg where code=kt) as icname,gr,mcod,psdate,sysdate,sysoper,old_q from fizpers order by s_pol";_dbf = cmd_dbf.ExecuteReader();

//Функция поиска ключа признака движения полиса по наименованию_mdf.CommandText = "if object_id('select_pmid') is not null drop function select_pmid";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_pmid(@pmname varchar(40)) returns int as begin return(select pmid from policiesmovement where pmname=@pmname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа уточнения предприятия по наименованию_mdf.CommandText = "if object_id('select_specification') is not null drop function select_specification";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_specification(@slname varchar(25)) returns char(1) as begin return(select slid from specificationslist where slname=@slname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа типа документа по наименованию_mdf.CommandText = "if object_id('select_document') is not null drop function select_document";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_document(@docname varchar(50)) returns int as begin return(select docid from document where docname=@docname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа имени по наименованию_mdf.CommandText = "if object_id('select_name') is not null drop function select_name";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_name(@name varchar(20)) returns int as begin return(select nid from names where nname=@name) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа отчества по наименованию_mdf.CommandText = "if object_id('select_sname') is not null drop function select_sname";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_sname(@snname varchar(20)) returns int as begin return(select snid from secondnames where snname=@snname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа социального статуса по наименованию_mdf.CommandText = "if object_id('select_status') is not null drop function select_status";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_status(@ssname varchar(40)) returns int as begin return(select ssid from socialstatus where ssname=@ssname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа населённого пункта по наименованию_mdf.CommandText = "if object_id('select_occupieditem') is not null drop function select_occupieditem";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_occupieditem(@oiid int) returns int as begin return(select oiid from occupieditem where oiid=@oiid) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа улицы по наименованию_mdf.CommandText = "if object_id('select_streets') is not null drop function select_streets";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_streets(@slname varchar(50)) returns int as begin return(select slid from streetslist where slname=@slname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа категории застрахованного по наименованию_mdf.CommandText = "if object_id('select_categories') is not null drop function select_categories";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_categories(@icname varchar(70)) returns int as begin return(select icid from insuredcategories where icname=@icname) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа ЛПУ по наименованию_mdf.CommandText = "if object_id('select_lpu') is not null drop function select_lpu";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_lpu(@lpuid char(7)) returns char(7) as begin return(select lpuid from lpulist where lpuid=@lpuid) end";_mdf.ExecuteNonQuery();

//Функция поиска ключа СМО по наименованию_mdf.CommandText = "if object_id('select_smo') is not null drop function select_smo";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_smo(@smoid char(2)) returns char(2) as begin return(select smoid from smo where smoid=@smoid) end";_mdf.ExecuteNonQuery();

//Функция проверки наличия застрахованного в базе данных_mdf.CommandText = "if object_id('select_insureds') is not null drop function select_insureds";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function select_insureds(@clid int,@number int) returns int as begin return(select count(clid) from insuredlist where clid=@clid and number=@number) end";_mdf.ExecuteNonQuery();

//Процедура добавления застрахованного_mdf.CommandText = "if object_id('insureds_insert') is not null drop procedure insureds_insert";_mdf.ExecuteNonQuery();= "create procedure insureds_insert @clid int,@number int,@pmname varchar(40),@pr bit,@kms bigint,@startdate datetime,@enddate datetime,@telephone bigint,@slname varchar(25),@docname varchar(50),@docnumber varchar(20),@os bit,@surname varchar(20),@name varchar(20),@second varchar(20),@birthdate datetime,@male bit,@ssname varchar(40),@oiid1 int,@ils int,@oiid2 int,@strname varchar(50),@house int,@cas char(5),@str char(5),@apartment int,@icname varchar(70),@pigroup int,@lpuid char(7),@outdate datetime,@changedate datetime,@operator int,@smoid char(2) ";+= "as begin ";+= "if(year(@outdate)=1900) set @outdate=null ";+= "if(dbo.select_insureds(@clid,@number)=0) ";+= "insert into insuredlist (clid,number,pmid,pr,kms,startdate,enddate,telephone,slid2,docid,docnumber,os,surname,nid,snid,birthdate,male,ssid,disterr,ils,resterr,slid,house,cas,str,apartment,icid,pigroup,lpuid,outdate,changedate,operator,smoid) values (@clid,@number,dbo.select_pmid(@pmname),@pr,@kms,@startdate,@enddate,@telephone,dbo.select_specification(@slname),dbo.select_document(@docname),@docnumber,@os,@surname,dbo.select_name(@name),dbo.select_sname(@second),@birthdate,@male,dbo.select_status(@ssname),dbo.select_occupieditem(@oiid1),@ils,dbo.select_occupieditem(@oiid2),dbo.select_streets(@strname),@house,@cas,@str,@apartment,dbo.select_categories(@icname),@pigroup,dbo.select_lpu(@lpuid),@outdate,@changedate,@operator,dbo.select_smo(@smoid)) end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();start_reg=new DateTime();//дата регистрацииend_reg = new DateTime();//дата окончанияbirthdate = new DateTime();//дата рожденияsurrender = new DateTime();//дата сдачиchange = new DateTime();//дата измененияtelephone=0;//телефонos = false;male = false;//пол (муж. - true, жен. - false)ils = 0;house=0, apartment=0;//дом, квартираgroupe=0, oper=0;//группа инвалидности, оператор

//переменные для работы c Excelfile = "";count_string = 0;column = 0;<string[]> records_list = new List< string[]>();//список не обработанных записей(rdr_dbf.Read())

{

{.TryParse(rdr_dbf["dp"].ToString(),out start_reg);.TryParse(rdr_dbf["dendp"].ToString(),out end_reg);.TryParse(rdr_dbf["tel"].ToString(),out telephone);(rdr_dbf["ft"].ToString().Replace("*", "True") == "True")= true;= false;.TryParse(rdr_dbf["dr"].ToString(),out birthdate);(rdr_dbf["w"].ToString() == "1")= true;= false;.TryParse(rdr_dbf["ils"].ToString(), out ils);.TryParse(rdr_dbf["dom"].ToString(), out house);.TryParse(rdr_dbf["kv"].ToString(), out apartment);.TryParse(rdr_dbf["gr"].ToString(), out groupe);.TryParse(rdr_dbf["sysoper"].ToString(), out oper);.TryParse(rdr_dbf["psdate"].ToString(), out surrender);(surrender.Year == 1)= Convert.ToDateTime("1.1.1900");.TryParse(rdr_dbf["sysdate"].ToString(), out change);

//вызов хранимой процедуры для добавления записи_mdf.CommandText = string.Format("exec insureds_insert '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','{23}','{24}','{25}','{26}','{27}','{28}','{29}','{30}','{31}','{32}'", rdr_dbf["s_pol"], rdr_dbf["n_pol"], rdr_dbf["pmid"], rdr_dbf["lprint"], Convert.ToInt64(rdr_dbf["n_kms"]), start_reg.ToString("MM.dd.yyyy"), end_reg.ToString("MM.dd.yyyy"), telephone, rdr_dbf["namewk"], rdr_dbf["docname"], rdr_dbf["sn_pasp"], os, rdr_dbf["fam"], rdr_dbf["im"], rdr_dbf["ot"], birthdate.ToString("MM.dd.yyyy"), male, rdr_dbf["ssname"], rdr_dbf["regp"], ils, rdr_dbf["regs"], rdr_dbf["ul"], house, rdr_dbf["kor"], rdr_dbf["str"], apartment, rdr_dbf["icname"], groupe, rdr_dbf["mcod"], surrender.ToString("MM.dd.yyyy"), change.ToString("MM.dd.yyyy"), oper, rdr_dbf["old_q"]);_mdf.ExecuteNonQuery();

}

{[] temp_record = new string[33];//текущая запись_string++;(column = 0; column < 33; column++)_record[column] = rdr_dbf[column].ToString();_list.Add(temp_record);

}

}

//создание лог файла(count_string > 0)

{_file = new To_log_File();= workdirectory + "\\log_file_insured_" + DateTime.Now.Date.ToString().Substring(0, 10) + ".xls";_file.create_log_file(records_list, count_string, file,false);(MessageBox.Show("Импорт данных завершён.\nКоличество не обработанных записей: " + count_string + " \nОткыть лог файл?", "Информация", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes).Diagnostics.Process.Start(file);

}.Show("Импорт данных завершён.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);_dbf.Close();

}

#endregion



Введение В соответствие с Законом РФ «О медицинском страховании граждан в Российской Федерации» обязательное медицинское страхование (ОМС) явля

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ