Реферат: Разработка автоматизированной системы учета выбывших из стационара - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Разработка автоматизированной системы учета выбывших из стационара

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 2339 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

68 Аннотация Дипломный проект посвящен разработке автоматизированной ин формационной системы учета выбывших из стационара . Система базируется на форме № 066/у Министерства Здравоохранения России , имеющей название " Статистическая карта выбывшего из стационара ". Программа предназначена для автоматизации процесса обработки формы № 066/у и формирования на ее основе отчетных форм для стационара. Система предназначена для работы в отделениях медстатистики больниц и не требует от пользователя дополнительных знаний по программированию , она предоставляет ему удобный экранный интерфейс для работы с многофайловой базой данных. База данных содержит информацию о выбывших больных , адекватную информации в форме № 066/у МЗ России . На основании этой информации система позволяет формировать отчетные документы по фиксированным формам . Документы форми руются за любой отчетный период (дни , месяцы , годы ), по всему стационару или по любому его отделению. Система прошла опытную эксплуатацию в Детской городской клинической больнице N13 им . Н.Ф . Филатова и передана для внедрения в отделении медстатистики этой больницы. Программное обеспечение системы написано на языке программирования Clipper. Экономико-организационная часть включает в себя анализ информации по теме дипломного проекта , расчет годового экономического эффекта и рекламу разработки. Отчетные матер иалы к дипломному проекту включают пояснительную записку , 5 приложений и графический материал. Содержание Введение 4 1. Анализ существующих методов создания информационных систем в медицине 6 1.1. Классификация МИС 6 1.2. Методология создания автоматизированных больничных информационных систем 7 1.2.1. Декомп озиция АБИС 8 1.2.2. Интеграция компонент АБИС 9 1.3. Архитектура инте грированных АБИС 10 1.4. Эффективность применения АБИС 11 2. Техноло гия работы отдела Медстатистики по обработке данных о выбывших из стационара , выбор технических и программных средств 13 2.1. Технологическая схема работы отдела 13 2.2. Формализованное описание документооборота 15 2.3. Оценка пото ков информации , проходящих через отдел Медстатистики 17 3. Разработка структуры базы данных (БД ) и алгоритмов обработки 18 3.1. Структура БД 18 3.1.1. Файловая структура таблиц 19 3.1.2. Сохранность БД 21 3.2. Алгоритм программы 22 4. Описание программной реализации 25 4.1. Описание программы 25 4.1.1. Ввод текущей даты 26 4.1.2. Работа в главном меню 26 4.1.3. Ввод новых данных 27 4.1.4. Редактирование ранее введенной информации 28 4.1.5. Просмотр БД 28 4.1.6. Удаление информации 29 4.1.7. Получение отчетных форм 29 4.1.8. Настройка 32 4.1.9. Выход из программы 33 4.2. Результаты опытной эксплуатации 33 5.Экономико-организационная часть 35 5.1.Анализ потока публикаций 35 5.2. Расчет годового экономического эффекта 36 Заключение 40 Литература. 42 Приложение 1 43 “Техническое задание на разработку автоматизированной информационной системы учета выбывших из стационара (форма № 066/у )” 43 Приложение 2 77 Описание применения “Автоматизированной системы учета выбывших из стационара” 77 Приложение 3 83 Руководство оператора “Автоматизированной системы учета выбывших из стационара” 83 Приложение 4 92 Руководство системного программиста “Автоматизированной системы учета выбывших из стационара” 92 Приложение 5 107 Текст и описание программы : “Автоматизированная система учета выбывших из стационара” 107 Введение В последнее время все более возрастает интерес к использованию средств вычислительной техники в медицине . Это объясняется теми возможностями , которые несут в себе вычислительные средства , в первую очередь современные персональные ЭВМ . Эти ЭВМ являются удобным средством для автоматизации обраб о тки информации в различных областях человеческой деятельности . Габариты персональных компьютеров позволяют разместить их непосредственно на рабочем месте пользователя , а удобство общения с ПЭВМ делает их доступными для широкого круга пользователей-непрогр а ммистов. Современные ПЭВМ имеют быстродействие и объем оперативной памяти достаточные для обработки больших массивов информации , их применение в таких областях медицины как , например , Медстатистика , позволяет значительно сократить затраты ручного труда , по высить качество и правильность работы , сократить время получения конечного результата. Именно этой проблеме и посвящен дипломный проект . Его целью была разработка автоматизированной системы выбывших из стационара , в основе которой лежит форма № 066/у Минист ерства Здравоохранения России : "Статистическая карта выбывшего из стационара ". О важности данной разработки говорит тот факт , что прикладное программное обеспечение информационных систем , необходимое учреждениям здравоохранения , редко может быть закуплено в готовом виде и так как практически все учреждения здравоохранения обладают своей спецификой. Выполнение дипломного проекта потребовало решения следующих основных задач : Ш проведение анализа особенностей и специфики автоматизированных информационных сист ем в медицине ; Ш анализ технологии работы автоматизируемого подразделения ; Ш определение необходимой входной и выходной информации ; Ш разработка структуры базы данных ; Ш разработка и отладка программы ; Ш проведение опытной эксплуатации и внедрение у з аказчика ; Ш определение экономического эффекта от внедрения разработанных программных средств. Содержание пояснительной записки в значительной степени определяется перечисленными задачами. 1. Анализ существующих методов создания информационных систем в медицине Обеспечение здоровья населения требует постоянного сбора и хранения данных . Затраты на создание и функционирование си стемы сбора , хранения , обработки и передачи информации составляют значительную и постоянно возрастающую часть бюджета лечебных учреждений . По одним оценкам [1] эти затраты составляют от 10 до 20% от суммарных затрат на лечение , по другим они составляют до 33% бюджета лечебных учреждений . Для снижения этих затрат , дальнейшего совершенствования обработки и представления информации , а также для повышения эффективности управления лечебными учреждениями разрабатываются и внедряются разнообразные медицинские инф о рмационные системы (МИС ). 1.1. Классификация МИС Согласно [1], общим для всех МИС является рутинный систематический сбор данны х , интегрируемых в информацию , обеспечивающую принятие управляющих административных и медицинских решений . В той же работе [1] описывается следующая классификация МИС : Ш амбулаторные МИС ; Ш МИС стационаров ; Ш МИС социального страхования здоровья населен ия ; Ш национальные МИС. Амбулаторные МИС обеспечивают сбор данных о каждом визите пациента к врачу , включая диагноз , оказанные медицинские услуги и предписанные назначения . Эти данные используются при повторных визитах , планирования работы , выписке счета пациенту и т.д. МИС стационаров обеспечивают сбор данных для выписного эпикриза , в том числе краткий анамнез , диагнозы , продолжительность госпитализации , состояние при выписке и перечень оказанных медицинский услуг вместе с их стоимостью . Эти данные исполь зуются при повторной госпитализации , для учета и планирования работы подразделений и отдельных врачей , для расчетов с пациентами и т.д. МИС социального страхования здоровья населения собирают данные обо всех медицинских услугах , стоимость которых требуется возместить из бюджета страховой компании , и обеспечивают расчеты с лечебными учреждениями. Национальные МИС собирают данные о функционировании медицинских учреждений и обобщают эту информацию для руководства национальным сектором здравоохранения. 1.2. Методология создания автоматизированных больничных информационных систем Современная автоматизированная больничная информационная система (АБИС ) представляет собой тесно взаимодействующее сочетание МИС стационара и амбулаторной МИС . АБИС - это больничная медицинская и административная информационная система , в функции которой входят сбор , обработка и передача информации в присущих б ольнице целях. АБИС обладает высокой сложностью и в целях управляемости , как в техническом , так и в организационном отношениях целесообразнее разделить ее на отдельные системы или подсистемы , которые можно создавать поэтапно . Время показало , что принцип по этапного создания АБИС значительно облегчил их разработку и внедрение и имел определенные экономические выгоды . Принцип заключается в том , что вначале осуществляется декомпозиция АБИС , т.е . ее подразделение на отдельные компоненты , а затем интеграция этих компонент в единую систему. АБИС , спроектированная по такому принципу , получила название "интегрированная АБИС ". 1.2.1. Декомпозиция АБИС Существует много подходов к декомпозиции АБИС . Все они опираются на сочетание двух принципов ее разделения на отдельные взаимосвязанные компоненты : горизонтального и вертикального [1] . Горизонтальный принцип соответствует созданию отдельных си стем , ориентированных на нужды конкретного пользователя или достаточно однородной группы пользователей , например , подразделяют АБИС на административную систему , лабораторную систему и группу специализированных систем (аптечная система , система диетпитания, консультационные системы и пр .). Вертикальный или функциональный принцип деления соответствует выделению систем , каждая из которых имеет определенный набор функций и может выполнять их по запросу любого пользователя системы . Примером может служить следующ ее вертикальное деление АБИС на 5 подсистем , каждая из которых наделена специфической функцией : 1) обеспечение выполнения медицинских действий ; 2) эксплуатация медицинских данных в целях увеличения объема медицинских знаний в лечебном учреждении ; 3) об еспечение материально-технического и медицинского снабжения ; 4) оперативное планирование административной деятельности ; 5) оперативное планирование лечебной деятельности. Исторически преобладающим оказался горизонтальный подход , при котором вначале созда ются автоматизированные системы отдельных подразделений и служб , которые затем объединяются в интегрированную АБИС . Так , первые интегрированные АБИС появились в результате слияния административно-финансовых систем с независимо разрабатывающимися автоматиз и рованными системами диагностических подразделений больниц , в первую очередь клинических лабораторий и отделений лучевой диагностики. 1.2.2. Интеграция компонент АБИС Интеграция к омпонент АБИС является не менее сложным предприятием , чем ее декомпозиция на отдельные компоненты. Выделяют три основных требования к интеграции систем АБИС [1]: Ш пациент не должен ощущать влияния разделения на подсистемы ; назначения , предписанные ему в разных подразделениях , должны быть согласованы между собой (интеграция на уровне пациента ); Ш пользователь АБИС должен иметь возможность облегченного доступа (при наличии соответствующих полномочий ) к функциям различных подсистем , ввод данных должен осущ ествляться однократно , и при этом система должна обеспечивать целостность и непротиворечивость информации (интеграция на уровне пользователей АБИС ); Ш информация должна храниться в единой базе данных и предоставляться по мере необходимости любой заинтерес ованной в ней подсистеме (техническая интеграция ). Интеграция не является самоцелью и должна вводится для улучшения функционирования больницы. Отдельные системы интегрированной АБИС вводятся в эксплуатацию , как правило , поэтапно . Состав АБИС , сроки и после довательность ввода ее отдельных систем в эксплуатацию зависят от приоритетов , устанавливаемых руководством больницы , и имеющихся финансовых возможностей. 1.3. Архитектура интегрированных АБИС Можно выделить следующие модели архитектуры АБИС : Ш модель с централизованной обработкой данных ; Ш модель с распределенной обработкой данных. АБИС модели с централизованной обработкой данных выполнены на базе одной или нескольких тесно св язанных больших ЭВМ или супер-ЭВМ , которые выполняют централизованную обработку всех потоков информации. Достоинством централизованной обработки данных является относительная простота организации доступа к данным о пациенте , отсутствие избыточности хранен ия информации . К недостаткам можно отнести необходимость значительных начальных капиталовложений , в том числе на оборудование машинного зала и стандартное программное обеспечение , а также определенные трудности развития прикладного программного обеспече н ия АБИС. АБИС модели с распределенной обработкой данных выполнены на базе сети малых или больших ЭВМ , каждая из которых имеет собственную базу данных. Основное достоинство этой модели состоит в том , что средства вычислительной техники могут приобретаться п остепенно и компоненты АБИС могут быть внедрены поэтапно . Однако распределенность базы данных по нескольким ЭВМ приводит к усложнению разработки прикладного программного обеспечения АБИС и определенным трудностям обеспечения бесперебойной эксплуатации обо р удования , а также эксплуатации баз данных. Архитектура многих АБИС не укладывается в рамки описанных выше моделей , они имеют смешанную архитектуру . Например , в связи с широким распространением ПЭВМ в ряде АБИС они используются в качестве терминалов централ ьных ЭВМ , для решения локальных задач в нуждах отдельных подразделений больницы или даже отдельных специалистов , а также для предоставления справочно-информационных услуг . Имеются примеры совместного использования центральной ЭВМ и локальной сети ПЭВМ , пр е дназначенной для диспетчеризации амбулаторного приема [1]. 1.4. Эффективность применения АБИС Будучи средством организации труда персонала больницы АБИС не оказывает прямого влия ния на лечение пациента . Однако система позволяет активно влиять на процессы принятия персоналом больницы как административных , так и медицинских решений . В качестве целей создания АБИС можно привести следующие : Ш прямая экономия зарплаты персонала ; Ш ко свенная экономия за счет избавления медицинских сотрудников от рутинной канцелярской работы ; Ш улучшение качества медицинского обслуживания за счет большей точности , более широкого распространения информации и увеличения ее оперативности ; Ш уменьшение чи сла избыточных услуг ; Ш более полное использование ресурсов ; Ш лучшее снабжение ресурсами ; Ш общее улучшение качества обслуживания. Если раньше основным назначением АБИС было улучшение управления больницей , то теперь - это улучшение качества лечения. Вн едрение АБИС не приводит к снижению бюджетных затрат , а лишь способствует уменьшению их роста . Основной потенциал рационализации функционирования больницы заключается в снижении расходов на зарплату персонала , которая составляет 60-70% бюджета больницы [1 ] . Такое снижение может быть достигнуто только за счет изменения в организации труда , распределения работ и ответственности за их выполнение . Поскольку наибольшие штаты и средства (за исключением собственно лечения ) отвлекает обработка информации , на что р а сходуется до 15-25% бюджета больницы , то потенциальный экономический эффект внедрения АБИС достаточно высок. . 2. Технология работы отдела Медстатистики по обработке данных о выбывших из стационара , выбор технических и программных средств 2.1. Технологическая схема работы отдела Для обеспечения оперативной информацией различных категорий сотрудников бол ьницы и формирования отчетных материалов о лечебной деятельности отделений стационара в нем существует отделение медстатистики. Рассмотрим технологию работы медстатистики при поступлении информации из отделений стационара . На рис .1 представлена структура ф ункциональной связи отдела с другими подразделениями больницы при поступлении информации о выбывших больных. Рис . 1 . Технологическая схема работы от дела медстатистики. В медстатистику поступают истории болезни (ИБ ) с заполненными врачами статистическими картами на выбывших из стационара (форма № 066/у ). Форма № 066/у заполняется на каждого выбывшего . На каждого иногороднего выбывшего заполняется дополни тельно еще одна форма № 066/у . В подразделении медстатистики производится сверка поступивших ИБ на выбывших с данными журнала на выбывших , умерших и переведенных (ЖВ ). В ЖВ вносятся отметки о наличии ИБ на выбывших . Далее составляется справка о непоступивш и х ИБ на выбывших больных , которая передается обратно в отделения . Поступившие ИБ отправляются в архив на хранение . Формы № 066/у складываются в папки отделений для составления отчетов о деятельности стационара . Второй экземпляр формы № 066/у на иногородних б ольных отправляется в Боткинскую больницу для дальнейшей статобработки . Далее , на основании формы № 066/у в подразделении медстатистики готовятся следующие отчетные формы для отделений стационара , бухгалтерии и администрации больницы : Ш ежемесячный отчет п о каждому отделению ; Ш годовые отчеты по всему стационару (см . Приложение 5): 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных , поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учр еждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных , выбывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология больных , переведенных из других стационаров ; 8. Нозологическая та блица умерших ; 9. Нозология больных умерших по возрастам ; 10. Нозология умерших в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекционных заболеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение выбывших иногородних больных по каналам госпитализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , переведенных в другие стационары , и число лиц , госпитализирова нных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа после рождения , до 1 года , в том числе от пневмонии ; 18. Число бол ьных инфарктом миокарда , поступивших в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременных, рожениц и родильниц , из них число умерших от заболеваний , ос ложняющих беременность и роды. Таблицы 1-3,16-19 формируются для написания отчетов о деятельности стационара для администрации больницы и в вышестоящие организации , 4-15 - только для администрации больницы. 2.2. Форм ализованное описание документооборота Форма № 066/у является обязательным документом для любого стационара Российской Федерации и имеет полное название "Статистическая карта выбывшего из стационара ". Она заполняется на каждого выбывшего и заключает в себе следующую информацию : 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. Фамилия И.О . лечащего врача. 2.3. Оценка потоков информации , проходящих через отдел Медстатистики В 1998 году план на пролеченных больных в ДГКБ составил 22 400 человек . На каждого пролеченного больного должна быт ь сформирована ф.№ 066/у . Объем одной этой формы составляет около 1 КБ , тогда объем поступающей информации по ф.№ 066/у в год составит порядка 19 МБ . При этом в медстатистику поступает и другая информация : о движении больных и коечного фонда (ф .7), а также и нформация из хирургического центра , районной поликлиники и травмопункта . Самый большой объем здесь имеет форма 7. Если считать , что объем одной ф .7 также равен 1 КБ , то в день объем поступившей информации по ф .7 составит 15 КБ . Если полагать , что число раб очих дней в году 273, то годовой объем информации , поступившей в медстатистику по ф .7 составит порядка 4 МБ . Тогда общий объем информации составит 23 МБ . При этом объем информации , поступающий в день , составит порядка 0.1 МБ . В стационар из медстатистики п оступает порядка 0.003 МБ информации , в том случае , если администрации передается информация , сформированная на основе ф .7. Учитывая характер работы стационара , следует предположить , что основная информация будет проходить в сети с 8 до 14 часов . При этом интенсивность потока информации составляет порядка 0.036 Кбит /с . При пропускной способности стандартной сети Ethernet 10 Мбит /с этот поток не представляет большой нагрузки на сеть . Следует ожидать , что не рассмотренные оценки потоков информации из хирургич еского центра , районной поликлиники и травмопункта не окажут существенного влияния на загрузку сети. 3. Разработка структуры базы данных (БД ) и алгоритмов обработки 3.1. Структура БД Для хранения информации по выбывшим больным была разработана БД , концептуальная модель которой представлена на рис .2 . Рис . 2 . Концептуальная модель базы данных. БД является распределенной - она состоит из трех таблиц : Ш ТАБЛИЦЫ "DIA66" (содержащей диагнозы заболеваний больного ); Ш ТАБЛИЦЫ "OP66" (содержащей названия операций больного ); Ш ТАБЛИЦЫ "KARTA" (содержащей всю остальную информацию ). Связь осуществляется по номеру истории болезни . Каждому выбывшему соответствует одна запись в таблице "KARTA" и такое количество записей в таблицах "DIA66" и "OP66", сколько диагнозов ему проставлено и сколько операций ему было проведено соответственно . Другими словами между таблицей "KARTA" и таблицей "DIA66", а также между таблицей "KARTA" и таблицей "OP66" существует связь "один ко многим ". Для уменьшения о бъема , отводимого для хранения одной записи в таблице "KARTA", используется следующее : заполнение ф . № 066/у в программе идет в автоматизированном режиме , т.е . все пункты ф.№ 066/у (где это возможно ) заполняются с помощью выбора одной из нескольких альтернат ив , представленных в виде меню . Совокупность всех альтернатив называется справочником . Заполнение справочника происходит на самом раннем этапе эксплуатации программы . Каждой альтернативе в справочнике соответствует уникальный номер или код (поэтому справо ч ники иногда называют кодификаторами ), т.е . между альтернативой и ее кодом существует взаимооднозначное соответствие . В виду этого в БД хранятся не сами альтернативы , а их коды . Существуют отработанные процедуры работы со справочниками , в частности разрабо т анные сотрудниками кафедры 29. 3.1.1. Файловая структура таблиц Каждая таблица включает в себя файл (ы ) данных и файл (ы ) индексов . Таблица для хранения данных по пациентам содерж ит файлы : Ш КА RТА 66.DBF и КА RТА 66.NTX ; Ш DIA66.DBF и DIA66.NTX ; Ш OP66.DBF и OP66.NTX. Структура файла KARTA66.DBF: ИМЯ ПОЛЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_IB C 7 номер истории болезни FAM C 30 фамилия больного F_S_NAME C 30 имя , отчество больного DATE_B D 8 дата рождения HOUR_B N 2 часы рождения MINS_B N 2 минуты рождения OLD N 2 код возраста POL N 1 код пола MASSA C 6 масса PLACE_LIV C 60 адрес RAION N 2 код района CITY_VIL N 1 код : горожанин /селянин DIRECT1 N 2 код направляющего учреждения DIRECT2 N 2 код стационара STATE N 2 код государства WHY N 1 код причины направления DEPARTMENT N 2 код отделения стационара KOIKA N 2 код профиля койки PASS N 1 код состояния поступления TIME N 1 код поступления после болезни DATE_IN D 8 дата посту пления в стационар HOUR_IN N 2 часы поступления MINS_IN N 2 минуты поступления END1 N 1 код исхода END2 N 1 код причины исхода END3 N 2 код учреждения для перевода DATE_END D 8 дата исхода HOUR_END N 2 часы исхода MINS_END N 2 минуты исхода OLD_D N 2 возраст на момент смерти ALL_DAY N 2 количество дней в стационаре DIA_DIRECT C 4 направляющий диагноз NUM_COME N 1 код числа поступлений RW_DATE D 8 дата анализа на RW RW_REZ N 1 код результата RW FAM_DOCTOR N 2 код фамилии лечащего врача Индекс ное выражение для файла : NUM_IB. Структура файла DIA66.DBF: ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_IB C 7 номер истории болезни KOD1 C 1 код заболевания KOD2 C 1 код диагноза SHIFR C 4 шифр заболевания COMM1 M 10 названия заболеваний Индексное выражение для фа йла : NUM_IB+KOD1. Структура файла OP66.DBF : ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_IB C 7 номер истории болезни SHIFR C 4 шифр операции DATA D 8 дата операции COMM M 10 название операции Индексное выражение для файла : NUM_IB. 3.1.2. Сохранность БД В целях поддержания сохранности и целостности БД были разработаны организационно - технические мероприятия , заключающиеся в создании программы сохранения на дискеты основных баз данн ых автоматизированной системы и обучения работы с ней пользователей , а также рекомендации по ее применению , заключающиеся в следующем : по окончанию сеанса работы с системой желательно сохранить вновь введенную информацию на дискеты для возможности ее восст ановления , если жесткий диск выйдет из строя . При сохранении информации на дискеты переносятся все основные базы данных полностью , причем каждая база данных на свою дискету . Если объема одной дискета будет не достаточно для сохранения какой-либо базы данн ы х , то эта база данных будет сохранена на нескольких дискетах . Программа сохранения не требует от персонала специальных навыков : необходимо только запустить ее и вставлять /вынимать дискеты , реагируя на сообщения , которые она будет выдавать на экран . Частот у запусков программы сохранения определяет сам пользователь. 3.2. Алгоритм программы Система предназначена для автоматизации заполнения формы № 066/у Минздрава России и генерации на ее основе типовых отчетов для стационаров. В соответствии с ТЗ на разработку системы взаимодействие программы с пользователем должно быть реализовано по следующему алгоритму : 1) Ввод текущей даты ; 2) Выбор из главного меню одной из следующих функций : а ) Ввод данных (перечень данных см . пункт 2.2) и печать ; б ) Коррекция ранее введенных данных ; в ) Поиск данных больного по N ИБ или по фамилии. г ) Получение отчетных форм (за отчетный период с <число , месяц , год > по <число , месяц , год >) ; д ) Выход из программ ы. После выполнения каждой функции необходимо обеспечить возврат в главное меню и выбор любой другой функции. При выборе функции "Выход из программы " работа программы завершается. При выборе функции "Коррекция ранее введенных данных " пользователь может отк орректировать данные , введенные ранее. Предусмотрен также режим "Настройка программы ", который должен обеспечивать адаптацию программы к изменяющимся справочникам , используемым в программе . Режим настройки должен быть скрыт от конечного пользователя програ ммы и доступен лишь администратору БД. Разработанный алгоритм программы приведен на рис .3. Алгоритм процедуры формирования отчетных документов приведен на рис .4. Рис . 3 .А лгоритм программы. Рис . 4 . А лгоритм формирования отчетов. 4. Описание программной реализации 4.1. Описание программы Как уже отмечалось ранее , автоматизированная система выбывшего из стационара предназначена для автоматизации процесса заполнения формы № 066/у Минздрава России и формирования на ее основе отчетных форм для стационара. Программа обеспечивает : Ш ввод , хранение , коррекцию данных по выбывшим из стационар а больным ; Ш оформление печатных документов по данным о выбывших больных за отчетный период ; Ш настройку на структуру конкретного стационара. Она ориентирована на пользователя , не являющегося профессионалом в области вычислительной техники. Система реали зована для персональных ЭВМ IBM PC XT/AT со следующим набором периферийных устройств : принтер ; дисплей с платой адаптера EGA / VGA , накопитель на жестком диске объемом не менее 80 Мб . Минимальный объем свободной оперативной памяти 540 Кб. Программа написана на языке программирования Clipper и работает под управлением операционной системой MS DOS версии 3.1 и выше. Для запуска программы необходимо набрать в командной строке => karta и нажать клавишу ENTER. Об успешном запуске программы свидетельствует приглаше ние ввести дату (см . пункт 4.1.1.). Процесс работы с системой разбивается на несколько этапов : Ш ввод текущей даты ; Ш работа в главном меню ; Ш ввод новых данных ; Ш коррекция введенных данных ; Ш формирование и печать отчетов за выбранный период ; Ш нас тройка программы на структуру конкретного стационара ; Ш выход из программы 4.1.1. Ввод текущей даты При запуске программы на экране появляется заставка с надписью “ СЕГОДНЯ : ” и некоторой датой . На машинах , снабженных автономными встроенными часами , будет выведена текущая дата, на других машинах выводится дата , установленная последней системной командой "DATE". Для подтверждения даты нажмите клавишу ENTER, для изменения - наберит е нужную дату и нажмите клавишу ENTER. Можно также ввести любую дату , а не только текущую. 4.1.2. Работа в главном меню Главное меню программы содержит следующие пункты : Ш созда ние ; Ш удаление ; Ш редактирование ; Ш навигация ; Ш отчеты ; Ш выход. Перемещение по пунктам главного меню осуществляется клавишами перемещения курсора : стрелка вправо, стрелка вниз и стрелка влево , стрелка вверх. Выбор и отказ от выбора пункта меню осущ ествляется клавишами ENTER и ESC соответственно. В нижней части экрана имеется подсказка о тех действиях , которые будут производиться при выборе соответствующего пункта главного меню. 4.1.3. Ввод новых данных Если выбран пункт главного меню " Создание ", то можно ввести данные в новую карту , выбывшего из стационара (другими словами , заполнить новую форму № 066/у ). Высвечивается приглашение для введения номера истории болезни вновь вы бывшего из стационара больного . Новая карта будет создана только в том случае , если информации о больном , с указанным номером истории болезни , в базе данных нет. После этого на экране появляется текст , который содержит основные пункты формы № 066/у , подлежа щие заполнению (см . пункт 2.2). Движение по этому тексту осуществляется клавишами перемещения курсора , при этом по экрану перемещается "световое пятно ". Для заполнения нужного пункта надо подвести "световое пятно " к данному пункту текста и нажать клавишу E NTER. Если данный пункт формы № 066/у может содержать одно из наперед заданных значений , то на экран выводятся все эти значения и пользователь , используя клавиши перемещения курсора и клавишу ENTER, осуществляет выбор (используя клавишу ESC, можно выйти из данного пункта без выбора какого-либо значения ). Все эти , "наперед заданные " значения хранятся в справочниках . Если данный пункт может содержать любое значение , то пользователю предлагается ввести его самому. Возврат в основное меню происходит по нажатию к лавиши F10. Если некоторые пункты (а именно , те которые нужны для составления отчетных документов ) не будут заполнены , то вновь введенная форма не будет сохранена . При попытке выхода , в этом случае , пользователю будет предложено заполнить нужные пункты. 4.1.4. Редактирование ранее введенной информации Выбрав пункт главного меню " Редактирование ", пользователь может произвести коррекцию любой ранее введенной формы , хранящейся в БД . Для этого ему предлагается либо ввести номер истории болезни , либо фамилию интересующего его больного. Коррекция осуществляется по тем же правилам , что о при "Создании " (см . пункт 4.1.3.). Для поиска № 066/у формы интересующего больного , пользователь может использовать "Навигатор " БД (см . пункт 4.1.5.). Пользователь имеет возможность получить твердую копию отредактированной им формы . Для этого ему надо , находясь в режиме "Редактирование " или "Создание ", сделать следующее : Ш включить принтер ; Ш вставить в п ринтер лист бумаги ; Ш нажать клавишу F5 . Перед пользователем появится меню , пунктами которого являются : 1. "Печатать текущий раздел документа ", т.е . тот пункт , на котором в данный момент находится курсор ("световое пятно "); 2. "Печатать весь документ ", т.е . всю данную № 066/у форму целиком ; 3. "Отказ от печати ". Клавишами перемещения курсора и клавишей ENTER пользователь осуществляет выбор. 4.1.5. Просмотр БД Выбрав пункт " Н авигатор ", пользователь может просмотреть всю информацию , которая хранится в БД . Для этого ему предлагается меню второго уровня , используя пункты " Текущая карта ", " Следующая карта " и " Предыдущая карта " которого , пользователь может последовательно просмотре ть всю БД . При этом в нижней части экрана будет представлены номер истории болезни пациента , его фамилия и дата выписки , соответствующие очередной № 066/у форме . Кроме того , пользователь может ввести условия просмотра : Ш либо номер истории болезни интересу ющего его больного (в этом случае , пользователь будет просматривать БД , начиная с формы с введенным номером истории болезни (если она есть в БД ) ; если формы с введенным номером истории болезни в БД ; нет , то будет представлена первая форма с номером большим, чем у заданной ) ; Ш либо фамилию больного ; Ш либо дату выписки больного из стационара (в этом случае , пользователь будет просматривать № 066/у формы больных , выписанных во введенную дату и во все последующие дни ). Возврат в основное меню - по F10 или по ESC. После выхода из "Навигатора " текущим номер истории болезни становится тот номер , который был у последней из просмотренных форм . Это можно использовать для поиска и последующего редактирования интересующей пользователя формы или для её удаления ( см . п ункт 4.1.6.). 4.1.6. Удаление информации Выбрав этот пункт основного меню , пользователь получает возможность , путем последовательного просмотра БД , помечать интересующие его № 066 /у формы на удаление. Помеченные пользователем на удаление формы после выполнения пункта " Удаление " физически удаляются из БД. 4.1.7. Получение отчетных форм Блок - схема процедур ы формирования отчетов была представлена ранее на рис .4. Выбрав пункт главного меню "Отчеты ", можно получить отчеты фиксированной формы на основе введенной информации . Предлагается меню со следующими пунктами : Ш Месячные отчеты ; Ш Квартальные отчеты. Выб рав первый пункт , можно получить месячный отчет по любому отделению стационара . Для этого пользователю предлагается указать названия отделения , по которому будет формироваться отчет . Если отделение не будет указано , то отчет формироваться не будет. Если вы бран второй пункт , то необходимо указать конкретный отчет , который надо сформировать . Выбор осуществляется с помощью следующего меню : 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных, поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учреждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных, выбывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология больных , пе реведенных из других стационаров ; 8. Нозологическая таблица умерших ; 9. Нозология больных умерших по возрастам ; 10. Нозология умерших в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекционных за болеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение выбывших иногородних больных по каналам госпитализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , перевед енных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа после рожден ия , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивших в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременных, рожен иц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Можно получить квартальные отчеты , как по всему стационару, так и по любому его отделению . Для этого пользователю предлагается определить отделение , по которому будет фор мироваться отчет . Если отделение не будет указано (нажата клавиша ESC), то отчет будет формироваться по всему стационару. После выбора отчета необходимо ввести дату начала и окончания отчетного периода . Для ввода даты надо набрать чч /мм /гг на клавиатуре и нажать клавишу ENTER. Для отказа от ввода - ESC. После обработки получается необходимая отчетная форма, которая изображается на экране и сохраняется в файле . Можно получить твердую копию отчетной формы на принтере. Чтобы получить твердую копию на принтере необходимо вы- полнить следующие действия : Ш включить принтер ; Ш вставить в принтер лист бумаги ; Ш выбрать в меню альтернативу "Выводить отчет на печать ". Всюду для возврата в предыдущее меню используется клавиша ESC. Некоторые отчетные документы имеют большую ширину , поэтому для их распечатки необходим широкий принтер . Ширину отчета можно определить при его просмотре после того , как он появится на экране. 4.1.8. Настройка Наст ройка программы на режим конкретного использования заключается в корректировке справочников. Режим настройки скрыт от конечного пользователя программы и доступен лишь администратору БД. Для корректировки справочников необходимо , находясь в главном меню про граммы, нажать Control-F10. При этом пользователь попадает в меню со следующими альтернативами : Ш выбор и изменение списка отделений стационара ; Ш выбор и изменение списка профилей коек ; Ш выбор и изменение списка направляющих организаций ; Ш выбор и из менение списка причин смерти ; Ш выбор и изменение списка районов ; Ш выбор и изменение списка возрастов ; Ш выбор и изменение списка причин перевода ; Ш выбор и изменение списка причин направлений ; Ш выбор и изменение списка стран содружества. При выборе любого пункта меню пользователь переходит к меню добавления , удаления и переименования выбранного списка. В меню , для добавления нового элемента необходимо нажать клавишу INS. После этого будет предложено ввести новое название . Закончив ввод , надо нажать клавишу ENTER. Для удаления элемента используется клавиша DEL. При нажатии клавиши ENTER осуществляется выбор текущего элемента в списке с целью его переименования . Вводится новое название элемента и нажимается клавиша ENTER. ESC означает отказ от переимен ования. При нажатии ESC происходит возврат в предыдущее меню. 4.1.9. Выход из программы Для окончания работы с системой следует выбрать пункт "Выход " главного меню. В программе н е предусмотрено специальных сообщений для системного программиста . При работе программы возможна выдача сообщений исполнительной системой Clipper. Типичными сообщениями могут быть : "Not enought memory", "Memory fault" – по этим сообщениям следует удалить и з оперативной памяти все резидентные программы , кроме русификаторов. "Unable to open file <имя _файла >" - следует проверить наличие в каталоге указанного файла и при его отсутствии скопировать с резервной дискеты. В более сложных случаях следует записать со общение и ситуацию , в которой оно возникло , и обратиться к системному программисту , сопровождающему программу. 4.2. Результаты опытной эксплуатации Опытная эксплуатация проходила в Детской городской клинической больнице N13 им . Н . Ф . Филатова (ДГКБ N 13). В систему было заложено порядка 900 форм № 066 / у действительно выбывших из ДГКБ N13 больных . Ввод информации проводился сотрудниками отдела медстатистики этой больницы . В процессе работы были определенны некоторые особенности ввода информации и формирования отчетных документов . Все они были учтены в окончательном варианте программы. На основании этих 900 форм были получены все возможные отчетные документы . Сверка их с отчетами отде ла медстатистики , полученными в ручную , подтвердила правильность работы системы. Система передана для внедрения в отделение медстатистики ДГКБ N13 . 5.Экономико-организационная часть 5.1.Анализ потока публикаций В соответствии с заданием на дипломное проектирование проводилось изучение изменения потока публикаций по теме дипломного проекта . Анализ прово дился с помощью автоматизированной поисковой системы , действующей в ГПНТБ. Для поиска использовались следующие ключевые слова : Ш медицинская статистика ; Ш медицинская информатика ; Ш СУБД. Для оценки потока публикаций был взят отрезок времени, начинающий ся 19 93 годом. Полученные результаты представлены на гистограмме изменения потока публикаций ( рис .5 ). Рис . 5. Гистог рамма изменения потока публикаций. Из данной гистограммы видно , что наблюдается непрерывное увеличение числа публикаций , говорящее, вероятно , о возрастании интереса к проблеме использования средств вычислительной техники в работе отдела медицинской статист ики . Это, скорее всего , связано со значительным увеличением парка ЭВМ , в первую очередь - персональных , их относительной дешевизной и увеличением их производительности , что играет не последнюю роль при обработке больших объемов статистической информации. Н еослабевающий интерес к этой теме связан с теми большими возможностями , которые представляют такие средства , как СУБД и пакеты прикладных программ. 5.2. Расчет годового экономического эффекта Годовой экономический эффект будем рассчитывать согласно [7]: Э = (Э б – Э н ) * А н , где Ш Э б = С б + Е н * К б - приведенные затраты на единицу работы базового образца ; Ш Э н = С н + Е н * К н - приведенные затраты на единицу работы нового образца ; Ш Е н - нормативный коэффициент эффективности (Е н =0.15); Ш К б ,К н - капитальные затраты ; Ш С б ,С н - себестоимость единицы работы ; Ш А н - годовой объем работ. В качестве единицы работы возьмем работу , проводимую отделом Медстатистики больницы за год . В это м случае А н =1. В качестве Э б возмем затраты труда этого отдела без использования ЭВМ (т.о . К б =0). Капитальные затраты К н представляют собой затраты на выполнение дипломного проекта С дп , которые отражаются в величине его себестоимости [6]: К н = С дп = С пр + С накл , где Ш С пр - прямые расходы на выполнение дипломного проекта ; Ш С накл - накладные расходы. Для МИФИ С накл составляют примерно 25% от величины С пр : С пр = З осн + З эвм + О сс + О п , где Ш З осн - зарплата и стипендия основных исполнителей ДП ; Ш З эвм - затраты на использования машинного времени ; Ш О сс - отчисления на социальное страхование ; Ш О п - отчисления в пенсионный фонд. З осн = З студ * Т дп + З рук * Т рук + З конс * Т конс , где Ш З студ , З рук , З конс - заработная плата студента-дипломника, его руковод ителя и консультанта соответственно ; Ш Т дп , Т рук , Т конс - время , затраченное на участие в выполнении ДП этими лицами соответственно ( см . табл . 1. ). Таблица 1 . Расчет заработной платы. Зарплата Время работы Руководитель (к . т . н ., доцент ) 62 руб / час 24 часа Консультант (к . т . н . доцент ) 62 руб / час 2 часа Дипломник XI: 800 руб. XII: 800 руб. I: 1600 руб. II : 1600 руб. 4 месяца Таким образом : З осн =(800+800+1600+1600) + 62*24 + 62*2=4800+1488+124=6412. Выполнение ДП п отребовало 320 часов машинного времени. Стоимость 1 часа на PC XT составляла 40 рублей . Таким образом , З эвм = 320*40 = 12800 рублей. Отчисления на социальное страхование и в пенсионный фонд составляют 37% от З осн , следовательно : (О сс + О п )= 0.37 * З осн = 0 .37*6412 = 2372.44 рублей Таким образом : С пр = З осн + З эвм + О сс + О п =6412+12800+2372.44=21584.44 ; С пр =21584.44 рублей ; С накл =0.25*С пр =0.25*21584.44=5396.11 рублей ; К н = С дп = С пр + С накл = 21584.44 + 5396.11 = 26980.55 ; К н =26981 рубль. Себестоимость эксп луатации С н представляет собой стоимость единицы работы , сделанной новым образцом . Эта стоимость включает в себя зарплату оператора , работающего с программой (новым образцом ) и стоимость машинного времени. Зарплата оператора З оп вычисляется как произведени е времени работы с программой в часах Т раб с почасовой оплатой оператора (35 руб ./час ). Стоимость машинного времени определяется как произведение Т раб со стоимостью одного часа машинного времени (40руб /час ). Т раб определяется из содержания самой работы , ко торую выполняет программа : Ш формирование ежемесячных отчетов по 14 отделениям больницы (среднее время формирования одного отчета 15 минут ); Ш формирование 19 различных годовых отчетов (среднее время формирования одного годового отчета 45 минут ). Следова тельно , Т раб = 12*(14*15/60) + 19*45/60 = 42+14.25 = 56.25 часов. Таким образом , З оп = 56.25*35 = 1968.75 рублей , а стоимость машинного времени 56.25*40=2250 рублей . Отчисления в фонд социального страхования и в пенсионный фонд составят 37% от З оп , т.е . 1968 .75 * 0.37 = 728.44 рублей. С учетом накладных расходов получаем себестоимость работы программы : С н = (1968.75+2250+728.44) + 0.25*(1968.75+2250+728.44) = = 6183.99 рублей. С н = 6184 рублей. Для оценки Э б рассчитаем затраты отдела медстатистики стационара без использования ЭВМ . В отделе работает пять человек : Ш 4 медрегистратора (ставка 4000 руб ./месяц ); Ш 1 врач (ставка 6000 руб ./месяц ). Следовательно , затраты за год составляют : 12 * (4 * 4000 + 6000) * (1 + 0.37) = 361680 рублей. Разработанная система п окрывает около 40% всей работы отдела, следовательно , Э б = 0.40*361680 = 144672 рублей. В итоге получаем : Э = (Э б – Э н )*А н = (144672 - (6184 + 0.15*26981)) * 1= 134440.85 рублей. Годовой экономический эффект от использования разработанной системы составит 1 34440 рублей. Лимитная цена разработанной системы : Ц = 0.15 * К н + П * К н + НДС * К н + С н , где Ш К н - себестоимость разработки ; Ш П - прибыль (0.30); Ш НДС - налог на добавленную стоимость (0.20); Ш С н - себестоимость эксплуатации. Ц = 0.15*26981 + 0.30*26981 + 0.20*26981 + 6184 =23721.65 Следовательно , Лимитная цена разработки составляет 23 721 рубль . . Заключение В результате проделанной работы были получены следующие результаты : Ш проведен анализ существующих методов создания информационных систем в медицине ; Ш проведен анализ работы отдела медстатистики стационара и анализ потоков информации , проходящей через него, на основании чего сделан вывод о возможности испол ьзования в работе отдела стандартной сети Ethernet, с пропускной способностью 10 Мбит /с ; Ш учитывая объем хранимой информации , потоки запросов на ввод /вывод , допустимую скорость обработки , в качестве технических средств выбраны ПЭВМ IBM PC XT/АТ со следую щим набором периферийных устройств : принтер , дисплей с платой адаптера EGA / VGA, накопитель на жестком диске объемом не менее 40 МБ , и минимальным объемом свободной оперативной памяти не менее 540 КБ ; а в качестве программных средств – язык программирования Clipper; Ш составлено формализованное описание документооборота (форма № 066/у МЗ России ); Ш разработана концептуальная модель базы данных , содержащая в себе информацию , адекватную форме № 066/у МЗ России и состоящую из трех баз данных , связанных по номер у истории болезни ; Ш разработаны алгоритмы обработки ; Ш разработанная с использование языка Clipper Summer'87 программа занимает в виде загрузочного модуля 310 КБ ОП ; Ш разработаны организационно - технические мероприятия , направленные на поддержание сох ранности и целостности БД ; Ш определен годовой экономический эффект от внедрения разработанной автоматизированной системы , который составил 134 440 рублей. Система прошла опытную эксплуатацию в Детской городской клинической больнице N13 им . Н.Ф.Филатова и передана для внедрения в отделение медстатистики этой больницы . Литература 1. Clipper Summer'87. Комплект документации. 2. Дейт К. Дж .” Введение в системы баз данных ” : Пер . с англ . - К : Диалектика , 1998 . - 784 с .: ил . 3. Каррабис Дж . - Д . “ Программирование на dBase III plus” : М : Финансы и статистика , 1991. - 240 с .: ил . 4. Мартин Дж . “ Организация баз данных в вычислительных системах ” : пер . с англ . - М :Мир , 1990 . - 660 с .: ил . 5. Серия "Обзоры по важнейшим проблемам медицины " : выпуск N 5: "Использование автоматизированных больничных информационных систем за рубежом " : М : Медицина и здравоохранение , 1998. 6. Тригер Д.Я . “ Технико-экономическое обоснование и информационное обеспечени е дипломных проектов (в области физики и вычислительной техники ) ” : Учебное пособие - М : МИФИ , 1982. - 44с . 7. Эриванский Ю.А . “ Экономическое обоснование эффективности программных средств вычислительной техники ” : М : МИФИ , 1990. - 67 с . Приложение 1 “ Техническое задание на разработку автоматизированной информационной системы учета выбывших из стационара (форма № 066/у ) ” 1. Введение. Автоматизированная система учета выбывших из стационара (условное обозначение КАРТА ) предназначена для автоматизации заполнения формы № 066/у Минздрава России и генерации на ее основе типовых отчетов для стационаров. 2. Основание для разработки. Основанием для разработки является договор N 12-1-99 на создание научно-технической продукции между ДГКБ N13 и ИТЦ ИА. 3. Назначение разработки. Указано во введении. 4. Требования к програ мме. 4.1. Функциональные характеристики. Программа должна выполнять функции ввода , хранения и обработки информации о выбывшем больном и формирования ежедневных , месячных и годовых отчетов по фиксированным формам. В программе должен быть обеспе чен : Ш ввод непротиворечивой и целостной информации ; Ш удобство пользователя, не имеющего специальных навыков работы с вычислительной техникой при заполнении формы № 066 / у , высокая скорость заполнения за счет повышения наглядности и упрощения процесса вво да отдельных элементов информации ; Ш получение фиксированных отчетных форм за время , приемлемое для пользователя (не более 5 минут для ежедневного отчета , не более 1 часа для месячного отчета и не более 1 рабочего дня для годового отчета ) . Контроль непрот иворечивости и целостности информации должен состоять из двух этапов : 1. контроля непосредственно при вводе (проверка ограничений на элемент информации , вводимый в данный момент ); 2. контроля информации после завершения ввода (проверка ограничений на сов окупность элементов информации ). Для удобства пользователя в качестве базы для экранного интерфейса необходимо использовать полноэкранное редактирование полей БД. Входной информацией программы является информация из формы № 066 / у (см . Приложение 1.1). Выход ной информацией программы являются таблицы : Ш месячного отчета (см . Приложения 1.2 и 1.3); Ш годового отчета , включающие в себя : 1. Состав больных в стационаре , сроки и исход лечения (см . табл .1 ф.№ 14); 2. Состав больных новорожденных, поступивших в во зрасте 0-6 суток жизни и исход их лечения (см . табл .2 ф.№ 14); 3. Хирургическая работа учреждений (см . табл .3 ф. № 14); 4. Распределение больных по возрасту и району (см . Приложение 4); 5. Состав больных , выбывших в возрасте от 0 до 6 суток жизни (см . Прил ожение 1.5); 6. Больные , переведенные в другие лечебные учреждения (см. Приложение 1.6); 7. Нозология больных , переведенных из других стационаров (см . Приложение 1.7); 8. Нозологическая таблица умерших (см . Приложение 1.8); 9. Нозология больных умерших по возрастам (см . Приложение 1.9); 10. Нозология умерших в возрасте от 0 до 6 дней жизни (см . Приложение 1.10); 11. Операции умерших (см . Приложение 1.11); 12. Нозология умерших до суток (см . Приложение 1.12); 13. Нозология инфекционных заболеваний (с м. Приложение 1.13); 14. Распределение инфекционных заболеваний по отделениям (см. Приложение 1.14); 15. Распределение выбывших иногородних больных по каналам госпитализации и отделениям больницы (см. Приложение 1.15); 16. Число больных , переведенных в другие стационары , из них число новорожденных , переведенных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после пост упления в стационар : в возрасте 0-24 часа после рождения , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивших в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступл ения в стационар ; 19. Число умерших беременных, рожениц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Таблицы 1-3,16-19 формируются для написания отчетов о деятельности стационара для администрации больницы и в вышесто ящие организации , 4-15 - только для администрации больницы. Взаимодействие программы с пользователем должно быть реализовано по следующему алгоритму : 1. Ввод текущей даты. 2. Выбор из главного меню одной из следующих функций : 2.1. Ввод данных (перечень дан ных см . в Приложении 1.1) и печать ; 2.2. Коррекция ранее введенных данных ; 2.3. Поиск данных больного по №ИБ или по Фамилии И.О ; 2.4. Получение отчетных форм (за отчетный период с <число , месяц > по <число, месяц >); 2.5. Выход из программы. После выполнения каждой функции необходимо обеспечить возврат в главное меню и выбор любой другой функции . При выборе функции "Выход из программы " работа программы завершается. При выборе функции "Коррекция ранее введенных данных " пользователь может откорректировать данны е , вводимые ранее. Предусмотрен также режим "Настройка программы ", который должен обеспечивать адаптацию программы к изменяющимся справочникам , используемым в программе , а именно : 1. Добавление и удаление списка отделений стационара ; 2. Добавление и удален ие списка профилей коек ; 3. Добавление и удаление списка направляющих организаций ; 4. Добавление и удаление списка причин смерти ; 5. Добавление и удаление списка операций ; 6. Добавление и удаление списка районов ; 7. Добавление и удаление списка возрастов ; 8. Добавление и удаление списка учреждений, откуда и куда переводятся больные ДГКБ № 13; 9. Добавление и удаление причин перевода больного ; 10. Добавление и удаление причин направлений больного ; 11. Добавление и удаление стран содружеств и их шифров. Режим настройки должен быть скрыт от конечного пользователя программы и доступен лишь администратору БД. Концептуальная модель БД ф. № 066/у представлена в Приложении 14. 4.2. Требования к надежности. Разработанная программа должна обладать средствами защиты от о шибочных действий персонала. 4.3. Условия эксплуатации. Программа должна быть ориентирована на пользователя, не имеющего специальных навыков работы в области вычислительной техники и программирования. 4.4. Требования к составу и параметрам технических ср едств. Программу необходимо реализовать на базе ПЭВМ типа IBM PC/XT/AT с набором периферийных устройств (принтер, дисплей с платой адаптера EGA/VGA, накопителем на жестком диске с объемом не менее 40 МБ ). 5. Требования к программной документац ии. Документация на программу должна включать объединенный документ : описание программы и текст программы , эксплуатационные документы в согласованном с пользователем объеме. Приложение 1.1. Данные о больном , фиксируе мые в форме № 066 / у : 1. Номер истории болезни ; 2. Фамилия И.О ; 3. Пол : 3.1. Мужской ; 3.2. Женский ; 4. Дата и время рождения (год, месяц, число, время ) ; 5. Возраст : 5.1. 0-6 дней. 5.2. 7-28 дней ; 5.3. 29 дней -3 мес. ; 5.4. 4-6 мес. ; 5.5. 7-9 мес. ; 5.6. 10-12 мес. ; 5.7. 1год ; 5.8. 2-3 года ; 5.9. 4-7 лет ; 5.10. 8-14 лет ; 5.11. 15 лет ; 6. Вес (кг /г ) ; 7. Проживает : 7.1. Адрес постоянного местожительства ; 7.2. Район : 7.2.1. Москва ; 7.2.2. Московская область ; 7.2.3. Иногородний ; 7.2.4. Сельский житель ; 7.2.5. Иностр анец ; 8. Житель : 8.1. Города ; 8.2. Села ; 9. Государство 10. Кем направлен : 10.1. Род. дома , род. отделения больниц ; 10.2. Клиники , больницы : 10.2.1. ДГКБ № 32 ; 10.2.2. ДГКБ № 67 ; 10.2.3. ДГКБ № 1 ; 10.2.4. ДКБ № 11 ; 10.2.5. ДГКБ № 3 ; 10.2.6. ГКБ № 13 ; 10.2.7. ДКБ № 2 ; 10.2.8. ДГКБ № 9 ; 10.2.9. 5 ДИБ ; 10.2.10. ДИБ 12 ; 10.2.11. ДИБ 6 ; 10.3. Поликлиники ; 10.4. Консультации ; 10.5. Минздрав России ; 10.6. Скорая ; 10.7. Самотек ; 10.8. ГУЗМ ; 10.9. Военная часть ; 10.10. Милиция ; 10.11. Повторные больные ; 10.12. ГУЗМО ; 10.13. РЗГВ ; 10.14. Прочее ; 11. Причина : 11.1. Оперативное вмешательство ; 11.2. На гемодиализ ; 11.3. В реанимационное отделение ; 11.4. Прочее ; 12. Отделение : 12.1. Микрохирургия ; 12.2. Хирургия новорожденных ; 12.3. Урология ; 12.4. Травматология ; 12.5. Гнойной хи рургии ; 12.6. Торакальное ; 12.7. Искусственная почка ; 12.8. Нефрология ; 12.9. Терапия старшего возраста ; 12.10. Токсикология ; 12.11. Патология новорожденных ; 12.12. Лор ; 12.13. Реанимация ; 12.14. Неонатальный центр ; 13. Профиль коек : 13.1. Хирургический ; 13.2. Терапевтический ; 13.3. Реологический ; 13.4. Реанимационный ; 14. Доставлен в стационар по экстренным показаниям : 14.1. Да ; 14.2. Нет ; 15. Через сколько часов после заболевания (получения травмы ) : 15.1. в первые 6 часов ; 15.2. 7-24 ч. ; 15.3. позднее 24 ч. ; 16. Дата и время поступления в стационар (год, месяц, число, время ) 17. Исход заболевания : 17.1. выписан ; 17.2. умер ; 17.3. переведен ; 18. Если переведен : 18.1. Куда : 18.1.1. ДГКБ № 32 ; 18.1.2. ДГКБ № 67 ; 18.1.3. ДГКБ № 1 ; 18.1.4. ДКБ № 11 ; 18.1.5. ДГК Б № 3 ; 18.1.6. ГКБ № 13 ; 18.1.7. ДКБ № 2 ; 18.1.8. ДГКБ № 9 ; 18.1.9. 5 ДИБ ; 18.1.10. ДИБ 12 ; 18.1.11. ДИБ 6 ; 18.2. Причины перевода : 18.2.1. по профилю ; 18.2.2. для дальнейшего лечения ; 18.2.3. оперативное вмешательство ; 19. Дата и время выписки , перевода , либо смерти (год, месяц, число, час ) ; 20. Проведено дней (вычисляется автоматически как разность между датой выписки, перевода , либо смерти и датой поступления ) ; 21. Диагноз направившего учреждения по МКБ ; 22. Госпитализирован в данном году по поводу данного з аболевания : 22.1. Впервые ; 22.2. Повторно ; 23. Диагноз стационара по МКБ : 23.1. Основной ; 23.1.1. клинический ; 23.1.2. патологоанатомический ; 23.2. осложнения ; 23.2.1. клинический ; 23.2.2. патологоанатомический ; 23.3. сопутствующие заболевания ; 23.3.1. кли нический ; 23.3.2. патологоанатомический ; 24. Причина смерти : 24.1. основное заболевание ; 24.2. осложнения основного заболевания ; 24.3. другие важные заболевания , способствовавшие смертельному исходу , но не связанные с заболеванием или его осложнениями , пос лужившим непосредственной причиной смерти ; 25. Хирургические операции : 25.1. Дата (число, месяц, год ) ; 25.2. Название операции (берется из каталога операций в ф.№ 14 - отчет о деятельности стационара и каталога операций из ф.№ 30-здрав - отчет ЛПУ ) 26. Обсле дование на реакцию Вассермана : 26.1. Число, месяц, год ; 26.2. Результат : 26.2.1. Положительный ; 26.2.2. Отрицательный ; 27. Фамилия , имя, отчество лечащего врача . Приложение 1.2. Месячная таблица для отделений “ Хирургия новорожден ных ” и “ Патология новорожденных ” должна включать следующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе. По каждому названию болезни : 5. Возраст : 5.1. 0 - 6 дней ; 5.2. 7 - 14 дней ; 5.3. 15- 21 дня ; 5.4. 22- 28 дней ; 5.5. 29 дней - 3 мес. ; 5.6. 4 - 6 мес. ; 5.7. 7 - 9 мес. ; 5.8. 10 - 12 мес. ; 6. Всего до одного года : 6.1. Всего ; 6.2. В т.ч . сельских жителей ; 6.3. К /Д ; 6.4. В т.ч . сельских жителей ; 7. Выписано : 7.1. Всего ; 7.2. Москва ; 7.3. Московская область ; 7.4. Иногородние ; 7.5. Сельские жители ; 7.6. Иностранцы ; 8. Первично /Вторично ; 9. Направляющие организации . Приложение 1.3. Месячная таблица для всех отделений стационара (кроме отделений “ Хирургия новоро жденных ” и “ Патология новорожденных ” ) должна включать следующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе. По каждому названию болезни : 5. Возраст : 5.1. 29 дней . - 3 мес. ; 5.2. 4 - 6 мес. ; 5.3. 7 - 9 мес. ; 5.4. 10 - 12 мес. ; 6. Всего до одного года : 6.1. Всего ; 6.2. В т.ч . сельских жителей ; 6.3. К /Д ; 6.4. В т.ч . сельских жителей ; 7. Выписано до 14 лет : 7.1. 1 год ; 7.2. 2 года ; 7.3. 3- 7 лет ; 7.4. 8- 17 лет ; 7.5. Всего ; 7.6. В т.ч . с ельские жители ; 7.7. К /Д ; 7.8. В т.ч . сельские жители ; 8. 15 лет и старше : 8.1. Всего ; 8.2. В т.ч . сельские жители ; 8.3. К /Д ; 8.4. В т.ч . сельские жители ; 9. Выписано всего : 9.1. Всего ; 9.2. Москва ; 9.3. Московская область ; 9.4. Иногородние ; 9.5. Сельские жители ; 9.6. Иностранцы ; 9.7. К /Д ; 10. Первично /Вторично ; 11. Направляющие организации . Приложение 1.4. Таблица распределения выбывших по возрасту и району за год должна включать следующие графы : 1. Возраст : 1.1. 0 - 6 дней ; 1.2. 7 - 28 дней ; 1.3. Всего новорожденных ; 1.4. 29 дней - 3 мес. ; 1.5. 4 - 6 мес. ; 1.6. 7 - 9 мес. ; 1.7. 10 - 12 мес. ; 1.8. Всего до одного года ; 1.9. Один год ; 1.10. 2 - 3 года ; 1.11. 4 - 7 лет ; 1.12. 8 - 14 лет ; 1.13. 15 лет ; 2. Всего выбыло ; 3. Число койко -дней выбывших ; 4. Число койко-дней умерших ; 5. Выбыло москвичей ; 6. По каждому возрасту исход : 6.1. Выбыло домой ; 6.2. Переведено в другие учреждения ; 6.3. Умерло ; 7. Для каждого вида исхода распределение по районам : 7.1. Москва ; 7.2. Московская область ; 7.3. Иногородние ; 7.4. Сельские жители ; 7.5. Иностранцы ; 8. Общее число больных ; 9. Общее число больных из прикрепленных районов ; 10. Общее число иногородних больных ; 11. Процент от общего числа больных из прикрепленных районов ; 12. Процент от общего числа больных иногородних ; Приложение 1.5. Таблица "Состав больных выбывших в возрасте от 0 до 6 суток жизни " должна включать следующие графы : 1. Наименование болезни и шифр по МКБ : 1.1. Острые распираторные инфекции 460 – 466 ; 1.2. П невмония 480-486; 1.3. Инфекции кожи и подкожной клетчатки 680 – 686 ; 1.4. Врожденные аномалии 740 – 759; 1.5. Внутричерепная родовая травма 767.6 ; 1.6. Другие родовые травмы 767.4-7; 1.7. Внутриматочная гипоксия и асфиксия при родах 768 ; 1.8. Синдром дыха тельных расстройств и другие распираторные состояния 769, 770.1-9; 1.9. Врожденные пневмонии 770.0 ; 1.10. Инфекции, специфичные для перинатального периода 771.0-7; 1.11. Сепсис новорожденных 771.8-часть ; 1.12. Гемолитическая болезнь, обусловленная иммуниза цией 773; 1.13. Другие болезни перинатальной желтухи 774 ; 1.14. Прочие болезни плода и новорожденного ; 2. Количество детей с массой тела при рождении : 2.1. До 1000 грамм ; 2.2. Большей либо равной 1000 грамм. 2.3. Для новорожденных с массой тела как меньшей 1000 грамм , так и большей либо равной 1000 грамм. 3. Поступило больных в первые 0 - 6 суток после рождения ; 4. Умерло : 4.1. Всего ; 4.2. В том числе в первые 0 - 6 суток после рождения . Приложение 1.6. Таблица "Больные , переведенн ые в другие лечебные учреждения " должна включать следующие графы : 1. Наименование классов заболеваний ; 2. Шифр по МКБ ; 3. Общее количество больных , переведенных в другие лечебные учреждения по каждому классу заболеваний ; 4. Количество больных до года , пере веденных в другие лечебные учреждения по каждому классу заболеваний ; 5. Причины перевода по каждому классу заболеваний. Приложение 1.7. Таблица "Нозология больных, переведенных из других лечебных учреждений " должна включать следу ющие графы : 1. Название болезни ; 2. Шифр по МКБ ; По каждому названию болезни 3. Количество детей : 3.1. до 28 дней ; 3.2. до года ; 3.3. всего ; 4. Причины направления в ДГКБ : 4.1. оперативное вмешательство ; 4.2. на гемодиализ ; 4.3. в реанимационное отделение ; 4.4. прочее ; 5. Из каких учреждений направлены больные. Приложение 1.8. Таблица “ Нозология умерших ” должна включать следующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название б олезни в классе. По каждому названию болезни. 5. Пол : 5.1. Всего мальчиков ; 5.2. Всего девочек ; Приложение 1.9. Таблица "Нозология умерших больных по возрастам " должна включать следующие графы : 1. Шифр классов болезней ; 2. Назван ия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе . По каждому названию болезни : 5. Пол : 5.1. Всего мальчиков ; 5.2. Всего девочек ; 6. Возраст : 6.1. 0 - 6 дней ; 6.2. 7 - 28 дней ; 6.3. Всего новорожденных ; 6.4. 29 дней - 3 мес. ; 6.5. 4 - 6 мес. ; 6.6. 7 - 9 мес. ; 6.7. 10 - 12 мес. ; 6.8. Всего до одного года ; 6.9. Койко-дни больных до одного года ; 6.10. Один год ; 6.11. 2 - 3 года ; 6.12. 4 - 7 лет ; 6.13. 8 - 14 лет ; 6.14. 15 лет ; 6.15. Всего умерло ; 6.16. Койко-дни всех умерших ; 7. Кем н аправлен : 7.1. Род . Дома ; 7.2. Клиники , больницы ; 7.3. Поликлиники ; 7.4. Консультации ; 7.5. Минздрав России ; 7.6. Скорая ; 7.7. Самотек ; 7.8. ГУЗМ ; 7.9. Военная часть ; 7.10. Милиция ; 7.11. Повторные больные ; 7.12. ГУЗМО ; 7.13. РЗГВ ; 7.14. Прочее ; 8. Районы : 8.1. Москва ; 8.2. Московская область ; 8.3. Иногородние ; 8.4. Сельские жители ; 8.5. Иностранцы ; 9. Сколько дней пробыл в больнице : 9.1. До суток ; 9.2. Одни сутки ; 9.3. Двое суток ; 9.4. Трое суток ; 9.5. Свыше трех суток ; Приложение 1.10. Таблица “ Нозология умерших в возрасте от 0 до 6 дней жизни ” должна включать следующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе . По каждому названию болезни. 5. Пол : 5.1. Всего мальчиков ; 5.2. Всего девочек ; 6. Возраст : 6.1. 0 - 1 дня ; 6.2. 2 - 3 дней ; 6.3. 4 - 6 дней ; 6.4. Всего умерло ; 7. Кем направлен : 7.1. Род . Дома ; 7.2. Клиники , больницы ; 7.3. Поликлиники ; 7.4. Консультации ; 7.5. Минздрав России ; 7.6. Скорая ; 7.7. Самотек ; 7.8. ГУЗМ ; 7.9. Военная часть ; 7.10. Милиция ; 7.11. Повторные больные ; 7.12. ГУЗМО ; 7.13. РЗГВ ; 7.14. Прочее ; 8. Районы : 8.1. Москва ; 8.2. Московская область ; 8.3. Иногородние ; 8.4. Сельские жители ; 9. Пробыло в стационаре : 9.1. До суток ; 9.2. С утки ; 9.3. Двое суток ; 9.4. Трое суток ; 9.5. Четверо суток ; 9.6. Пять суток ; 9.7. Шесть суток. Приложение 1.11. Таблица "Операции умерших " должна включать следующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе. По каждому названию болезни ; 5. Количество оперированных больных всего ; На нервной системе : 5.1. На головном мозге ; 5.2. На периферийной нервной системе ; 6. На эндокринной системе : 6.1. Из них тиреотом ии ; 7. Операции на органах зрения : 7.1. По поводу глуакомы ; 7.2. По поводу энуклеации ; 7.3. По поводу катаракты ; 8. Операции на органах уха , горла , носа : 8.1. Из них на ухе ; 9. Операции на органах дыхания : 9.1. На миндалинах и аденоидах ; 9.2. Пульмонэктоми я ; 9.3. Резекция доли легкого ; 9.4. Резекция сегмента легкого ; 10. Операции на сердце : 10.1. На открытом сердце ; 10.2. Имплантации кардиостимулятора ; 11. Операции на сосудах : 11.1. Операции на артериях ; 11.2. Операции на венах ; 12. Операции на органах брюш ной полости : 12.1. На желудке по поводу язвенной болезни ; 12.2. По поводу острой непроходимости кишечника ; 12.3. По поводу острого аппендицита ; 12.4. По поводу прободной язвы желудка ; 12.5. По поводу желудочно-кишечного кровотечения ; 12.6. По поводу ущемле нной грыжи ; 12.7. По поводу острого холецистита ; 12.8. По поводу острого панкреатита ; 12.9. Аппендиктомии при хроническом аппендиците ; 12.10. Грыжеиссечение при неущемленной грыже ; 12.11. Холецистомии при хронических холециститах ; 12.12. Липафотомии диагно стические ; 13. Операции на почках и мочеточниках ; 14. Операции на предстательной железе ; 15. Операции на женских половых органах : 15.1. Выскабливание матки (кроме аборта ) ; 15.2. По поводу стерилизации женщин ; 16. Акушерские операции : 16.1. По поводу внемат очной беременности ; 16.2. Наложение щипцов ; 16.3. Вакуум-экстрация ; 16.4. Кесарево сечение (кроме малого влагалищного ) ; 16.5. Плодоразрушающие ; 16.6. Аборт ; 17. Операции на костно-мышечной системе : 17.1. На костях и суставах ; 18. Операции на молочной желез е ; 19. Операции на коже и подкожной клетчатке : 19.1. Прочие операции ; 20. Для каждой операции число операций ; 21. В том числе детям до 14 лет включительно. Приложение 1.12. Таблица "Нозология умерших до суток " должна включать сле дующие графы : 1. Шифр классов болезней ; 2. Названия классов болезней ; 3. Шифр болезни в классе ; 4. Название болезни в классе . По каждому названию болезни. 5. Пол : 5.1. Всего мальчиков ; 5.2. Всего девочек ; 6. Возраст : 6.1. 0 - 6 дней ; 6.2. 7 - 14 дней ; 6.3. 15 - 21 дня ; 6.4. 22 дней - 28 дней ; 6.5. Всего новорожденных ; 6.6. 29 дней - 3 мес . ; 6.7. Всего умерло ; 7. Кем направлен : 7.1. Род . Дома ; 7.2. Клиники , больницы ; 7.3. Поликлиники ; 7.4. Консультации ; 7.5. Минздрав России ; 7.6. Скорая ; 7.7. Самотек ; 7.8. Г УЗМ ; 7.9. Военная часть ; 7.10. Милиция ; 7.11. Повторные больные ; 7.12. ГУЗМО ; 7.13. РЗГВ ; 7.14. Прочее ; 8. Время пребывания в больнице : 8.1. 0-30 мин ; 8.2. 30 мин ; 8.3. 1 час ; 8.4. 1-3 ч ; 8.5. 10-24 ч ; 8.6. более 24 ч ; 9. Койко-дни умерших. П риложение 1.13. Таблица "Нозология инфекционных заболеваний " должна включать следующие графы : 1. Шифр : 1.1. Общее количество больных выбывших из стационара ; 1.2. Количество больных в возрасте до 1 года , выбывших из стационара ; 1.3. Количество койко-дней проведенное выписанными больными ; 1.4. Количество умерших ; 1.5. Количество умерших до года ; 1.6. Количество койко-дней умерших ; 1.7. Летальность от общего числа умерших. Приложение 1.14. Таблица "Распределение инфекцио нных заболеваний по отделениям " должна включать следующие графы : 1. Шифр и название болезни ; 2. Отделение, в котором зарегистрировано данное заболевание. Приложение 1.15. Таблица “Р аспределения выбывших иногородних больных по кан алам госпитализации и отделениям больницы ” должна включать следующие графы : 1. Всего выписанных больных из больницы : 1.1. из Москвы ; 1.2. иностранцев ; 2. Наименование страны содружества ; 3. Шифр страны ; По каждой стране содружества : 4. Направляющее учрежде ние ; 5. Отделения больницы ; 6. Койко-дни ; 7. Всего выписанных иногородних больных ; 8. Процент иногородних больных от числа выписанных больных. . Приложение 2 Описание применения “ Автоматизированной системы учета выбывших из стационара ” . 1.Назначение программы. Автоматизированная система учета выбывших из стационара (условное обозначение КАРТА ) предназначена для автоматизации пр оцесса заполнения формы № 066 / у Минздрава России и формирования на ее основе отчетных форм для стационара. Программа позволяет во много раз сократить время получения справочной информации по выбывшим больным за отчетный период , практически исключить ошибки, возникающие при оформлении документов , упростить процедуру коррекции данных. Программа обеспечивает : 1. Ввод , хранение , коррекцию данных по выбывшим из стационара больных ; 2. Оформление печатных документов по данным о выбывших больных за отчетный период ; 3. Настройку на структуру конкретного стационара. Программа ориентирована на пользователя , не являющегося профессионалом в области вычислительной техники. 2.Условия применения. Программа КАРТА реализована для персональных ЭВМ IBM PC XT/АТ со следующим набором периферийных устройств : принтер , дисплей с платой адаптера EGA / VGA, накопитель на жестком диске объемом не менее 40 МБ . Минимальный объем свободной оперативной памяти 540 КБ. Программа работает под управлением операционной сис темы MS DOS версии 3.1 и выше. Программа реализована на языке программирования Clipper Summer'87. 3.Описание задачи. Программа обеспечивает ввод и хранение следующих данных : 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. Фамилия И.О . лечащего врача. Программа обеспечивает формирование отчетных документов : Ш месячных по любому отделению стационара ; Ш годовых (квартальных ) как по всему стационару , так и по любому его отделению : 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных , поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учреждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных , выбывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология больных , переведенных из других стационаров ; 8. Нозологическая таблица умерших ; 9. Нозология больны х умерших по возрастам ; 10. Нозология умерших в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекционных заболеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение в ыбывших иногородних больных по каналам госпитализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , переведенных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа после рождения , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивши х в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременных, рожениц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Табл ицы 1-3,16-19 формируются для написания отчетов о деятельности стационара для администрации больницы и в вышестоящие организации , 4-15 - только для администрации больницы. Различия между месячными и квартальными отчетами наблюдаются только в составе информ ации , выводимой в таблицы . И те , и другие отчеты могут формироваться за любой период. Программа обеспечивает использование и настройку следующих видов справочников : 1. Справочник названий отделений стационара ; 2. Справочник названий профилей коек ; 3. Сп равочник названий направляющих организаций ; 4. Справочник причин смерти ; 5. Справочник названий районов ; 6. Справочник возрастов ; 7. Справочник названий учреждений, откуда и куда переводятся больные ; 8. Справочник причин перевода больного ; 9. Справоч ник причин направлений больного ; 10. Справочник названий стран содружества и их шифров . 4. Входная и выходная информация программы. 4.1 Входная информация. Входной информацией программы является следующ ая : Ш данные , вводимые пользователем ; Ш данные , хранящиеся в базе данных по пациентам ; Ш текущая системная дата ; Ш данные , хранящиеся в справочных базах данных ; 4.2 Выходная информация. Выходной информацией программы является следующая : Ш данные , введенные пользователем в базу данных по пациентам ; Ш отчетные документы. Приложение 3 Руководство оператора “ Автоматизированной системы учета выбывших и з стационара ” . 1.Введение. Автоматизированная система учета выбывших из стационара (условное обозначение КАРТА ) предназначена для автоматизации процесса заполнения формы № 066/у Минздрава России и формиро вания на ее основе отчетных форм для стационара. Программа обеспечивает : Ш Ввод , хранение , коррекцию данных по выбывшим из стационара больным ; Ш Оформление печатных документов по данным о выбывших больных за отчетный период ; Ш Настройку на структуру кон кретного стационара. Программа ориентирована на пользователя , не являющегося профессионалом в области вычислительной техники. 2.Условия выполнения программы. Программа "КАРТА " реализована на персональных ЭВМ IBM PC XT/AT со следую щим набором периферийных устройств : принтер , дисплей с платой адаптера EGA/VGA, накопитель на жестком диске объемом не менее 80 Мб . Минимальный объем свободной оперативной памяти 540 Кб. Программа работает под управлением операционной системы MS DOS версии 3.1 и выше. 3.Выполнение программы. 3.1 Запуск программы. Для запуска программы необходимо набрать в командной строке =>karta и нажать клавишу ENTER. Об успешном запуске программы свидетельствует пригла шение ввести дату (см пункт 3.2.1). 3.2 Выполнение программы. Процесс работы с программой разбивается на несколько этапов : Ш ввод текущей даты ; Ш работа в главном меню ; Ш ввод новых данных ; Ш коррекция введенных данных ; Ш фор мирование и печать отчетов за выбранный период ; Ш настройка программы на структуру конкретного стационара ; Ш выход из программы. 3.2.1 Ввод текущей даты При запуске программы на экране появляется заставка с надписью “ СЕГОДНЯ : “ и некоторой датой . На маши нах , снабженных автономными встроенными часами , будет выведена текущая дата , на других машинах выводится дата , установленная последней системной командой "DATE". Для подтверждения даты нажмите клавишу ENTER, для изменения - наберите нужную дату и нажмите к лавишу ENTER. Внимание ! Можно также ввести любую дату , а не только текущую. 3.2.2 Работа в главном меню. Главное меню программы содержит следующие пункты : Ш создание ; Ш удаление ; Ш редактирование ; Ш навигация ; Ш отчеты ; Ш выход. Перемещение по пунк там главного меню осуществляется клавишами перемещения курсора : стрелка вправо, стрелка вниз и стрелка влево, стрелка вверх. Выбор и отказ от выбора пункта меню осуществляется клавишами ENTER и ESC соответственно. В нижней части экрана имеется подсказка о тех действиях , которые будут производиться при выборе соответствующего пункта главного меню. 3.2.3 Ввод новых данных Если выбран пункт главного меню "СОЗДАНИЕ ", то можно ввести данные в новую карту , выбывшего из стационара (другими словами, заполнить новую форму № 066/у ). Перед вами высвечивается приглашение для введения номера истории болезни вновь выбывшего из стационара больного. Внимание ! Новая карта будет создана только в том случае , если информации о больном , с введенным вами номером истории болезни , в базе данных нет. После этого на экране появляется текст , который содержит основные пункты формы № 066/у , подлежащие заполнению (см . пункт 3 "Описания применения "). Движение по этому тексту осуществляется клавишами перемещения курсора , при этом по экрану пе ремещается "световое пятно ". Для заполнения нужного пункта КАРТЫ надо подвести "световое пятно " к данному пункту текста и нажать клавишу ENTER. Если данный пункт формы № 066/у может содержать одно из наперед заданных значений , то на экран выводятся все эти значения и пользователь , используя клавиши перемещения курсора и клавишу ENTER, осуществляет выбор (используя клавишу ESC, можно выйти из данного пункта КАРТЫ без выбора какого-либо значения ). Все эти, "наперед заданные " значения хранятся в справочниках . Е сли данный пункт может содержать любое значение , то пользователю предлагается ввести его самому. Возврат в основное меню происходит по нажатию клавиши F10. Внимание ! Если некоторые пункты КАРТЫ (а именно , те которые нужны для составления отчетных документо в ) не будут заполнены , то вновь введенная форма не будет сохранена . При попытке выхода, в этом случае , пользователю будет предложено заполнить нужные пункты КАРТЫ. 3.2.4. Редактирование ранее введенных форм. Выбрав пункт главного меню "Редактирование ", пол ьзователь может произвести коррекцию любой ранее введенной формы , хранящейся в БД . Для этого ему предлагается либо ввести номер истории болезни , либо фамилию интересующего его больного . Коррекция осуществляется по тем же правилам , что и при "Создании " (см. пункт 3.2.3.). Для поиска КАРТЫ интересующего больного , пользователь может использовать "Навигатор " БД (см . пункт 3.2.5.). Пользователь имеет возможность получить твердую копию отредактированной им КАРТЫ . Для этого ему надо , находясь в режиме "Редактирова ние ", сделать следующее : Ш включить принтер ; Ш вставить в принтер лист бумаги ; Ш нажать клавишу F5. Перед пользователем появится меню , пунктами которого являются : 1. "Печатать текущий раздел документа ", т.е . тот пункт КАРТЫ , на котором в данный момент находится курсор ("световое пятно "); 2. "Печатать весь документ ", т.е . всю данную КАРТУ целиком ; 3. "Отказ от печати ". Клавишами перемещения курсора и клавишей ENTER пользователь осуществляет выбор. 3.2.5. Навигация (просмотр ) БД. Выбрав пункт "Навигатор ", пользователь может просмотреть всю информацию , которая хранится в БД . Для этого ему предлагается меню второго уровня , используя пункты "Текущая карта ", "Следующая карта " и "Предыдущая карта " которого , пользователь может последовательно просмотреть всю Б Д . При этом в нижней части экрана будет представлены номер истории болезни пациента , его фамилия и дата выписки , соответствующие очередной КАРТЕ . Кроме того , пользователь может ввести условия просмотра : Ш либо номер истории болезни интересующего его больн ого (в этом случае , пользователь будет просматривать БД , начиная с КАРТЫ с введенным номером истории болезни (если она есть в БД ); если КАРТЫ с введенным номером истории болезни в БД нет, то будет представлена первая КАРТА с номером большим , чем у заданной ) ; Ш либо фамилию больного ; Ш либо дату выписки больного из стационара (в этом случае, пользователь будет просматривать КАРТЫ больных , выписанных во введенную дату и во все последующие дни ). Возврат в основное меню - по F10 или по ESC. Внимание ! После вы хода из "Навигатора " текущим номер истории болезни становится тот номер , который был у последней из просмотренных КАРТ . Это можно использовать для поиска и последующего редактирования интересующей пользователя КАРТЫ или для ее удаления (см. пункт 3.2.6). 3 .2.6. Удаление КАРТ. Выбрав этот пункт основного меню , пользователь получает возможность , путем последовательного просмотра БД , помечать определенные им КАРТЫ на удаление. Внимание ! Помеченные пользователем на удаление КАРТЫ после выполнения пункта "Удален ие " физически удаляются из БД. 3.2.7. Получение отчетных форм. Выбрав пункт главного меню "Отчеты ", можно получить отчеты фиксированной формы на основе введенной информации . Предлагается меню со следующими пунктами : Ш Месячные отчеты ; Ш Квартальные отчет ы. Выбрав первый пункт , можно получить месячный отчет по любому отделению стационара . Для этого пользователю предлагается указать названия отделения , по которому будет формироваться отчет . Если отделение не будет указано , то отчет формироваться не будет. Е сли выбран второй пункт , то необходимо указать конкретный отчет , который надо сформировать . Выбор осуществляется с помощью следующего меню : 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных , поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учреждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных , выбывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология больн ых , переведенных из других стационаров ; 8. Нозологическая таблица умерших ; 9. Нозология больных умерших по возрастам ; 10. Нозология умерших в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекцион ных заболеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение выбывших иногородних больных по каналам госпитализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , п ереведенных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа после рождения , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивших в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременных, рожениц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Можно получить квартальные отчеты , как по всему стационару , так и по любому его стационару . Для этого пользователю предлагается определить отделение , по которому бу дет формироваться отчет . Если отделение не будет указано (нажата клавиша ESC), то отчет будет формироваться по всему стационару. После выбора отчета необходимо ввести дату начала и окончания отчетного периода . Для ввода даты наберите чч /мм /гг на клавиатуре и нажмите клавишу ENTER. Для отказа от ввода нажмите клавишу ESC. После обработки получается необходимая отчетная форма , которая изображается на экране и сохраняется в файле . Можно получить твердую копию отчетной формы на принтере. Чтобы получить твердую копию на принтере необходимо выполнить следующие действия : Ш включить принтер ; Ш вставить в принтер лист бумаги ; Ш выбрать в меню альтернативу с заголовком "Выводить отчет на печать ". Всюду для возврата в предыдущее меню используйте клавишу ESC. Внимани е ! Некоторые отчетные документы имеют большую ширину , поэтому для их распечатки необходим широкий принтер . Ширину отчета можно определить при его просмотре после того , как он появится на экране. 3.2.8. Настройка. Режим настройки скрыт от конечного пользова теля программы и доступен лишь администратору БД , используя его можно настроить программу на структуру конкретного стационара . Подробнее процедура настройки описана в "Руководстве системного программиста ". 3.2.9. Выход из программы. Для окончания работы с программой "КАРТА " следует выбрать пункт "Выход " главного меню. Приложение 4 Руководство системного программиста “ Автоматизированной системы учета выбывших из стационара ” 1. Общие сведения о программе ВНИМАНИЕ ! Перед прочтением данного документа следует ознакомиться с документами “ Описание применения ” и “ Руководство оператора ” . Системному программисту необходимо также оз накомиться с документом “ Текст и описание программы ”. Автоматизированная система учета выбывших из стационара (условное обозначение КАРТА ) предназначена для автоматизации процесса заполнения формы № 066/у Минздрава России и получения на ее основе фиксирован ных отчетных форм. Программа обеспечивает : 1. Ввод , хранение , коррекцию данных по выписанным из стационара больным ; 2. Оформление печатных документов по данным о выписанных больных за отчетный период ; 3. Настройку на структуру конкретного стационара. Пр ограмма "КАРТА " реализована на персональных ЭВМ IBM PC XT/AT со следующим набором периферийных устройств : принтер , дисплей с платой адаптера EGA/VGA, накопитель на жестком диске объемом не менее 80 Мб . Минимальный объем свободной оперативной памяти 540 Кб. Программа работает под управлением операционной системы MS DOS версии 3.1 и выше. Перед первым запуском программы в файл AUTOEXEC.BAT необходимо включить запись : SET CLIPPER=F50. В файле CONFIG.SYS параметр FILES установить равным 50 (FILES=50). Программа реализована на языке программирования Clipper Summer'87. 2.Структура базы данных 2.1 Общая структура База данных (БД ) программы "КАРТА " состоит из следующих основных компонентов : Ш Таблица для хранени я данных по пациентам ; Ш Таблица для хранения шаблона формы N66/у ; Ш Таблица для хранения справочных данных и данных для настройки программы структуру конкретного стационара ; Ш Таблица для формирования и хранения отчетных документов. 2.2 Фа йловая структура БД Каждая таблица включает в себя файл (ы ) данных и файл (ы ) индексов. Таблица для хранения данных по пациентам содержит файлы : КА RТА 66.DBF и КА RТА 66.NTX DIA66.DBF и DIA66.NTX OP66.DBF и OP66.NTX Таблица для хранения шаблона ф ормы № 066/у содержит файлы : MENU.DBF и MENU.NTX Таблица для хранения справочных данных содержит файлы : CODIF.DBF и CODIF.NTX Таблица для формирования и хранения отчетных документов содержит файлы : CLASS.DBF и CLASS.NTX GRUP1.DBF и GRUP1.NTX GRUP2.DBF и GRUP2.NTX BUFF8.DBF и BUFF8.NTX Кроме того , имеются файлы с информацией для представления отчетов в удобной для пользователя форме : OTD.FRM ; OTD1.FRM ; OTD2.FRM ; OTD5.FRM , OTD51.FRM ; NEONAT.FRM ; OTCH.FRM ; OTCH1.FRM ; OTCH2.FRM ; OTCH3.FRM ; OTCH4.FRM , OTCH41.FRM ; OTCH5.FRM ; OTCH6.FRM ; OTCH7.FRM ; OTCH8.FRM ; OTCH9.FRM; OTCH91.FRM ; OTCH92.FRM ; OTCH10.FRM; OTCH101.FRM; OTCH102.FRM ; OTCH11.FRM; OTCH111.FRM; OTCH112.FRM ; OTCH12.FRM; OTCH121.FRM ; OTCH13.FRM ; OTCH14.FRM ; OTCH15.FRM; OTCH151.FRM ; OTCH16.FRM ; OTCH17.FRM ; OTCH18.FRM ; OTCH19.FRM ; 2.3 Структуры файлов БД 2.3.1 Структура файла KARTA66.DBF . ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_IB C 7 номер истории болезни FAM C 30 фамилия больного F_S _NAME C 30 имя , отчество больного DATE_B D 8 дата рождения HOUR_B N 2 часы рождения MINS_B N 2 минуты рождения OLD N 2 код возраста POL N 1 код пола MASSA C 6 масса PLACE_LIV C 60 адрес RAION N 2 код района CITY_VIL N 1 код : горожанин /селянин DIRECT1 N 2 код направляющего учреждения DIRECT2 N 2 код стационара STATE N 2 код государства WHY N 1 код причины направления DEPARTMENT N 2 код отделения стационара KOIKA N 2 код профиля койки PASS N 1 код состояния поступления TIME N 1 к од поступления после болезни DATE_IN D 8 дата поступления в стационар HOUR_IN N 2 часы поступления MINS_IN N 2 минуты поступления END1 N 1 код исхода END2 N 1 код причины исхода END3 N 2 код учреждения для перевода DATE_END D 8 дата исхода HOUR_END N 2 часы исхода MINS_END N 2 минуты исхода ALL_DAY N 2 количество дней в стационаре DIA_DIRECT C 4 направ ляющий диагноз NUM_COME N 1 код числа поступлений RW_DATE D 8 дата анализа на RW RW_REZ N 1 код результата RW FAM_DOCTOR N 2 код фамилии лечащего врача Индексное выражение для файла : NUM_IB . 2.3.2 Структура фай ла DIA66.DBF ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_IB C 7 номер истории болезни KOD1 C 1 код заболевания KOD2 C 1 код диагноза SHIFR C 4 шифр заболевания COMM M 10 названия заболеваний Индексное выражен ие для файла : NUM_IB+KOD1 . 2.3.3 Структура файла OP66.DBF ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUM_I C 7 номер истории болезни SHIFR C 4 шифр операции DATA D 8 дата операции COMM M 10 название операции Индексно е выражение для файла : NUM_IB . 2.3.4 Структура файла MENU.DBF ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ KEY C 9 ключ элемента 66 формы TEXT C 60 текст элемента Индексное выражение для файла : KEY . 2.3.5 Структура файла CODIF.DBF ИМЯ ТИ П ДЛИНА СОДЕРЖАНИЕ KEY C 9 ключ элемента справочника TEXT C 60 текст элемента справочника Индексное выражение для файла : KEY . 2.3.6 Структура файла CLASS.DBF ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NAME_CLASS C 100 название класса заболеваний SHIFR_LEFT C 4 левая граница класса SHIFR_RIGH C 4 правая граница класса Индексное выражение для файла : SHIFR_LEFT. Файлы GRUP1.DBF и GRUP2.DBF имеют аналогичную структуру. 2.3.7 Структура файла BUF F8.DBF ИМЯ ТИП ДЛИНА СОДЕРЖАНИЕ NUMBER C 2 Содержание каждого поля SHIFR C 4 зависит от вида отчетного NAME C 100 документа , который формируется NAMECL C 100 и затем хранится в SHIFRL C 4 этой базе данных . SHIFRR C 4 COUNT1 N 10 COUNT2 N 10 A1 N 5 ........ E1 N 5 Индексное выражение для файла : SHIFR . 3. Структура программы КАРТА 3.1 Общие сведе ния о структуре программы Структура программы КАРТА представлена на рис .6 . Рис . 6 . Логическая структура программы Программа состоит из 5 функциональных модул ей функций и библиотеки функций. Главный модуль выполняет следующие функции : Ш инициализация глобальных переменных ; Ш ввод текущей даты ; Ш открытие всех рабочих областей с индексными файлами ; Ш организация главного меню. Модуль ввода данных выполняет с ледующие функции : Ш создание и ввод данных в новую КАРТУ ; Ш редактирование данных уже существующих КАРТ. Модуль навигации организует просмотр БД по определенным пользователем условиям. Модуль удаления удаляет из БД КАРТЫ , определенные пользователем. Моду ль отчетов формирует следующие отчеты : Ш месячные по любому отделению ; Ш квартальные как по всему стационару , так и по любому его отделению : 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных , поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учреждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных , выбывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология бо льных , переведенных из других стационаров ; 8. Нозологическая таблица умерших ; 9. Нозология больных умерших по возрастам ; 10. Нозология умерших в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекц ионных заболеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение выбывших иногородних больных по каналам госпитализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , переведенных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерших в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа пос ле рождения , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивших в первые сутки от начала заболевания , число больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременн ых , рожениц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Модуль настройки выполняет следующие функции : Ш организация меню настройки ; Ш коррекция справочников по структуре стационара. Вызов всех модулей второго уровня осуществляется из главного меню программы . Связь между отдельными модулями второго уровня осуществляется только по данным через глобальные переменные и файлы активной базы данных. Работа программы во всех режимах кроме режима настройки детально описана в документе "Руководство программиста ". Режим настройки является режимом администратора базы данных и описан в настоящем документе в разделе "Настройка программы ". 4. Настройка программы Настройка программы на режим конкретного исп ользования заключается в корректировке справочников . Для корректировки справочников необходимо , находясь в главном меню программы , нажать Ctrl-F10. При этом пользователь попадает в меню со следующими альтернативами : Ш выбор и изменение списка отделений ст ационара ; Ш выбор и изменение списка профилей коек ; Ш выбор и изменение списка направляющих организаций ; Ш выбор и изменение списка причин смерти ; Ш выбор и изменение списка районов ; Ш выбор и изменение списка возрастов ; Ш выбор и изменение списка пр ичин перевода ; Ш выбор и изменение списка причин направлений ; Ш выбор и изменение списка стран содружества. При выборе любого пункта меню пользователь переходит к меню добавления , удаления и переименования выбранного списка. В меню , для добавления нового элемента необходимо нажать клавишу INS. При этом вам будет предложено ввести новое название . Введите его и нажмите клавишу ENTER. Для удаления элемента нажмите клавишу DEL. Предоставляется другое меню из двух альтернатив "Удалять элемент из списка ", "Не у далять ". Для отказа от удаления выберите пункт "Не удалять " и нажмите клавишу ENTER либо клавишу ESC. Для удаления стационара выберите пункт меню "Удалять стационар из списка " и нажмите клавишу ENTER. При нажатии клавиши ENTER осуществляется выбор текущего элемента в списке с целью его переименования . Введите новое название и нажмите клавишу ENTER. ESC означает отказ от переименования. При нажатии ESC происходит возврат в предыдущее меню. 5. Сообщения системному программисту В про грамме не предусмотрено специальных сообщений для системного программиста . При работе программы возможна выдача сообщений исполнительной системой Clipper. Типичными сообщениями могут быть : Ш "Not enought memory","Memory fault" - по этим сообщениям следует удалить из оперативной памяти все резидентные программы , кроме русификаторов. Ш "Unable to open file <имя _файла >" - следует проверить наличие в директории указанного файла и при его отсутствии скопировать с резервной дискеты. В более сложных случаях след ует записать сообщение и ситуацию , в которой оно возникло и обратиться к разработчикам программы.. Приложение 5 Текст и описание программы : “ Автоматизированная система учета выб ывших из стационара ” . 1. Общие сведения о программе. ВНИМАНИЕ ! Перед прочтением данного документа следует ознакомиться с документами "Описание применения " и "Руководство оператора ". Автоматизированная система учета выбывших из ст ационара (условное обозначение КАРТА ) предназначена для автоматизации процесса заполнения формы № 066/у Минздрава и получения фиксированных отчетных форм. Программа работает под управлением операционной системы MS DOS версии 3.1 и выше. Перед первым запуско м программы в файл AUTOEXEC.BAT необходимо включить запись : SET CLIPPER=F50. В файле CONFIG.SYS параметр FILES установить равным 50 (FILES=50). Программа реализована на языке программирования Clipper Summer'87. 2. Функциональное назначение. Программа выполняет следующие функции : 1. Ввод , хранение , коррекцию данных по выписанным из стационара больным ; 2. Оформление печатных документов по данным о выписанных больных за отчетный период ; 3. Настройку на структуру конкретного стац ионара. 3. Описание логической структуры программы КАРТА. 3.1 Общие сведения о структуре программы Структура программы КАРТА представлена на рис .7. Рис . 7 . Логическая структура программы. Программа состоит из 5 функциональных модулей функций и библиотеки функций. Главный модуль выполняет следующие функции : Ш инициализация глобальных переменных ; Ш ввод текущей даты ; Ш о ткрытие всех рабочих областей с индексными файлами ; Ш организация главного меню. Модуль ввода данных выполняет следующие функции : Ш создание и ввод данных в новую КАРТУ ; Ш редактирование данных уже существующих КАРТ. Модуль навигации организует просмотр БД по определенным пользователем условиям. Модуль удаления удаляет из БД КАРТЫ , определенные пользователем. Модуль отчетов формирует следующие отчеты : Ш месячные по любому отделению ; Ш квартальные как по всему стационару , так и по любому его отделению : 1. Состав больных в стационаре , сроки и исход лечения ; 2. Состав больных новорожденных , поступивших в возрасте 0-6 суток жизни и исход их лечения ; 3. Хирургическая работа учреждений ; 4. Распределение больных по возрасту и району ; 5. Состав больных , вы бывших в возрасте от 0 до 6 суток жизни ; 6. Больные , переведенные в другие лечебные учреждения ; 7. Нозология больных , переведенных из других стационаров ; 8. Нозологическая таблица умерших ; 9. Нозология больных умерших по возрастам ; 10. Нозология умерш их в возрасте от 0 до 6 дней жизни ; 11. Операции умерших ; 12. Нозология умерших до суток ; 13. Нозология инфекционных заболеваний ; 14. Распределение инфекционных заболеваний по отделениям ; 15. Распределение выбывших иногородних больных по каналам госпи тализации и отделениям больницы ; 16. Число больных , переведенных в другие стационары , из них число новорожденных , переведенных в другие стационары , и число лиц , госпитализированных для обследования и оказавшихся здоровыми ; 17. Число новорожденных , умерши х в возрасте от 0-6 суток , число умерших в первые 24 часа после поступления в стационар : в возрасте 0-24 часа после рождения , до 1 года , в том числе от пневмонии ; 18. Число больных инфарктом миокарда , поступивших в первые сутки от начала заболевания , числ о больных инфарктом миокарда , умерших в первые 24 часа после поступления в стационар ; 19. Число умерших беременных , рожениц и родильниц , из них число умерших от заболеваний , осложняющих беременность и роды. Модуль настройки выполняет следующие функции : Ш организация меню настройки ; Ш коррекция справочников по структуре стационара. Вызов всех модулей второго уровня осуществляется из главного меню программы . Связь между отдельными модулями второго уровня осуществляется только по данным через глобальные пер еменные и файлы активной базы данных. Работа программы во всех режимах кроме режима настройки детально описана в документе "Руководство оператора ". Режим настройки является режимом администратора базы данных и описан в документе "Руководство системного про граммиста и администратора базы данных " в разделе "Настройка программы ". Исходный текст программы (всех модулей ) находится в файле KARTA.PRG. Библиотека функций находится в файле LIB.OBJ. Справочники размещены в файле CODIF.DBF. Для получения загрузочного модуля необходимо набрать на клавиатуре следующую команду : rtlink fi KARTA, lib lib terminal, clipper, extend, dbfntx и нажать клавишу ENTER. 3.2 Описание алгоритма программы Схема алгоритма работы программы представлена на рис . 8. Для работы с Международным классификатором болезней (МКБ ) использовалась функция MKB(). Для работы с каталогом операций использовалась функция CATALOG(). Рис . 8 . Сх ема алгоритма работы программы . Для работы со справочниками используются следующие функции : Ш codif() - функция выбора альтернативы из вертикального меню , построенного на основе данных справочника. Ш mempro(), codpic(), codtxt() - функции для экранного р едактирования МЕМО - полей баз данных. Ш extra() - функция восстановления текста выбранной альтернативы по ее номеру в справочнике. Ш ins_pic() - функция добавления информации в справочник. Ш del_pic() - функция удаления инфомации из справочника. Для пр едставления текста отчетного документа на экране используется функция viewer(). 4. Используемые технические средства Программа "КАРТА " предназначена для установки на персональных ЭВМ IBM PC XT/AT cо следующим набором периферийных устройств : принтер , дисплей с платой адаптера EGA \ VGA, накопитель на жестком диске объемом не менее 80 Мб . Минимальный объем свободной оперативной памяти 540 Кб. 5. Вызов и загрузка Для вызова программы следует набрать в командной строке : =>karta или выбрать файл karta.EXE с помощью «оболочки» типа 'NORTON COMMANDER' и нажать клавишу ENTER. 6. Входные данные Входной информацией программы является следующая : Ш данные , вводимые пользователем (см . "Руководст во оператора "); Ш данные , хранящиеся в базе данных по пациентам (см . "Руководство системного программиста "); Ш текущая системная дата ; Ш данные , хранящиеся в справочных базах данных (см . "Руководство системного программиста "). 7. Выходные д анные Выходной информацией программы является следующая : Ш данные , введенные пользователем в базу данных по пациентам (см . "Руководство системного программиста "); Ш документы , сформированные по введенным данным (см . "Руководство оператора "); . Текст программы на языке Clipper Summer'87 Модуль : Karta.prg ********************************************************************* * Название программы : "KARTA" * * Дата последних изменений : 23.12.92 * * Исходный текст : Clipper Summer'87 * ********************************************************************* SET CONSOLE OFF SET ESCAPE ON SET MESSAGE TO 23 CENTER SET BELL OF SET DATE GERMAN SET SCOREBOARD O FF SET CONFIRM ON SET WRAP ON SET KEY -9 TO GO_MAIN && ПО F10 - ВОЗВРАТ В МЕ HЮ SET KEY -29 TO recon init_lib() && Функция настройки для работы с библиотекой LIB29 t_qwerty=.T. CLEAR ******************************************** * глобаль ные переменные программы ******************************************* PUBLIC edit_index && .T.- редактировать номер ИБ нельзя && .F.- можно edit_index=.F. PUBLIC gotomain && принудительный возврат в главную процедуру && .T.- прервать внутренний цикл и вернуться в MAIN gotomain=.F. PUBLIC _today && Текущая дата работы PUBLIC rec_num && Номер текущей записи ******************************************* f1 = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; CHR(217) + CHR(196) + CHR(192) + CHR(179) f2 = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) f3 = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; CHR(180) + CHR(196) + CHR(19 5) + CHR(179) f1_fon = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; CHR(217) + CHR(196) + CHR(192) + CHR(179) + ; CHR(178) f2_fon = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + ; CHR(178) dn_s=CHR(198)+CHR(205)+CHR(181)+CHR(179)+; && стыкуется с рамкой CHR(217)+CHR(196)+CHR(192)+CHR(179) && по верхней границе fon1=CHR(177) fon2=CHR(32) singl=CHR(218)+CHR(196)+CHR(191)+CHR(179)+; CHR(217)+CHR(196)+CHR(192)+CHR(17 9) doubl=CHR(201)+CHR(205)+CHR(187)+CHR(186)+; CHR(188)+CHR(205)+CHR(200)+CHR(186) IF .NOT. ISCOLOR() color1="W+/N,N/W,W+/N,W/N,W/N" && для меню color2="W/N,W+/N" && для gets color3="W+/N,N/W" && для кодификаторов color4="W/N,N/W" && для рамки каталога color5="W/N,N/W" && для меню при редактировании color6="W/N,W+/N" && для memed color7=color2 && для шаблонов color8="W/N,W+/N,N/W" && для HYPERTEXT 1-го уровня color9="W/N,W+/N,N/W" && для HYPERTEXT 2-го уровня ELSE color1="W +/B,N/G,BG/N,RB+/B,BG/B" color2="BG/B,GR+/B,BG/B,RB+/B,BG/B" color3="N/W,W+/GR" color4="N/GR,W+/GR" color5="G+/B,N/W,BG/B,RB+/B,+GR/B" color6="W+/GR,N+/W" color7="N/GR,+GR/GR" color8="W+/B,G+/B,N/W" color9="B/G,W+/G,W+/N" ENDIF ******************** ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ ********************** PRIVATE _NUM_IB && Номер истории болезни больного PRIVATE _FAM && Фамилия больного _FAM=SPACE(25) PRIVATE _F_S_NAME && Имя,Отчество б ольного PRIVATE _DATE_B && Дата рождения больного PRIVATE time_B && Время рождения time_B="00.00" PRIVATE _HOUR_B && Часы рождения PRIVATE _MINS_B && Минуты рождения PRIVATE _POL && Пол PRIVATE _OLD && Возраст на моме нт поступления PRIVATE _OLD_D && Возраст на момент смерти PRIVATE _MASSA && Масса PRIVATE _PLACE_LIV && Место жительства PRIVATE _RAION && Район проживания PRIVATE _CITY_VILL && Городской /сельский житель PRIVATE _DIRECT1 && Кем на правлен PRIVATE _DIRECT2 && Номер направляющего стационара PRIVATE _STATE && Название государства PRIVATE _PLACE && Название области РФ *PRIVATE _WHY && Причины направления PRIVATE _DEPARTMENT && Отделение PRIVATE _KOIKA && П рофиль койки PRIVATE _PASS && Характер поступления (экстренно,не экстренно ) PRIVATE _TIME && Через какое время после заболевания PRIVATE _DATE_IN && Дата поступления _DATE_IN=DATE() PRIVATE time_IN && Время поступления time_IN="00.00 " PRIVATE _HOUR_IN && Часы поступления PRIVATE _MINS_IN && Минуты поступления PRIVATE _END1 && Исход заболевания PRIVATE _END2 && Причина исхода PRIVATE _END3 && Если переведен , то куда PRIVATE _DATE_END && Дата выписки PRIVATE time_END && Время выписки time_END="00.00" PRIVATE _HOUR_END && Часы выписки PRIVATE _MINS_END && Минуты выписки PRIVATE _ALL_DAY && Общее количество дней , проведенных в стационаре PRIVATE _DIA_DIRECT && Диагноз направляющего учрежде ния PRIVATE _NUM_COME && Номер поступления PRIVATE _RW_DATE && Дата анализа на RW PRIVATE _RW_REZ && Результат анализа PRIVATE _FAM_DOCTOR && Фамилия лечащего врача PRIVATE _KOD1 && Клинический диагноз PRIVATE _KOD2 && Поталого- анатомический диагноз PRIVATE _SHIFR && Шифр заболевания по МКБ PRIVATE _SHIFR_ILL && Шифр операции из каталога операций ********************************************************************* SELECT 0 && БД шифров заболеваний всех больн ых USE DIA66 INDEX DIA66 ALIAS DIA66 COPY STRUCTURE TO BUFF.DBF SELECT 0 && Вспомогательная БД для формирования диагнозов больного USE BUFF ALIAS BUFF INDEX ON NUM_IB+KOD2+KOD1 TO BUFF.NTX SELECT 0 && БД шифров операций всех бол ьных USE OP66 INDEX OP66 ALIAS OP66 COPY STRUCTURE TO BUFF2.DBF SELECT 0 && Вспомогательная БД для формирования шифров операций USE BUFF2 ALIAS BUFF2 INDEX ON NUM_IB TO BUFF2.NTX SELECT 0 && БД кодификаторов USE CODIF INDEX CODIF ALIAS CODIF SELECT 0 && БД с основной информацией о пациентах USE KARTA66 INDEX KARTA66 ALIAS KARTA SELECT 0 && БД с шаблонами USE CODPIC INDEX CODPIC ALIAS CODPIC SELECT 0 && БД с прототипами USE CODTXT INDEX CODTXT ALIAS CODTXT *********************** ОС HОВ HАЯ РАМКА *************************** SET COLOR TO "W+/N" flop_box('c', 0,0,24,79,doubl+fon1) saycent(0,0,79," ФОРМА N 66 ") saycent(24,0,79,' __ перемещение _- выбо р F10-меню ') ******************** ВВОД СЕГОД HЯШ HЕЙ ДАТЫ *********************** SET COLOR TO(color2) _today=DATE() flop_box('c', 9,25,11,55,singl+fon2) @ 10,32 SAY "СЕГОД HЯ :" GET _today READ _NUM_IB=RIGHT(STR(YEAR(_today)),2)+"00000" ********* ************************************************************* * ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ * ********************************************************************** @ 1,1 CLEAR TO 23,78 && очистка экрана для перем енных SET COLOR TO (color1) @ 2,1,22,78 BOX f1_fon choice = 1 PRIVATE screen0 DO WHILE choice # 6 SET COLOR TO (color1) gotomain=.f. ***************** ВЫВОД ГЛАВНОГО МЕНЮ ********************* @ 1,2 PROMPT "Создание " MESSAGE " ввод новой записи ИБ " @ 1,12 PROMPT "Удаление " MESSAGE " удаление записи из ИБ " @ 1,22 PROMPT "Редактирование /Печать " MESSAGE " редактирование записи ИБ " @ 1,45 PROMPT "Навигатор " MESSAGE "движение по базе данных " @ 1,56 PROMPT "Отчет " MESSAGE "состав ление отчетных форм " @ 1,67 PROMPT " Выход " MESSAGE " выход из программы " MENU TO choice SAVE SCREEN TO screen0 DO CASE CASE choice=1 && Добавления записи IF( inpindex()=0) && Ввод ключа "НОМЕР ИСТОРИИ БОЛЕЗ НИ " @ 11,18 CLEAR TO 14,62 saycent(12,20,60,"ПОДОЖДИТЕ НЕМНОГО - ИДЕТ ИНИЦИАЛИЗАЦИЯ ") DO edit WITH .T. ENDIF CASE choice=2 && Удаление записи DO del CASE choice=3 && Изменение за писи ИБ SET COLOR TO(color2) PRIVATE D1 DO WHILE .T. D1=det() && Поиск нужной записи IF D1=1 && Запись найдена saycent(12,20,60,"ПОДОЖДИТЕ НЕМНОГО - ИДЕТ СЧИТЫВАНИЕ ИЗ БД ") DO edit WITH .T. EXIT ELSEIF D1=2 && Запись не найдена saycent(12,20,60,"ИНФОРМАЦИИ ОБ УКАЗАННОМ БОЛЬНОМ В БД НЕТ ") INKEY(5) ELSE EXIT ENDIF ENDDO RELEASE D1 CASE c hoice=4 && Движение по БД DO navy CASE choice=5 && Составление отчетных документов rez() CASE choice=6 && Завершение программы EXIT ENDCASE PRIVATE sel sel=SELECT() SELECT BUF F ZAP SELECT BUFF2 ZAP SELECT (sel) RELEASE sel RESTORE SCREEN FROM screen0 ENDDO COMMIT && Сохраняем рабочие области на диске CLOSE ALL DELETE FILE BUFF.DBF DELETE FILE BUFF.DBT DELETE FILE BUFF.NTX DELETE FILE BUFF2.DBF DELETE FILE BUFF2.DBT DELETE FILE BUFF2.NTX RETURN ********************************************************************** * КО HЕЦ ГЛАВ HОГО МОДУЛЯ * *************************************************************** ******* ********************************************************************** * INPINDEX() - функция ввода номера истории болезни * ********************************************************************** FUNCTION inpindex PRIVATE sel,ret, scr ret=-1 @ 2,1,4,78 BOX f3+fon2 sel=SELECT() SELECT KARTA SET CURSOR ON DO WHILE !gotomain SET COLOR TO(color2) @ 3,28 SAY "Номер ИБ " GET _NUM_IB PICTURE "@R 99/99999" READ IF LASTKEY()=27 && ESC ret= (-1) EXIT ENDIF IF LEN(ALLTRIM(_NUM_IB))=7 SEEK _NUM_IB IF FOUND() TONE(100,3) message('e',"ТАКАЯ ЗАПИСЬ УЖЕ СУЩЕСТВУЕТ,ПРОВЕРЬТЕ HОМЕР ИБ ") LOOP ENDIF ret=0 EXIT ELSE TONE(100,3) message('e','HЕ ЗАПОЛ HЕ H НОМЕР ИБ,ПРОВЕРЬТЕ ЗАПИСЬ ') ret=-1 ENDIF ENDDO SELECT(sel) RETURN (ret) ********************************************************************** ********************** ************************************************ * DET() - функция поиска необходимой для редактирования записи * ********************************************************************** FUNCTION det PRIVATE ret1,menu1 PRIVATE sel1,clr1,screen1 ret1=2 sel1=SELECT() clr1=SETCOLOR() SELECT karta SET COLOR TO &color5 @ 10,8 CLEAR TO 14,72 SAVE SCREEN TO screen1 @ 11,15 PROMPT "ВВЕДИТЕ НОМЕР И /Б " @ 13,15 PROMPT "ВВЕДИТЕ ФАМИЛИЮ БОЛЬНОГО " MENU TO menu1 IF menu1=0 ret1=0 ELSEIF m enu1=1 SET CURSOR ON @ 11,45 GET _NUM_IB PICTURE "@R 99/99999" READ SET CURSOR OFF SEEK _NUM_IB IF FOUND() ret1=1 ENDIF ELSEIF menu1=2 SET CURSOR ON @ 13,45 GET _FAM PICTURE "@K" VALID RUSSIAN(_FAM) READ SET CURSOR OFF SE T FILTER TO FAM=ALLTRIM(_FAM) GO TOP IF !EOF() ret1=1 _NUM_IB=NUM_IB ENDIF SET FILTER TO ENDIF RESTORE SCREEN FROM screen1 SELECT (sel1) SET COLOR TO (clr1) RETURN (ret1) ********************************************************************** * ЗАПОЛНЕНИЕ 66 ФОРМЫ * ********************************************************************** PROCEDURE edit PARAMETERS do_edit PRIVATE w t,wb,wl,wr,choice,beg_line,length,string,string1,title PRIVATE sel,str,i **************** ОБЪЯВЛЕНИЕ МЕНЮ ***************** PRIVATE last,numenu last=SELECT() numenu=1 select 0 use menu.dbf index menu alias menu numenu=RECCOUNT() DECLARE promp[numen u-1],vars[numenu-1],row[numenu-1],col[numenu-1] && массив промптеров для основного меню GO TOP i=1 SEEK "MAIN" title=STRTRAN(ALLTRIM(text),'Н ','H') SKIP DO WHILE !EOF() &&LEFT(KEY,4)="MAIN" promp[i]=STRTRAN(ALLTRIM(text),'Н ','H') i=i+1 SKIP ENDDO use SELECT (last) ******************* КОНЕЦ ОБЪЯВЛЕНИЯ ************** AFILL(vars,' ') AFILL(col,1) wt=3 wb=22 wl=2 wr=77 length=wr-wl+1 && Длина строки текста , выводимого на экран beg_line=1 PRIVATE New_Str && Признак новой строки для Context New_Str=.F. && Без выделения промптеров ************************************************************** s=IF(KARTA->END1=3,6,3) DECLARE promp1[s],vars1[s],row1[s],col1[s] && массив промптеров дополн . меню promp1[1]="Основное заболевани е :" promp1[2]="Осложнения :" promp1[3]="Сопутствующие заболевания :" AFILL(vars1,' ') AFILL(col1,1) IF s=6 promp1[4]="Основное заболевание :" promp1[5]="Осложнения :" promp1[6]="Сопутствующие заболевания :" ENDIF ************************************************************** DO initial && Процедура формирования выводимого текста ************************************************************** cur_promp=1 @ 3,1 CLEAR TO 22,78 DO WHILE .T. IF gotomain.AND.do_ed it IF yesno(12," Сохранить изменения в базе данных ? ")=1 IF all_r() DO new_save RETURN ELSE gotomain=.F. ENDIF ELSE RETURN ENDIF ELSEIF gotomain.AND.!do_edit RETURN ENDIF new_str=.F. choice=hypertxt(wt,wl,wb,wr,string,promp,row,col,@beg_line,@cur_promp,color8,; title) cur_promp=cur_promp%len(promp)+1 IF do_edit i=choice DO CASE CASE i=0 LOOP CASE i=1 LOOP CASE i=2 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_FAM,; "","RUSSIAN(_FAM)") CASE i=3 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_F_S_NAME,; "","RUS SIAN(_F_S_NAME)") CASE i=4 _DATE_IN=d_input(_DATE_IN) vars[i]=DTOC(_DATE_IN) _ALL_DAY=_DATE_END-_DATE_IN IF _ALL_DAY=0 _ALL_DAY=1 ENDIF DO ch_day && Изменение количества дней , проведеннх в ст ационаре CASE i=5 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_IN,; "99.99","check_T(time_IN)") _HOUR_IN=VAL(SUBSTR(time_IN,1,2)) _MINS_IN=VAL(SUBSTR(time_IN,4,5)) CASE i= 6 vars[i]=codif1("POLS",@_POL) CASE i=7 _DATE_B=d_input(_DATE_B) vars[i]=DTOC(_DATE_B) CASE i=8 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_B,; "99.99","check_T(time_B)") _HOUR_B=VAL(SUBSTR(time_B,1,2)) _MINS_B=VAL(SUBSTR(time_B,4,5)) y_m_day(_DATE_B,_HOUR_B,_MINS_B,_DATE_IN,_HOUR_IN,_MINS_IN) CASE i=9 vars[i]=codif1("OLDS" ,@_OLD) CASE i=10 vars[i]=m_input() && Ввод веса тела CASE i=11 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_PLACE_LIV) CASE i=12 vars[i]=codif1("RIGS",@_RAION) CASE i=1 3 vars[i]=codif1("CITZ",@_CITY_VILL) CASE i=14 vars[i]=codif1("DIRS",@_DIRECT1) IF _DIRECT1=1 vars[i]=codif1("BIRS",@_DIRECT2) ELSEIF _DIRECT1=2 vars[i]=codif1("HOSP",@_DIRECT2) ELSE _DIRECT2=0 ENDIF CASE i=15 vars[i]=codifpic("CODIF","STTE",@_STATE) IF _STATE=1 promp[i]="Регион :" vars[i]=codifpic("CODIF","PLCE",@_PLACE) ELSE promp[i]="Государство :" ENDIF * CASE i=15 * vars[i]=codif1("RIZS",@_WHY) CASE i=16 vars[i]=codif1("DEPS",@_DEPARTMENT) CASE i=17 vars[i]=codif1("KOIK",@_KOIKA) CASE i=18 vars[i]=codif1("EXTR",@_PASS) CASE i=19 vars[i]=codif1("TIMS",@_TIME) CASE i=20 vars[i]=codif1("REZS",@_END1) CASE i=21 _DATE_END=d_input(_DATE_END) vars[i]=DTOC(_DATE_END) _ALL_DAY=_DATE_END-_DATE_IN IF _ALL_DAY=0 _ALL_D AY=1 ENDIF IF _ALL_DAY>=0.AND.EMPTY(_DATE_IN)=.F. vars[i]=vars[i]+SPACE(5)+"Проведено дней в стационаре :"+STR(_ALL_DAY) ENDIF CASE i=22 vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_END,; "99.99","check_T(time_END)") _HOUR_END=VAL(SUBSTR(time_END,1,2)) _MINS_END=VAL(SUBSTR(time_END,4,5)) CASE i=23 PRIVATE txtd txtd=SPACE(100) vars[i]=offset_get(wt,wl,beg_line,ro w[i],col[i],promp[i],@_DIA_DIRECT,; "@R 999.9") mkb(1,1,@_DIA_DIRECT,@txtd) IF _DIA_DIRECT=" " vars[23]="" ELSE vars[23]=SUBSTR(_DIA_DIRECT,1,3)+"."+SUBSTR(_DIA_DIRECT,4,1)+" "+; "<"+TRIM(txtd)+">" new_str=.T. ENDIF RELEASE txtd CASE i=24 vars[i]=codif1("VIZI",@_NUM_COME) CASE i=27 _RW_DATE=d_input(_RW_DATE) vars[i] =DTOC(_RW_DATE) CASE i=28 vars[i]=codif1("RWRZ",@_RW_REZ) CASE i=29 vars[i]=codifpic("CODIF","FAMS",@_FAM_DOCTOR) ********************************************* CASE i=25 vars[i]=diagn() new_str=.T. ********************************************* CASE i=26 DO op new_str=.T. ENDCASE *********************************************************** string1="" IF choice#25.AND.choice#26 vars[choice]=TRIM(vars[choice])+"." ENDIF context(@string1,promp[choice],vars[choice],length,New_Str) IF choice=20 IF _END1=2 && переведен context(@string1,"Причина :",codif1("RIZ2",@_END2)+".",length,.F.) context(@string1,"К уда :",codif1("HOSP",@_END3)+".",length,.F.) ELSEIF _END1=3 && умер context(@string1,"Причина :",codif1("RIZ3",@_END2)+".",length,.F.) ENDIF ELSEIF choice=22.AND._END1=3 y_m_day(_DATE_B,_HOUR_B,_MINS_B,_DATE_END,_HOUR_END,_ MINS_END) context(@string1,"Возраст на момент смерти :",; extra1(_OLD_D,"OLDS")+".",length,.F.) ELSEIF choice=26 context(@string1,"Обследование на реакцию ВАССЕРМАНА :","",length,.F.) ENDIF stuff1(@string,len gth,string1,choice,row,len(promp)) ENDIF ENDDO RETURN ********************************************************************** * ПРОЦЕДУРА ФОРМИРОВАНИЯ СОДЕРЖИМОГО 66 ФОРМЫ * ********************************************************************** PROCEDURE initial PRIVATE sel,i,v PRIVATE rez SET CURSOR OFF sel=SELECT() v=replicate(chr(176),30) @ 13,25 SAY v SELECT karta vars[1]= SUBSTR(_NUM_IB,1,2)+'/'+SUBSTR(_NUM_IB,3,7) vars[2 ] =FAM _FAM=FAM vars[3] =F_S_NAME _F_S_NAME=F_S_NAME vars[4]=DTOC(DATE_IN) _DATE_IN=DATE_IN *__________________________________ _HOUR_IN=HOUR_IN _MINS_IN=MINS_IN IF _HOUR_IN=0.AND._MINS_IN=0 time_IN="00.00" ELSEIF _HOUR_IN=0 time_IN="00."+STR(MINS_IN) ELSEIF _MINS_IN=0 time_IN=STR(HOUR_IN)+".00" ELSE time_IN=STR(HOUR_IN)+"."+STR(MINS_IN) ENDIF vars[5]=time_IN *---------------------------------- vars[6] =extra1(POL,"POLS") _POL=POL vars[7] =DTOC(DATE_B) _DATE_B=DATE_B *__________________________________ _HOUR_B=HOUR_B _MINS_B=MINS_B IF _HOUR_B=0.AND._MINS_B=0 time_B="00.00" ELSEIF _HOUR_B=0 time_B="00."+STR(MINS_B) ELSEIF _MINS_B=0 time_B=STR(HOUR_B)+".00" ELSE time_B=STR(HOUR_B)+ "."+STR(MINS_B) ENDIF vars[8]=time_B *----------------------------------- vars[9] =extra1(OLD,"OLDS") _OLD=OLD _OLD_D=OLD_D vars[10] =MASSA _MASSA =MASSA vars[11] =PLACE_LIV _PLACE_LIV=PLACE_LIV vars[12] =extra1(RAION,"RIGS") _RAION =RAION vars[13]=extra1(CITY_VILL,"CITZ") _CITY_VILL=CITY_VILL *___________________________________ _DIRECT1=DIRECT1 _DIRECT2=DIRECT2 vars[14]=IF(_DIRECT2=0,extra1(_DIRECT1,"DIRS"),; IF(_DIRECT1=1,extra1(_DIRECT2,"BIRS"),; extra1(_DIRECT2,"HOSP"))) *------------------------------------ promp[15]=IF(PLACE#0,"Регион :","Государство :") vars[15]=IF(STATE#0,IF(STATE=1,; IF(PLACE=0,"Российская Федерация ",extra1(PLACE,"PLCE")),; extra 1(STATE,"STTE")),; "Российская Федерация ") _STATE=IF(STATE=0,1,STATE) _PLACE=PLACE vars[16]=extra1(DEPARTMENT,"DEPS") _DEPARTMENT=DEPARTMENT vars[17]=extra1(KOIKA,"KOIK") _KOIKA=KOIKA vars[18]=extra1(PASS,"EXTR") _PASS=PASS vars[19 ]=extra1(TIME,"TIMS") _TIME=TIME *__________________________________ _END1=END1 _END2=END2 _END3=END3 vars[20]=extra1(_END1,"REZS") *---------------------------------- vars[21]=DTOC(DATE_END) _DATE_END=DATE_END *__________________________________ _HOUR_END=HOUR_END _MINS_END=MINS_END IF _HOUR_END=0.AND._MINS_END=0 time_END="00.00" ELSEIF _HOUR_END=0 time_IN="00."+STR(MINS_END) ELSEIF _MINS_END=0 time_IN=STR(HOUR_END)+".00" ELSE time_END=STR(HOUR_END)+"."+STR(MINS_END) EN DIF vars[22]=time_END *__________________________________ _ALL_DAY=ALL_DAY IF !EMPTY(_DATE_END) vars[21]=vars[21]+SPACE(5)+"Проведено дней в стационаре :"+STR(_ALL_DAY) ENDIF *---------------------------------- _DIA_DIRECT=SHIFR IF _DIA_DIRECT#" " PRIVATE txtd txtd=SPACE(100) mkb(1,1,@_DIA_DIRECT,@txtd) vars[23]=SUBSTR(_DIA_DIRECT,1,3)+"."+SUBSTR(_DIA_DIRECT,4,1)+" "+; "<"+TRIM(txtd)+">" RELEASE txtd ELSEIF _DIA_DIRECT=" " vars[23]=_D IA_DIRECT ENDIF *---------------------------------- vars[24]=extra1(NUM_COME,"VIZI") _NUM_COME=NUM_COME vars[27]=DTOC(RW_DATE) _RW_DATE=RW_DATE vars[28]=extra1(RW_REZ,"RWRZ") _RW_REZ=RW_REZ vars[29]=extra1(FAM_DOCTOR,"FAMS") _FAM_DOCTOR=FAM_DOCTOR v =replicate(chr(178),10) @ 13,25 SAY v ************************************* vars[25]=initial1("DIA66") v=replicate(chr(178),20) @ 13,25 SAY v ************************************* SELECT op66 SET SOFTSEEK ON seek _num_ib SET SOFTSEEK OFF IF !FOUND() vars[26]="" && Хирургические операции _SHIFR_ILL="0000" &&SHIFR_ILL ELSE PRIVATE txts,string8 txts=SPACE(70) STORE "" TO string8 DO WHILE NUM_IB=_NUM_IB _SHIFR_ILL=SHIFR catalog(@_SHIFR_ILL,@tx ts) txts=TRIM(txts) context(@string8,"",txts,length,.F.) context(@string8," Дата проведения : ",DTOC(DATA)+".",length,.F.) context(@string8," Название операции : ",ALLTRIM(COMM),length,.F.) vars[26]=string8 SKIP 1 ENDDO RELEASE txts,string8 SELECT BUFF2 COMMIT APPEND FROM OP66 FOR NUM_IB=_NUM_IB ENDIF v=replicate(chr(178),30) @ 13,25 SAY v ******************* ФОРМИРОВАНИЕ ТЕКСТА ************************* string="" && Начальный текст SELECT karta SEEK _NUM_IB rez=FOUND() New_Str=.F. FOR i=1 TO LEN(promp) IF (i=23.AND._DIA_DIRECT#" ").OR.i=25.OR.i=26 New_Str=.T. ENDIF IF rez.AND.!EMPTY(vars[i]) row[i]=context(@string,promp[i],TRIM(vars[i])+".",length,New_Str) ELSE row[i]=context(@string,promp[i],vars[i],length,New_Str) ENDIF New_Str=.F. IF i=20 && Промпт "ИСХОД " IF _END 1=2 && переведен context(@string,"Причина :",extra1(_END2,"RIZ2")+".",length,.F.) context(@string,"Куда :",extra1(_END3,"HOSP")+".",length,.F.) ELSEIF _END1=3 && умер context(@string,"Причина :",extra1(_END2,"RIZ3")+".", length,.F.) ENDIF ELSEIF i=22.AND._END1=3 context(@string,"Возраст на момент смерти :",; extra1(_OLD_D,"OLDS")+".",length,.F.) ELSEIF i=26 context(@string,"Обследование на реакцию ВАССЕРМАНА :","",length ,.F.) ENDIF NEXT SET CURSOR ON SELECT (sel) RETURN ********************************************************************* * Функция инициализации диагнозов * ********************************************************************* FUNCTION initial1 PARAMETERS DBN PRIVATE sl,rez1 SET CURSOR OFF sl=SELECT() SELECT &DBN SET SOFTSEEK ON SEEK _NUM_IB SET SOFTSEEK OFF rez1=FOUND() IF !rez1 vars1[1]="" && Основной диагноз vars1[2]="" && Осложнения vars1[3]="" && Сопутствующие заболевания IF _END1=3 vars1[4]="" && Основной диагноз vars1[5]="" && Осложнения vars1[6]="" && Сопутствующие заболевания ENDIF _SHIFR=SPACE(4) && SHIFR _KOD1=0 && KOD1 _KOD2=0 && KOD2 ELSE PRIVATE txts,string2,string3,string4,string5,string6,string7 txts=SPACE(100) STORE "" TO string2,string3,string4,string5,string6,string7 DO WHILE NUM_IB=_NUM_IB _KOD1=KOD1 _KOD2=KOD2 _SHIFR=SHIFR IF _SHIFR="0000" txts="Здоров " ELSE IF _KOD1="1".OR._KOD1="2" .AND._KOD2#"2" mkb(1,1,@_SHIFR,@txts) ENDIF ENDIF txts=SUBSTR(_SHIFR,1,3)+"."+SUBSTR(_SHIFR,4,1)+" "+"<"+TRIM(txts)+">" IF _KOD2#"2" IF _KOD1="1" context(@string2,"",txts,length,.F.) context(@str ing2,"",ALLTRIM(COMM1),length,.F.) vars1[1]=string2 ELSEIF _KOD1="2" context(@string3,"",txts,length,.F.) vars1[2]=string3 ELSEIF _KOD1="3" context(@string4,"",ALLTRIM(COMM1),length,.F.) vars1[3]=str ing4 ENDIF ELSEIF _KOD2="2".AND._END1=3 IF _KOD1="1" context(@string5,"",txts,length,.F.) context(@string5,"",ALLTRIM(COMM1),length,.F.) vars1[4]=string5 ELSEIF _KOD1="2" context(@string6,"",ALLTRIM(COMM1),length,.F.) vars1[5]=string6 ELSEIF _KOD1="3" context(@string7,"",ALLTRIM(COMM1),length,.F.) vars1[6]=string7 ENDIF ENDIF SKIP 1 ENDDO RELEASE txts,string2,string3,string4,string5,string6,string7 SELECT BUFF APPEND FROM DIA66 FOR NUM_IB=_NUM_IB ENDIF PRIVATE string11,j string11="" New_Str=.T. context(@string11,SPACE(10)+"Клинический диагноз "," ",length,.T.) FOR j =1 TO s IF rez1.AND.!EMPTY(vars1[j]) row1[j]=context(@string11,promp1[j],TRIM(vars1[j])+".",length,New_Str) ELSE row1[j]=context(@string11,promp1[j],vars1[j],length,New_Str) ENDIF IF j=3.AND._END1=3 context(@string11," "," " ,length,.T.) context(@string11,SPACE(10)+"Паталого-анатомический диагноз "," ",length,.T.) ENDIF NEXT SET CURSOR ON SELECT (sl) RETURN (string11) ********************************************************************* * Функция в вода даты * ********************************************************************* FUNCTION d_input PARAMETERS dat PRIVATE screen SAVE SCREEN TO screen SET CURSOR ON @ 10,25 CLEAR TO 15,55 @ 10,25 TO 15,55 saycent(10,30,50,"ВВЕДИТЕ В ФОРМАТЕ ") @ 12,36 SAY "дд.мм.гг " @ 14,36 GET dat PICTURE "@D" READ SET CURSOR OFF RESTORE SCREEN FROM screen RETURN dat ********************************************************************* * Функция ввода массы пациента * ********************************************************************* FUNCTION m_input PRIVATE screen SAVE SCREEN TO screen SET CURSOR ON @ 10,25 CLEAR TO 15,55 @ 10,25 TO 15,55 saycent(10,30,50,"ВВЕДИТЕ В ФОРМАТЕ ") @ 12,38 SAY "кг /гр ." @ 14,38 GET _MASSA PICTURE "@P 99/999" READ SET CURSOR OFF RESTORE SCREEN FROM screen RETURN _MASSA ********************************************************************* * Функция проверки времени * *************** ****************************************************** FUNCTION check_T PARAMETERS timeS PRIVATE L,hour,mins L=.F. hour=SUBSTR(timeS,1,2) mins=SUBSTR(timeS,4,5) IF VAL(hour)<24.AND.VAL(mins)<60 L=.T. ENDIF RETURN (L) ******************************** ************************************* * Определение количества дней , проведеннх в стационаре * ********************************************************************* PROCEDURE ch_day PRIVATE string2 string2="" vars[choice]=vars[choice]+"." context(@string2,promp[choice],vars[choice],length,New_Str) stuff1(@string,length,string2,choice,row,len(promp)) choice=21 vars[choice]=DTOC(_DATE_END) IF _ALL_DAY>=0.AND.EMPTY(_DATE_IN)=.F. vars[choice]=DTOC(_DATE_END)+SPA CE(5)+"Проведено дней в стационаре :"+; STR(_ALL_DAY) ENDIF RETURN ********************************************************************* * Процедура работы с диагнозами * ****************** *************************************************** FUNCTION diagn PRIVATE txtf,sel,w_do PRIVATE F1,screen,color PRIVATE str PRIVATE s PRIVATE q PRIVATE string11 q=0 str="" txtf=SPACE(100) _SHIFR=SPACE(4) sel=SELECT() F1=0 string11=vars[25] s=IF(_END1=3,6,3) IF LEN(promp1)#s @ 11,18 CLEAR TO 13,62 @ 11,18 TO 13,62 saycent(12,20,60,"ФОРМИРУЕТСЯ МЕНЮ ДИАГНОЗОВ ") DECLARE promp1[s],vars1[s],row1[s],col1[s] && массив промптеров дополн . меню promp1[1]="Основное заболевание :" prom p1[2]="Осложнения :" promp1[3]="Сопутствующие заболевания :" IF s=6 promp1[4]="Основное заболевание :" promp1[5]="Осложнения :" promp1[6]="Сопутствующие заболевания :" ENDIF AFILL(vars1,' ') AFILL(col1,1) ************ ************************************************** string11=initial1("BUFF") && Функция формирования выводимого текста ************************************************************** ENDIF wt1=3 wb1=IF(s=3,12,20) wl1=2 wr1=77 length=wr1-wl1+1 && Длина строки текста , выводимого на экран beg_line1=1 PRIVATE New_Str1 && Признак новой строки для Context New_Str1=.F. && Без выделения промптеров cur_promp1=1 DO WHILE !gotomain q=hypertxt(wt1,wl1,wb1,wr1,string11,promp1,row1,col1,; @beg_line1,@cur_promp1,color9," ДИАГНОЗ ПАЦИЕНТА ") cur_promp1=cur_promp1%len(promp1)+1 DO CASE CASE q=0 LOOP CASE q=1.OR.q=2.OR.q=4 w_do=1 SAVE SCREEN TO screen @ 11,25 CLEAR TO 16,55 @ 11,25 TO 16,55 DOUBLE @ 11,30 PROMPT "ДОБАВИТЬ " @ 11,44 PROMPT "УДАЛИТЬ " IF EMPTY(vars1[q]).OR.BUFF->KOD1="2".AND.BUFF->KOD2="2" vars1[q]="" KEYBOARD CHR( 13) ENDIF MENU TO w_do str=vars1[q] IF w_do=1 @ 13,30 SAY "ВВЕДИТЕ КОД " GET _SHIFR PICTURE "@R 999.9" READ IF LASTKEY()=27 vars1[q]=str RESTORE SCREEN FROM screen LOOP ENDIF F1=mkb(1,1,@_SHIFR,@txtf) IF F1#-1 txtf=SUBSTR(_SHIFR,1,3)+"."+SUBSTR(_SHIFR,4,1)+" "+; "<"+TRIM(txtf)+">"+"." SELECT BUFF APPEND BLANK REPLACE NUM_IB WITH _NUM_IB REPLACE SHIFR WITH _SHIFR REPLACE KOD2 WITH IF(q=4,"2","1") REPLACE KOD1 WITH IF(q=1.OR.q=4,"1","2") REPLACE COMM1 WITH MEMPRO(COMM1,10,5,18,75,; " ВВЕДИТЕ НЕОБХОДИМЫЕ ЗАМЕЧАНИЯ ","ILLS",'ILLS') context(@str,"",txtf+".",length,.F.) context(@s tr,"Замечания :",ALLTRIM(COMM1),length,.T.) ENDIF ELSEIF w_do=2 PRIVATE i,j,k,EN,ET,NALL,MALL,NDEL NALL=INT(LEN(str)/length) MALL=NALL FOR i=1 TO NALL ET=A LLTRIM(SUBSTR(str,length*(i-1)+1,length)) EN=ASC(ET) IF EN>57 MALL=MALL-1 ENDIF NEXT DECLARE _0B[MALL],_0S[MALL] k=1 FOR j=1 TO NALL ET=ALLTRIM(SUBSTR(str,length*(j-1)+1,length)) EN=ASC(ET) IF EN<58 _0B[k]=SUBSTR(str,length*(j-1)+1,length) _0S[k]=LEFT(ALLTRIM(_ 0B[k]),5) k=k+1 ELSE _0B[k-1]=_0B[k-1]+SUBSTR(str,length*(j-1)+1,length) ENDIF NEXT NDEL=ACHOICE(13,35,15,45,_0S) S ELECT BUFF IF q=1.OR.q=4 SEEK _NUM_IB+IF(q=1,"1","2")+"1" ELSEIF q=2 SEEK _NUM_IB+"1"+"2" ENDIF SKIP NDEL-1 DELETE PACK s tr="" FOR j=1 TO MALL IF j#NDEL str=str+_0B[j] ENDIF NEXT RELEASE j,NALL,NDEL RELEASE _0B,_0S ENDIF vars1[q]=str RESTORE SCREEN FROM screen CASE q=3.OR.q=5.OR.q=6 PRIVATE str356 STORE "" TO str356 SELECT BUFF private s s=_NUM_IB+IF(q=3,"1","2")+IF(q=5,"2","3") SEEK s && _NUM_IB+IF(q=3,"1","2")+IF(q=5,"2","3") IF !FOUND() APPEND BLANK REPLACE NUM_IB WITH _NUM_IB REPLACE KOD1 WITH IF(q=5,"2","3") REPLACE KOD2 WITH IF(q=3,"1","2") ENDIF SET CURSOR ON REPLACE COMM1 WITH ; MEMPRO(COMM1,10,5,15,75,; IF(q=5," ВВЕДИТЕ НАЗВАНИЯ ОСЛОЖНЕНИЙ ",; " ВВЕДИТЕ НАЗВАНИЯ СОПУТСТВУЮЩИХ ЗАБОЛЕВАНИЙ "),; "ILLS",'ILLS') context(@str356,"",ALLTRIM(COMM1),length,.F.) vars1[q]=str356 RELEASE str356 ENDCASE new_str1=.T. string111="" context(@string111,promp1[q],vars1[q],length,New_Str1) IF q=3.AND._END1=3 context(@string111," "," ",length,.T.) context(@string111,SPACE(10)+"Паталого-анатомический диагноз "," ",length,.T.) ENDIF stuff1(@string11,length,string111,q,row1,len(pro mp1)) ENDDO REINDEX gotomain=.F. SELECT (sel) RETURN (string11) ********************************************************************* * Процедура работы с операциями * ***************************************** **************************** PROCEDURE op PRIVATE txto,sel,w_do PRIVATE F2,screen,color PRIVATE stro STORE "" TO stro txto=SPACE(80) _SHIFR_ILL="0000" sel=SELECT() SAVE SCREEN TO screen @ 11,25 CLEAR TO 16,55 @ 11,25 TO 16,55 DOUBLE @ 11,30 PROMPT "ДОБАВИТЬ " @ 11,44 PROMPT "УДАЛИТЬ " IF EMPTY(vars[choice]) KEYBOARD CHR(13) ENDIF MENU TO w_do stro=vars[choice] IF w_do=1 @ 13,30 SAY "ВВЕДИТЕ КОД " GET _SHIFR_ILL PICTURE "@R 99.99" READ RESTORE SCREEN FROM screen IF LASTKEY()=27 RETURN ENDIF F2=catalog(@_SHIFR_ILL,@txto) IF F2#-1 SELECT BUFF2 APPEND BLANK REPLACE NUM_IB WITH _NUM_IB REPLACE SHIFR WITH _SHIFR_ILL RE PLACE DATA WITH d_input(DATA) SET CURSOR ON REPLACE COMM WITH ; MEMPRO(COMM,10,5,15,75," ВВЕДИТЕ НАЗВАНИЕ ОПЕРАЦИИ ","OPER",'OPER') context(@stro,"",ALLTRIM(txto)+".",length,.F.) context(@stro," Дата проведен ия : ",DTOC(DATA)+".",length,.F.) context(@stro," Название операции : ",ALLTRIM(COMM)+".",length,.F.) ENDIF ELSEIF w_do=2 PRIVATE i,j,k,EN,ET,NALL,MALL,NDEL NALL=INT(LEN(stro)/length) MALL=NALL FOR i=1 TO NALL ET=ALLTRIM(SUBSTR(stro,length*(i-1)+1,length)) EN=ASC(ET) IF EN<>60 MALL=MALL-1 ENDIF NEXT DECLARE _0B[MALL],_0S[MALL] k=1 FOR j=1 TO NALL ET=ALLTRIM(SUBSTR(stro,l ength*(j-1)+1,length)) EN=ASC(ET) IF EN=60 _0B[k]=SUBSTR(stro,length*(j-1)+1,length) _0S[k]=LEFT(ALLTRIM(_0B[k]),5) k=k+1 ELSE _0B[k-1]=_0B[k-1]+SUBSTR(stro,length*(j-1)+1,length) ENDIF NEXT NDEL=ACHOICE(13,35,15,45,_0S) IF LASTKEY()=27 RETURN ENDIF SELECT BUFF2 GO NDEL DELETE PACK stro="" FOR j=1 TO MALL IF j#NDEL stro=stro+_0B[j] ENDIF NEXT RELEASE j,NALL,NDEL RELEASE _0B,_0S ENDIF vars[choice]=stro SELECT (sel) RETURN ********************************************************************* * ПРОЦЕДУРА ЗАПОЛНЕНИЯ БД karta.dbf * ********************************************************************* PROCEDURE new_save PRIVATE sel,v sel=SELECT() SET CURSOR OFF SELECT karta @ 11,18 CLEAR TO 13,62 @ 10,17 TO 14,63 saycent( 12,20,60,"ПОДОЖДИТЕ НЕМНОГО - ИДЕТ ЗАПИСЬ В БД ") SET COLOR TO W/N v=replicate(chr(32),30) SET COLOR TO @ 13,25 SAY v SEEK _NUM_IB IF FOUND()=.F. APPEND BLANK REPLACE NUM_IB WITH _NUM_IB rec_num = RECNO() ENDIF REPLACE FAM WITH ALLTRIM(_FAM) REPLACE F_S_NAME WITH ALLTRIM(_F_S_NAME) REPLACE DATE_B WITH _DATE_B REPLACE HOUR_B WITH _HOUR_B REPLACE MINS_B WITH _MINS_B REPLACE POL WITH _POL REPLACE OLD WITH _OLD REPLACE OLD_D WI TH _OLD_D REPLACE MASSA WITH _MASSA REPLACE PLACE_LIV WITH _PLACE_LIV REPLACE RAION WITH _RAION REPLACE CITY_VILL WITH _CITY_VILL REPLACE DIRECT1 WITH _DIRECT1 REPLACE DIRECT2 WITH _DIRECT2 REPLACE STATE WITH _STATE REPLACE PLACE WITH _PLACE *REPLACE WHY WITH _WHY REPLACE DEPARTMENT WITH _DEPARTMENT REPLACE KOIKA WITH _KOIKA REPLACE PASS WITH _PASS REPLACE TIME WITH _TIME REPLACE DATE_IN WITH _DATE_IN REPLACE HOUR_IN WITH _HOUR_IN REPLACE MINS_IN WITH _MINS_IN REPLACE END1 WITH _END1 REPLACE END2 WITH _END2 REPLACE END3 WITH _END3 REPLACE DATE_END WITH _DATE_END REPLACE HOUR_END WITH _HOUR_END REPLACE MINS_END WITH _MINS_END REPLACE ALL_DAY WITH _ALL_DA Y REPLACE SHIFR WITH _DIA_DIRECT REPLACE NUM_COME WITH _NUM_COME REPLACE RW_DATE WITH _RW_DATE REPLACE RW_REZ WITH _RW_REZ REPLACE FAM_DOCTOR WITH _FAM_DOCTOR *REINDEX COMMIT v=replicate(chr(177),10) @ 13,25 SAY v SELECT DIA66 DELETE FOR NUM_ IB=_NUM_IB PACK *COMMIT IF _END1=3 APPEND FROM BUFF FOR NUM_IB=_NUM_IB ELSE APPEND FROM BUFF FOR NUM_IB=_NUM_IB.AND.KOD2#"2" ENDIF *REINDEX COMMIT SELECT BUFF ZAP *COMMIT *REINDEX COMMIT v=replicate(chr(177),20) @ 13,25 SAY v SELECT OP66 DELETE FOR NUM_IB=_NUM_IB PACK *COMMIT APPEND FROM BUFF2 FOR NUM_IB=_NUM_IB v=replicate(chr(177),30) *REINDEX COMMIT @ 13,25 SAY v SELECT BUFF2 ZAP *COMMIT *REINDEX COMMIT SELECT (sel) RETURN *************************************************************** ****** * Процедура удаления записей * ********************************************************************* PROCEDURE del PRIVATE flag_del && число записей,помеченных для удаления PRIVATE nr,tr,del_str,temp,_01,_02,sel @ 5,1,22,78 BOX dn_s+fon1 sel=SELECT() flag_del=0 c_d=2 SELECT KARTA *RECALL ALL *GO TOP nr=RECCOUNT() DECLARE stor_ib[nr] DO WHILE !gotomain DO first @ 7,5,16,74 BOX singl+fon2 SET COLOR TO "r+*/b" sa ycent(5,0,79,if(DELETED(),"Запись помечена на удаление ",SPACE(27))) SET COLOR TO (color1) @ 10,10 PROMPT IF(!BOF(),"Вернуться к предыдущей записи ","******") @ 12,10 PROMPT IF(DELETED(),"Отменить удаление текущей записи ",; "Пометить текущую запись на удаление ") @ 14,10 PROMPT IF(!EOF(),"Перейти к следующей записи ","******") @ 16,35 PROMPT "Выполнить " MESSAGE "Удалить помеченные записи и "+; "вернуться в главное меню " MENU TO c_d DO CASE CASE c_d=0 LOOP CASE c_d=1 IF(!BOF()) SKIP -1 ENDIF CASE c_d=2 IF(!EOF()) IF !DELETED() DELETE flag_del=flag_del+1 stor_ib[flag_del]=NUM_IB ELSE RECALL tr=ASCAN(stor_ib,NUM_IB) ADEL(stor_ib,tr) flag_del=flag_del-1 ENDIF ENDIF CASE c_d=3 IF(!EOF()) SKIP ENDIF CASE c_d=4 EXIT ENDCASE ENDDO IF flag_del>0 y=yesno(10,"Удалить помеченные "+alltrim(str(flag_del))+" записей ?") IF y=1 temp="NUM_IB='" del_str=temp+stor_ib[1]+"'" temp=".OR."+temp FOR tr=2 TO flag_del del_str=del_str+temp+stor_ib[tr]+"'" NEXT DELETER(del_str,"DIA66") && Удаление из DIA66.DBF DELETER(del_str,"OP66") && Удаление из OP66.DBF *************************************** pack && Удаление из KARTA66.DBF ELSE RECALL ALL GOTO TOP ENDIF ENDIF SELECT (sel) RETURN ************************ ********************************************* * Процедура формирования отчетных документов * ********************************************************************* FUNCTION rez PRIVATE _OTCH,_OTCH_N,scr1 _OTCH=00 _OTCH_N="" SAVE SCREE N TO scr1 PRIVATE sel sel=SELECT() PRIVATE _DATE_FROM _DATE_FROM=_today PRIVATE _DATE_TILL _DATE_TILL=_today PRIVATE dep,dep_name PRIVATE numb1 PRIVATE txt PRIVATE pole PRIVATE count count=1 PRIVATE _c _c=1 PRIVATE _p _p=1 PRIVATE OT1,OT2 PRIVATE coun,c1,v1,v2 PRIVATE f f=1 DO WHILE .T. SELECT 0 USE BUFF8.DBF INDEX BUFF8 ALIAS BUFF8 ZAP numb1=0 txt=SPACE(100) pole=1 STORE "" TO OT1,OT2 dep=0 dep_name="" codif1("PERD",@_p) IF _p=0 SELECT BUFF8 USE EXIT ELSEIF _p=2 _OTCH_N=codif1("OTCH",@_OTCH) IF _OTCH=0 SELECT BUFF8 USE EXIT ENDIF ENDIF dep_name=codif1("DEPS",@dep) IF _p=1.AND.dep=0 SELECT BUFF8 USE LOOP ENDIF dep_name=IF(dep=0,"Весь стационар ",dep_name) IF period()=0 && Ввод пользователем периода отчета SET CURSOR OFF IF _p=1 ********************* МЕСЯЧНЫЕ ОТЧЕТЫ ********************** _OTCH_N="Месячный отчет " SELECT DIA66 SET RELATION TO SHIFR INTO BUFF8 SELECT karta SET RELATION TO NUM_IB INTO DIA66 GO TOP PRIVATE OT1D1,OT2D1,OT1D2,OT2D2 IF dep=2.OR.dep=11 OT1="OTD5.FRM" OT1D1="OTD2.FRM" OT2D1="OTD51.TXT" ELSE OT1="OTD.FRM" OT1D1="OTD1.FRM" OT2D1="OTD_1.TXT" OT1D2="OTD2.FRM" OT2D2="OTD_2.TXT" ENDIF DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF dep=KARTA->DEPARTMENT.AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; KARTA->END1#3.AND.DIA66->KOD1="1" _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR mkb( 1,1,@_SHIFR,@txt) REPLACE NAME WITH txt ENDIF REPLACE COUNT1 WITH COUNT1+KARTA->ALL_DAY && ПРОВЕДЕНО ДНЕЙ REPLACE COUNT2 WITH COUNT2+1 && ВСЕГО БОЛЬНЫХ pole=FIELD(8+KARTA->RAION) REPLACE &p ole WITH &pole+1 && из Москвы /Моск.обл ./Иногородн ./Село pole=FIELD(14+KARTA->NUM_COME) REPLACE &pole WITH &pole+1 && Первично /Повторно pole=FIELD(16+KARTA->DIRECT1) REPLACE &pole WITH &pole+1 && Направляющие орган изации *-------------------------------------------------------------------- IF dep=2.OR.dep=11 IF KARTA->OLD<7 REPLACE C3 WITH C3+1 && Всего до 1 года REPLACE C4 WITH C4+KARTA->ALL_DAY && К /Д IF KARTA->CITY_VILL=2 REPLACE C5 WITH C5+1 && В том числе из села REPLACE C6 WITH C6+KARTA->ALL_DAY && К /Д ENDIF ELSE IF KARTA->CITY_VILL=2 REPLACE C9 WITH C9+ 1 && Из села старше 1 года ENDIF ENDIF IF KARTA->OLD=1 pole=FIELD(43) ELSEIF KARTA->OLD=2 ad=piece(KARTA->HOUR_B,KARTA->MINS_B,KARTA->HOUR_END,KARTA->MINS_END) ad=KARTA->DATE_END-KARTA->DATE_B+IF(ad=1,1,IF(ad>=0,0,-1)) pole=FIELD(42+IF(ad<=14,2,IF(ad>14.AND.ad<=21,3,4))) ELSE pole=FIELD(44+KARTA->OLD) ENDIF *--------------------------------------------------------- ----------- ELSE IF KARTA->OLD<7 REPLACE C3 WITH C3+1 && Всего до 1 года REPLACE C4 WITH C4+KARTA->ALL_DAY && К /Д IF KARTA->CITY_VILL=2 REPLACE C5 WITH C5+1 && В том числе из села REPLACE C6 WITH C6+KARTA->ALL_DAY && К /Д ENDIF ELSEIF KARTA->OLD<11 REPLACE C7 WITH C7+1 && Всего до 14 лет REPLACE C8 WITH C8+KARTA->ALL_DAY && К /Д IF KARTA->CITY_VIL L=2 REPLACE C9 WITH C9+1 && В том числе из села REPLACE C0 WITH C0+KARTA->ALL_DAY && К /Д ENDIF ELSE REPLACE D1 WITH D1+1 && Всего 15 лет и старше REPLACE D2 WITH D 2+KARTA->ALL_DAY && К /Д IF KARTA->CITY_VILL=2 REPLACE D3 WITH D3+1 && В том числе из села REPLACE D4 WITH D4+KARTA->ALL_DAY && К /Д ENDIF ENDIF IF KART A->OLD<=3 pole=FIELD(43) ELSE pole=FIELD(40+KARTA->OLD) ENDIF ENDIF *-------------------------------------------------------------------- REPLACE &pole WITH &pole+1 && Возраст SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO SELECT DIA66 SET RELATION TO grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ SELECT BUFF8 OT2="OTD"+ALLTRIM(STR(dep))+".TXT" @ 13,25 SAY " СОЗДАЕТСЯ ОТЧЕТ : "+OT2+" " IF dep#2.AND.dep#11 REPORT FORM &OT1D2 TO FILE &OT2D2 PLAIN ENDIF REPORT FORM &OT1D1 TO FILE &OT2D1 PLAIN REPO RT FORM &OT1 TO FILE &OT2 PLAIN REPORT FORM OTCH.FRM TO FILE OTCH.TXT PLAIN USE corr_ttl("OTCH.TXT",dep_name,DTOC(_DATE_FROM),DTOC(_DATE_TILL)) link2("OTCH.TXT",OT2) RENAME OTCH.TXT TO &OT2 link2( OT2,OT2D1) IF dep#2.AND.dep#11 link2(OT2,OT2D2) ENDIF ELSEIF _p=2 ********************* КВАРТАЛЬНЫЕ ОТЧЕТЫ ********************** OT1="OTCH"+ALLTRIM(STR(_OTCH))+".FRM" OT2="OTCH"+ALLTRIM(STR(_OTCH))+".TXT" IF f_FRM() DO CASE *------------------------------------------------- CASE _OTCH=1 *------------------------------------------------- SELECT DIA66 SET RELATION TO SHIFR INTO BUFF8 SELECT karta SET RELATION TO NUM_IB INTO DIA66 GO TOP DO show_s t DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; DIA66->KOD1="1" state() && Поиск паталого-анатомического диагноза (если он ест ь ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR ENDIF IF KARTA->OLD>10 && СТАРШЕ 14 лет IF KARTA->END1=1.OR.KARTA->END1=2 REPLACE COUNT1 WITH COUNT1+1 && ВЫПИСАНО REPLACE A1 WITH A1+KARTA->ALL_DAY && ПРОВЕДЕНО ИМИ ДНЕЙ ELSE && KARTA->END1=3 REPLACE A2 WITH A2+1 && УМЕРЛО ENDIF ELSE && KARTA->OLD<=10 && ДО 14 лет IF KARTA->END1=1.OR.KARTA->END1=2 REPLACE COUNT2 WITH COUNT2+1 && ВЫПИСАНО REPLACE A3 WITH A3+KARTA->ALL_DAY && ПРОВЕДЕНО ИМИ ДНЕЙ IF KARTA->OLD<7 REPLACE A4 WITH A4+1 && ДЕТИ ДО 1 года ENDIF ELSE && KARTA->END1=3 REPLACE A5 WITH A5+1 && УМЕРЛО IF KARTA->OLD<7 REPLACE A6 WITH A6+1 && ДЕТИ ДО 1 года ENDIF ENDIF ENDIF SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ IF INKEY(0.01)=27 IF yesno(14," Прервать обработку ? ")=1 SELECT (sel) RETURN 0 ENDIF ENDIF ENDDO SET RELATION TO SELECT DIA66 SET RELATION TO SELECT BUFF8 PRIVATE _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6 TO ; _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 APPEND BLANK REPLACE NUMBER WITH "|",NAMECL WITH "Всего :",; SHIFRL WITH "0000",SHIFRR WITH "999 ",; COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,A1 WITH _A1,; A2 WITH _A2,A3 WITH _A3,A4 WITH _A4,A5 WITH _A5,A6 WITH _A6 grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ grad1() && РАЗБИЕНИЕ КЛАССОВ НА ГРУППЫ *------------------------------------------------- CASE _OTCH=2.OR._OTCH=5 *------------------------------------------------- SELECT DIA66 SET RELATIO N TO SHIFR INTO BUFF8 SELECT KARTA SET RELATION TO NUM_IB INTO DIA66 GO TOP DO show_st DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TIL L.AND.; (KARTA->DATE_IN-KARTA->DATE_B+piece(KARTA->HOUR_B,KARTA->MINS_B,; KARTA->HOUR_IN,KARTA->MINS_IN))<7.AND.DIA66->KOD1="1" state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR ENDIF IF LEFT(KARTA->MASSA,2)="00".OR.LEFT(KARTA->MASSA,2)=" ".AND.; VAL(RIGHT(KARTA->MASSA,3))>500 REPLACE A1 WITH A1+1 IF KARTA->END1=3 REPLACE A2 WITH A2+1 IF (KARTA->DATE_END-KARTA->DATE_B+; piece(KARTA->HOUR_B,KARTA->MINS_B,; KARTA->HOUR_END,KARTA->MINS_END))<7 REPLACE A3 WITH A3+1 ENDIF ENDIF ELSE REPLACE A4 WITH A4+1 IF KARTA->END1=3 REPLACE A5 WITH A5+1 IF (KARTA->DATE_END-KARTA->DATE_B+; piece(KA RTA->HOUR_B,KARTA->MINS_B,; KARTA->HOUR_END,KARTA->MINS_END))<7 REPLACE A6 WITH A6+1 ENDIF ENDIF ENDIF SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO SELECT DIA66 SET RELATION TO SELECT BUFF8 PRIVATE _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6 TO ; _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 APPEND BLANK REPLACE NUMBER WITH "|",NAMECL WITH "Всего детей :",; COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,A1 WITH _A1,; A 2 WITH _A2,A3 WITH _A3,A4 WITH _A4,A5 WITH _A5,A6 WITH _A6 grad1() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА ГРУППЫ SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6 TO ; _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 FOR NUMBER="-" GO TOP _COUNT1=COUNT1- _COUNT1 _COUNT2=COUNT2-_COUNT2 _A1=A1-_A1 _A2=A2-_A2 _A3=A3-_A3 _A4=A4-_A4 _A5=A5-_A5 _A6=A6-_A6 APPEND BLANK REPLACE NUMBER WITH "-",SHIFR WITH "774 "; NAMECL WITH "Прочие болезни плода и новорожденного ",; COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,A1 WITH _A1,; A2 WITH _A2,A3 WITH _A3,A4 WITH _A4,A5 WITH _A5,A6 WITH _A6 *------------------------------------------------- CASE _OTCH=3 *------------------------------------------------- SELECT OP66 SET RELATION TO NUM_IB INTO KARTA, TO SHIFR INTO BUFF8 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,I F(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL _SHIFR_ILL=OP66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR_ILL catalog(@_S HIFR_ILL,@txt) REPLACE NAME WITH ALLTRIM(txt) ENDIF REPLACE COUNT1 WITH COUNT1+1 IF KARTA->OLD<=10 REPLACE COUNT2 WITH COUNT2+1 ENDIF IF KARTA->END1=3 REPLACE A1 WITH A1+1 ENDIF SELECT OP66 ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO summ() && Суммирование по классам операций *------------------------------------------------- CASE _OTCH=4 *------------------------------------------------- SELECT BUFF8 APPEND BLANK REPLACE NUMBER WITH "1" REPLACE NAME WITH "ВЫПИСАНО " APPEND BLANK REPLACE NUMBER WITH "2" REPLACE NAME WITH "ПЕРЕВЕДЕНО " APPEND BLANK REPLACE NUMBER WITH "3" REPLACE NAME WITH "УМЕРЛО " SELECT KARTA GO TOP PRIVATE OT1D1,OT2D1 DO show_st && ПРОЦЕДУРА ПРЕДСТАВ ЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL SELECT BUFF8 GOTO KARTA->END1 pole=FIELD(8+KARTA ->OLD) REPLACE &pole WITH &pole+1 && ВОЗРАСТ БОЛЬНЫХ pole=FIELD(19+KARTA->RAION) REPLACE &pole WITH &pole+1 && РАЙОН ПРОЖИВАНИЯ REPLACE COUNT1 WITH COUNT1+KARTA->ALL_DAY && ПРОВЕДЕНО ДНЕЙ REPLACE COUNT2 WITH COUNT2+1 && ВСЕГО БОЛЬНЫХ SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO OT1D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".FRM" && OTCH*1.FRM OT2D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".TXT" && OTCH*1.TXT SELECT BUFF8 REPORT FORM &OT1D1 TO FILE &OT2D1 PLAIN *------------------------------------------------- CAS E _OTCH=6.OR._OTCH=8 *------------------------------------------------- SELECT DIA66 SET RELATION to NUM_IB into KARTA, TO SHIFR INTO BUFF8 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; DIA66->KOD1="1" count=state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIF R=DIA66->SHIFR SELECT BUFF8 IF _OTCH=6.AND.KARTA->END1=2 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR ENDIF REPLACE COUNT1 WITH COUNT1+1 ELSEIF _OTCH=8.AND.KARTA->END1=3 pole=FIELD(8+KARTA->POL) IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH txt ENDIF REPLACE &pole WITH &pole+1 ENDI F SELECT DIA66 ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ *------------------------------------------------ CASE _OTCH=7 *------------------------------------------------ SELECT KARTA SET RELATION TO SHIFR INTO BUFF8 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL _SHIFR=KARTA->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH ALLTRIM(txt) ENDIF REPLACE A3 WITH A3+1 && Всего IF KARTA->OLD<=7 && До 1 года REPLACE A2 WITH A2+1 IF KARTA->OLD<=2 && До 28 дней REPLACE A1 WITH A1+1 ENDIF ENDIF pole=FIELD(11+KARTA->WHY) REPLACE &pole WITH &pole+1 && Причины направления pole=FIELD(15+KARTA->DIRECT1) REPLACE &pole WITH &pole+1 && Направляющие организации SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO numb_STR() && НУМЕРАЦИЯ СТРОК *------------------------------------------------ CASE (_OTCH=9.AND.dep#14).OR._OTCH=10.OR._OTCH=12 *------------------------------------------------ SELECT DIA66 SET RELATION to NUM_IB into KARTA, TO SHIFR INTO BUFF8 GO TOP PRIVATE OT1D1,OT2D1,OT1D2,OT2D2 DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; KARTA->END1=3.A ND.DIA66->KOD1="1" IF (_OTCH=9.OR.; _OTCH=10.AND.; (KARTA->DATE_END-KARTA->DATE_B+; piece(KARTA->HOUR_B,KARTA->MINS_B,KARTA->HOUR_END,KARTA->MINS_END)<7).OR.; _OTCH=12.AND.; (KARTA->DATE_END-KARTA->DAT E_IN+; piece(KARTA->HOUR_IN,KARTA->MINS_IN,KARTA->HOUR_END,KARTA->MINS_END)<1)) count=state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND B LANK REPLACE SHIFR WITH _SHIFR mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH txt ENDIF pole=FIELD(6+KARTA->POL) REPLACE &pole WITH &pole+1 && ПОЛ УМЕРШИХ IF _OTCH=9.OR._OTCH=12 R EPLACE B2 WITH B2+KARTA->ALL_DAY && КОЛ-ВО ДНЕЙ , ПРОВЕДЕННОЕ ИМИ IF _OTCH=9.AND.KARTA->OLD_D<7 REPLACE B3 WITH B3+KARTA->ALL_DAY && ---"--- БОЛЬНЫМИ ДО 1 года ENDIF pole=FIELD(8+KARTA->OLD_D) ELSEIF _OTCH=10 PRIVATE ad ad=piece(KARTA->HOUR_B,KARTA->MINS_B,KARTA->HOUR_END,KARTA->MINS_END) pole=FIELD(9+(KARTA->DATE_END-KARTA->DATE_B+; IF(ad=1,1,IF(ad>=0,0,-1)))) ENDIF REPLACE &pole WITH &pole+1 && ВОЗРАСТ УМЕРШИХ pole=FIELD(21+KARTA->DIRECT1) REPLACE &pole WITH &pole+1 && НАПРАВЛЯЮЩЕЕ УЧРЕЖДЕНИЕ pole=FIELD(35+KARTA->RAION) REPLACE &pole WITH &pole+1 && РАЙОН IF _OTCH =9 IF KARTA->ALL_DAY=1 pole=FIELD(44+IF(KARTA->DATE_END-KARTA->DATE_IN+; piece(KARTA->HOUR_IN,KARTA->MINS_IN,; KARTA->HOUR_END,KARTA->MINS_END)<1,0,1)) ELSE pole=FIELD(44 +IF(KARTA->ALL_DAY<4,KARTA->ALL_DAY,4)) ENDIF ELSEIF _OTCH=10 IF KARTA->ALL_DAY=1 pole=FIELD(44+IF(KARTA->DATE_END-KARTA->DATE_IN+; piece(KARTA->HOUR_IN,KARTA->MINS_IN,; KARTA->HOUR_END,KART A->MINS_END)<1,0,1)) ELSE pole=FIELD(44+KARTA->ALL_DAY) ENDIF ELSE &&_OTCH=12 PRIVATE t,d STORE 0 TO t,d t=KARTA->DATE_END-KARTA->DATE_IN+; piece(KARTA->HOUR_IN,KARTA->MINS_IN,KARTA->HOUR_END,KARTA->MINS_END) d=IF(t<(0.5/24),0,IF(t<(1/24),1,IF(t<3/24,2,IF(t<10/24,3,4)))) pole=FIELD(44+d) RELEASE t,d ENDIF REPLACE &pole WITH &pole+1 && ПРОВЕДЕ НО ДНЕЙ SELECT DIA66 ENDIF ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ OT1D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".FRM" && OTCH*1.FRM OT2D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".TXT" && OTCH*1.TXT SELECT BUFF8 REPORT FORM &OT1D1 TO FILE &OT2D1 PLAIN IF _OTCH=9.OR._OTCH=10 OT1D2="O TCH"+ALLTRIM(STR(_OTCH))+"2"+".FRM" && OTCH*2.FRM OT2D2="OTCH"+ALLTRIM(STR(_OTCH))+"2"+".TXT" && OTCH*2.TXT REPORT FORM &OT1D2 TO FILE &OT2D2 PLAIN link2(OT2D1,OT2D2) && СЛИЯНИЕ ДВУХ ФАЙЛОВ ENDIF *------------------------------------------------------ CASE _OTCH=9.AND.dep=14 && Дла Неонатального центра *------------------------------------------------------ SELECT DIA66 SET RELATION TO SHIFR INTO BUFF8 SELECT karta SET R ELATION TO NUM_IB INTO DIA66 GO TOP OT1="NEONAT.FRM" OT2="NEONAT.TXT" DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF dep=KARTA->DEPARTMENT.AND.; KARTA->DATE_END>=_DATE_FROM.AND.K ARTA->DATE_END<=_DATE_TILL.AND.; KARTA->END1=3.AND.DIA66->KOD1="1" count=state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK R EPLACE SHIFR WITH _SHIFR mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH txt ENDIF pole=FIELD(6+KARTA->POL) REPLACE &pole WITH &pole+1 && Пол pole=FIELD(16+KARTA->DIRECT1) REPLACE &pole WITH &pole+1 && Направляющие организации REPLACE C3 WITH C3+1 && Всего умерло REPLACE C4 WITH C4+KARTA->ALL_DAY && К /Д IF KARTA->OLD=1 pole=FIELD(43) ELSEIF KARTA->OLD=2 ad=piece(KARTA->HOUR_B,KARTA->MINS_B,KARTA->HOUR_END,KARTA->MINS_END) ad=KARTA->DATE_END-KARTA->DATE_B+IF(ad=1,1,IF(ad>=0,0,-1)) pole=FIELD(42+IF(ad<=14,2,IF(ad>14.AND.ad<=21,3,4))) ELSE pole=FIELD(44+KART A->OLD) ENDIF REPLACE &pole WITH &pole+1 && Возраст SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO SELECT DIA66 S ET RELATION TO grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ *------------------------------------------------ CASE _OTCH=11 *------------------------------------------------ codif1("FULL",@f) IF f=0 LOOP ENDIF SELECT DIA66 SET CURSOR OFF SET RELATION to SHIFR into BUFF8 SELECT OP66 SET RELATION to NUM_IB into KARTA, TO NUM_IB INTO DIA66 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; KARTA->END1=3.AND.DIA66->KOD1="1" state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR _NUM_IB=OP66->NUM_IB SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH txt ENDIF RE PLACE COUNT1 WITH COUNT1+1 && ВСЕГО ОПЕРИРОВАННЫХ БОЛЬНЫХ SELECT 0 USE CATO.DBF INDEX CATO ALIAS CATO DO WHILE .T. SEEK OP66->SHIFR SELECT BUFF8 pole=FIELD(8+CA TO->NUMBER) REPLACE &pole WITH &pole+1 REPLACE COUNT2 WITH COUNT2+1 && ВСЕГО ОПЕРАЦИЙ SKIP 1 ALIAS OP66 SELECT CATO IF OP66->NUM_IB#_NUM_IB SKIP -1 ALIAS OP66 EXIT ENDIF show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO USE ENDIF SELECT OP66 SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO SELECT DIA66 SET RELATION TO grad() && РАЗБИЕНИЕ БОЛЕЗНЕЙ НА КЛАССЫ IF f=1 OT1="OTCH"+ALLTRIM(STR(_OTCH))+"L"+".FRM" ELSE OT1D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".FRM" && OTCH*1.FRM OT2D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".TXT" && OTCH*1.TXT SELECT BUFF8 REPORT FORM &OT1D1 TO FILE &OT2D1 PLAIN OT1D2="OTCH"+ALLTRIM(STR(_OTCH))+"2"+".FRM" && OTCH*2.FRM OT2D2="OTCH"+ALLTRIM(STR(_OTCH))+"2"+".TXT" && OTCH *2.TXT REPORT FORM &OT1D2 TO FILE &OT2D2 PLAIN link2(OT2D1,OT2D2) && СЛИЯНИЕ ДВУХ ФАЙЛОВ ENDIF *------------------------------------------------ CASE _OTCH=13 *------------------------------------------------ SELECT DIA66 SET RELATION to NUM_IB into KARTA, TO SHIFR INTO BUFF8 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; DIA66->SHIFR>"0000".AND.DIA66->SHIFR<="1399".AND.DIA66->KOD1="1" count=state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK REPLACE SHIFR WITH _SHIFR ENDIF IF KARTA->END1=1.OR.KARTA->END1=2 REPLACE COUNT1 WITH COUNT1+1 && ОБЩЕЕ КОЛИЧЕСТВО ВЫБЫВШИХ REPLACE A1 WITH A1+KA RTA->ALL_DAY && ПРОВЕДЕНО ИМИ ДНЕЙ IF KARTA->OLD<7 REPLACE COUNT2 WITH COUNT2+1 && КОЛИЧЕСТВО ВЫБЫВШИХ ДО 1 ENDIF ELSEIF KARTA->END1=3 REPLACE A2 WITH A2+1 && ОБЩЕЕ КОЛИЧЕСТВО УМЕРШИХ REPLACE A3 WITH A3+KARTA->ALL_DAY && ПРОВЕДЕНО ИМИ ДНЕЙ IF KARTA->OLD<7 REPLACE A4 WITH A4+1 && КОЛИЧЕСТВО УМЕРШИХ ДО 1 ENDIF ENDIF SELECT DIA66 ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO numb_STR() && НУМЕРАЦИЯ СТРОК *------------------------------------------------ CASE _OTCH=14 *---------------------------- -------------------- SELECT DIA66 SET RELATION to NUM_IB into KARTA, TO SHIFR INTO BUFF8 GO TOP DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPART MENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL.AND.; DIA66->SHIFR>"0000".AND.DIA66->SHIFR<="1399".AND.DIA66->KOD1="1" count=state() && Поиск паталого-анатомического диагноза (если он есть ) _SHIFR=DIA66->SHIFR SELECT BUFF8 IF EOF() APPEND BLANK mkb(1,1,@_SHIFR,@txt) REPLACE NAME WITH txt REPLACE SHIFR WITH _SHIFR ENDIF pole=FIELD(8+KARTA->DEPARTMENT) REPLACE &pole WITH &pole+1 SELECT DIA66 ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO numb_STR() && НУМЕРАЦИЯ СТРОК *------- ---------------------------------------- CASE _OTCH=15 *----------------------------------------------- SELECT KARTA GO TOP PRIVATE _NAME,_NUMBER PRIVATE OT1D1,OT2D1 DO show_st && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL IF KARTA->RAION>1 SELECT BUFF8 IF KARTA->STATE=1 _NUMBER=" " IF KARTA->PLACE=0 _SHIFR="99 " _NAME="Прочие области и районы РФ " ELSE _SHIFR=RIGHT(ALLTRIM(extra1(KARTA->PLACE,"PLCE")),4) _NAME=extra1(KARTA->PLACE,"PLCE") ENDIF IF KARTA->RAION=2 _NUMBER="*" _SHIFR="1000" _NAME="Московская область " ENDIF ELSE _NUMBER="*" _SHIFR=SPACE(2)+STR(KARTA->STATE,2) _NAME=extra1(KARTA->STATE,"STTE") ENDIF SEEK _SHIFR IF !FOUND() APPEND BLANK REPLACE NUMBER WITH _NUMBER,SHIFR WITH _SHIFR,NAME WITH _NAME ENDIF pole=FIELD(8+KARTA->DIRECT1) REPLACE &pole WITH &pole+1 && НАПРАВЛЯЮЩЕЕ УЧРЕЖДЕНИЕ pole=FIELD(23+KARTA->DEPARTMENT) REPLACE &pole WITH &pole+1 && ОТДЕЛЕНИЯ БОЛЬНИЦЫ pole=FIELD(38+KARTA->PASS) REPLACE &pole WITH &pole+1 && Планово / экстренно REPLACE COUNT1 WITH COUNT1+KARTA->ALL_DAY && Проведено дней REPLACE COUNT2 WITH COUNT2+1 && ВСЕГО ВЫПИСАНО SELECT KARTA ENDIF ENDIF SKIP 1 show_din(count) && ПРОЦЕ ДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SELECT BUFF8 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6,A7,A8,A9,A0,; B1,B2,B3,B4,B5,B6,B7,B8,B9,B0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C0 TO; _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 && Суммирование по всем столбцам APPEND BLANK REPLACE SHIFR WITH " ",NAME WITH "Всего ",COUNT1 WITH _1,; COUNT2 WITH _2,A1 WITH _3,A2 WITH _4,A 3 WITH _5,A4 WITH _6,; A5 WITH _7,A6 WITH _8,A7 WITH _9,A8 WITH _10,A9 WITH _11,A0 WITH _12,; B1 WITH _13,B2 WITH _14,B3 WITH _15,B4 WITH _16,B5 WITH _17,; B6 WITH _18,B7 WITH _19,B8 WITH _20,B9 WITH _21,B0 WITH _22,; C1 WI TH _23,C2 WITH _24,C3 WITH _25,C4 WITH _26,C5 WITH _27,; C6 WITH _28,C7 WITH _29,C8 WITH _30,C9 WITH _31,C0 WITH _32 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6,A7,A8,A9,A0,; B1,B2,B3,B4,B5,B6,B7,B8,B9,B0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C0 TO; _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; FOR SHIFR>" ".AND.SHIFR<"1000" && Суммирование столбцов по всем иностранцам APPEND BLANK REPLACE SHIFR WITH " 100",NAME WITH "Всего иностранцев ",COUNT1 WITH _1,; COUNT2 WITH _2,A1 WITH _3,A2 WITH _4,A3 WITH _5,A4 WITH _6,; A5 WITH _7,A6 WITH _8,A7 WITH _9,A8 WITH _10,A9 WITH _11,A0 WITH _12,; B1 WITH _13,B2 WITH _14,B3 WITH _15,B4 WITH _16,B5 WITH _17,; B6 WITH _18,B7 WITH _19,B8 WITH _20,B9 WITH _21,B0 WITH _22,; C1 WITH _23,C2 WITH _24,C3 WITH _25,C4 WITH _26,C5 WITH _27,; C6 WITH _28,C7 WITH _29,C8 WITH _30,C9 WITH _31,C0 WITH _32 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6,A7,A8,A9,A0,; B1,B2,B3,B4,B5,B6,B7,B8,B9,B0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C0 TO; _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 FOR SHIFR>"1000" && Суммирование столбцов по всем областям РФ APPEND BLANK REPLACE SHIFR WITH "9990",NAME WITH "Всего по РФ ",COUNT1 WITH _1,; COUNT2 WITH _2,A1 WITH _3,A2 WITH _4,A3 WITH _5,A4 WITH _6,; A5 WITH _7,A6 WITH _8,A7 WITH _9,A8 WITH _10,A9 WITH _11,A0 WITH _12,; B1 WITH _13,B2 WITH _14,B3 WITH _15,B4 WITH _16,B5 WITH _17,; B6 WITH _18,B7 WITH _19,B8 WITH _20,B9 WITH _21,B0 WITH _22,; C1 WITH _23,C2 WITH _24,C3 WITH _25,C4 WITH _26,C5 WITH _27,; C6 WITH _28,C7 WITH _29,C8 WITH _30,C9 WITH _31,C0 WITH _32 OT1D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".FRM" && OTCH*1.FRM OT2D1="OTCH"+ALLTRIM(STR(_OTCH))+"1"+".TXT" && OTCH*1.TXT REPORT FORM &OT1D1 TO FILE &OT2D1 PLAIN *------------------------------------------------ CASE _OTCH=16.OR._OTCH=17.OR._OTCH=18.OR._OTCH=19 *------------------------------------------------ SELECT BUFF8 APPEND BLANK SELECT KARTA SET RELATION TO NUM_IB I NTO DIA66 GO TOP DO show_st DO WHILE !EOF() IF IF(dep=0,.T.,IF(dep=KARTA->DEPARTMENT,.T.,.F.)).AND.; KARTA->DATE_END>=_DATE_FROM.AND.KARTA->DATE_END<=_DATE_TILL SELECT BUFF8 IF _OTCH=16 IF KARTA->END1=2 REPLACE A1 WITH A1+1 && ВСЕГО IF KARTA->OLD<3 && НОВОРОЖДЕННЫЕ REPLACE A2 WITH A2+1 ENDIF ENDIF IF DIA66->SHIFR="0000" && ОКАЗАВШИЕСЯ ЗДОРОВЫМИ REPLA CE A3 WITH A3+1 ENDIF ELSEIF _OTCH=17.AND.KARTA->END1=3 IF KARTA->OLD=1 REPLACE A1 WITH A1+1 && УМЕРЛО В ВОЗРАСТЕ 0-6 СУТОК ENDIF IF (KARTA->DATE_END-KARTA->DATE_IN+; piece(KARTA->H OUR_IN,KARTA->MINS_IN,KARTA->HOUR_END,KARTA->MINS_END)<1) IF (KARTA->DATE_END-KARTA->DATE_B+; piece(KARTA->HOUR_B,KARTA->MINS_B,KARTA->HOUR_END,KARTA->MINS_END)<=1) && В ВОЗРАСТЕ ДО СУТОК REPLACE A2 WITH A2 +1 ENDIF IF KARTA->OLD<7 && В ВОЗРАСТЕ ДО ГОДА REPLACE A3 WITH A3+1 SELECT DIA66 state() && Поиск паталого-анатомического диагноза (если он есть ) DO WHILE DIA66->NUM_IB=KARTA->NUM_IB IF DIA66->KOD1="1".AND.; (DIA66->SHIFR>="4800".AND.DIA66->SHIFR<="4869") SELECT BUFF8 REPLACE A4 WITH A4+1 && В Т ОМ ЧИСЛЕ УМЕРЛО ОТ ПНЕВМОНИИ EXIT ENDIF SKIP 1 ENDDO ENDIF ENDIF ELSEIF _OTCH=18.AND.(KARTA->SHIFR="410 ".OR.KARTA->SHIFR="412 ") IF KARTA->TIME<3 REPLACE A1 WITH A1+1 && ВСЕГО ПОСТУПИЛО БОЛЬНЫХ ИНФАРКТОМ ENDIF IF KARTA->END1=3.AND.(KARTA->DATE_END-KARTA->DATE_IN+; piece(KARTA->HOUR_IN,KARTA->MINS_IN,KARTA->HOUR_END,KARTA->MI NS_END)<1) REPLACE A2 WITH A2+1 && УМЕРЛО В ПЕРВЫЕ 24 ЧАСА ENDIF ELSEIF _OTCH=19.AND.(KARTA->SHIFR>="6300".AND.KARTA->SHIFR<="6769") IF KARTA->END1=3 REPLACE A1 WITH A1+1 && ВСЕГО УМЕРЛО БЕ РЕМЕННЫХ,РОЖЕНИЦ И РОДИЛЬНИЦ SELECT DIA66 state() && Поиск паталого-анатомического диагноза (если он есть ) DO WHILE DIA66->NUM_IB=KARTA->NUM_IB IF DIA66->KOD1="1".AND.; (DIA66->SHIFR>="6300".AND.DIA66->SHIFR<="6769") SELECT BUFF8 REPLACE A2 WITH A2+1 && УМЕРЛО ОТ ОСЛОЖНЯЮЩИХ ЗАБОЛЕВАНИЙ EXIT ENDIF SKIP 1 ENDDO ENDIF ENDIF SELECT KARTA ENDIF SKIP 1 show_din(count) && ПРОЦЕДУРА ПРЕДСТАВЛЕНИЯ ОБРАБОТКИ ЗАПИСЕЙ ENDDO SET RELATION TO numb_STR() && НУМЕРАЦИЯ СТРОК *------------ ------------------------------------ ENDCASE *------------------------------------------------ SELECT BUFF8 IF _OTCH=6 DELETE FOR EMPTY(COUNT2)=.T. PACK ENDIF @ 13,25 SAY " СОЗДАЕТСЯ ОТЧЕТ : "+OT2+" " REPORT FORM &OT1 FOR IF(_OTCH=1.OR._OTCH=2.OR._OTCH=5,; !EMPTY(NUMBER),.T.) TO FILE &OT2 PLAIN IF _OTCH=9.OR._OTCH=10.OR._OTCH=11.OR._OTCH=12 REPORT FORM OTCH.FRM TO FILE OTCH.TXT PLAIN USE corr_ttl ("OTCH.TXT",dep_name,DTOC(_DATE_FROM),DTOC(_DATE_TILL)) link2("OTCH.TXT",OT2) RENAME OTCH.TXT TO &OT2 ELSE USE corr_ttl(OT2,dep_name,DTOC(_DATE_FROM),DTOC(_DATE_TILL)) ENDIF IF _OTCH=4.OR._OTCH=9.AND.dep#14.OR.; _OTCH=10.OR._OTCH=11.AND.f=2.OR._OTCH=12.OR._OTCH=15 link2(OT2,OT2D1) ENDIF ELSE SELECT BUFF8 USE LOOP ENDIF ENDIF SET CURSOR ON fileview(OT2,3,2,21,77,"N/BG",350) do_PRN( ) RESTORE SCREEN FROM scr1 SET CURSOR OFF ELSE SELECT BUFF8 USE ENDIF ENDDO RELEASE coun,c1,v1,v2,txt,seek,numb1,_COUNTALL,rec SELECT (sel) RETURN 0 ********************************************************************* * Функция нумерации с трок в отчетном документе * ********************************************************************* FUNCTION numb_STR SELECT BUFF8 GO TOP PRIVATE numb1 numb1=0 DO WHILE !EOF() numb1=numb1+1 REPLAC E NUMBER WITH STR(numb1,5) SKIP 1 ENDDO RETURN 0 ********************************************************************* * Функция разбиения болезней на классы * ******************************** ************************************* FUNCTION grad lsl=SELECT() SELECT 0 USE CLASS.DBF INDEX CLASS ALIAS CLASS PRIVATE coun1,K,seek,_COUNTALL,rec coun1=RECCOUNT() seek=" " _COUNTALL=0 rec=0 GO TOP SELECT BUFF8 SET SOFTSEEK ON FOR K=1 TO coun1 seek=CLASS->SHIFR_LEFT SEEK seek IF !EOF() IF BUFF8->SHIFR <= CLASS->SHIFR_RIGH numb1=numb1+1 rec=RECNO() IF _OTCH=1 _SHIFR=SHIFR _COUNT1=COUNT1 _COUNT2=COUNT2 _A1=A1 _A2=A2 _A3=A3 _A4=A4 _A5=A5 _A6=A6 APPEND BLANK REPLACE SHIFR WITH _SHIFR,COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,; A1 WITH _A1,A2 WITH _A2,A3 WITH _A3,A4 WITH _A4,; A5 WITH _A5,A6 WITH _A6 SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6 TO ; _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 ; WHILE BUFF8->SHIFR <= CLASS->SHIFR_RIG H GOTO rec REPLACE COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,A1 WITH _A1,; A2 WITH _A2,A3 WITH _A3,A4 WITH _A4,A5 WITH _A5,A6 WITH _A6 ENDIF REPLACE BUFF8->NUMBER WITH STR(numb1,2) REPLACE BUFF8->NAMECL WITH CLASS->NAME_CLASS REPLACE BUFF8->SHIFRL WITH CLASS->SHIFR_LEFT REPLACE BUFF8->SHIFRR WITH CLASS->SHIFR_RIGH IF _OTCH=6 SUM COUNT1 TO _COUNTALL WHILE BUFF8->SHIFR <= CLASS->SHIFR_ RIGH GO rec REPLACE BUFF8->COUNT2 WITH _COUNTALL ENDIF ENDIF SKIP 1 ALIAS CLASS ELSE EXIT ENDIF NEXT SET SOFTSEEK OFF SELECT CLASS USE SELECT (lsl) RETUR N 0 ********************************************************************* * Функция разбиения на группы ( для отчета N1,(N2 и N5) ) * ********************************************************************* FUNCTION grad1 lsl=S ELECT() SELECT 0 IF _OTCH=1 USE GRUP1.DBF INDEX GRUP1 ALIAS GRUP ELSE && для _OTCH=2 и _OTCH=5 USE GRUP2.DBF INDEX GRUP2 ALIAS GRUP ENDIF PRIVATE coun1,K,seek coun1=RECCOUNT() seek=" " GO TOP SELECT BUFF8 SET SOFTSEEK ON FOR K=1 TO coun1 seek=GRUP->SHIFR_LEFT SEEK seek IF !EOF() IF BUFF8->SHIFR <= GRUP->SHIFR_RIGH IF !EMPTY(BUFF8->NUMBER) SKIP 1 ALIAS BUFF8 ENDIF rec=RECNO() SUM COUNT1,COUNT2,A1,A2,A3,A4,A5,A6 TO ; _COUNT1,_COUNT2,_A1,_A2,_A3,_A4,_A5,_A6 ; WHILE BUFF8->SHIFR <= GRUP->SHIFR_RIGH GOTO rec REPLACE COUNT1 WITH _COUNT1,COUNT2 WITH _COUNT2,A1 WIT H _A1,; A2 WITH _A2,A3 WITH _A3,A4 WITH _A4,A5 WITH _A5,A6 WITH _A6 REPLACE BUFF8->NUMBER WITH "-" REPLACE BUFF8->NAMECL WITH GRUP->NAME_GRUP REPLACE BUFF8->SHIFRL WITH GRUP->SHIFR_LEFT RE PLACE BUFF8->SHIFRR WITH GRUP->SHIFR_RIGH ENDIF SKIP 1 ALIAS GRUP ELSE EXIT ENDIF NEXT SET SOFTSEEK OFF SELECT GRUP USE SELECT (lsl) RETURN 0 ********************************************************************* * Функция слияния двух текстовых файлов * ********************************************************************* FUNCTION link2 PARAMETERS F1,F2 RUN ("COPY &F1+&F2 &F1>NUL") DELETE FILE &F2 RETURN 0 ********************************************************************* * Представление на экране обработки записей БД ( начало ) * ***************************************************************** **** PROCEDURE SHOW_ST @ 4,7 CLEAR TO 15,72 saycent(5,5,75," *** "+_OTCH_N+" *** ") saycent(6,5,75,"по "+IF(dep=0,"всему стационару ","отделению "+dep_name)) saycent(7,5,75,"за период с "+DTOC(_DATE_FROM)+" по "+DTOC(_DATE_TILL)) STORE 0 TO c1,v1 ,v2 coun=RECCOUNT() v1=replicate(chr(178),60) PRIVATE clr11 clr11=SETCOLOR() SET COLOR TO (color1) @ 8,8 CLEAR TO 15,71 @ 8,8 TO 15,71 DOUBLE saycent(15,5,75," ESC - прервать обработку ") @ 12,9 TO 14,70 @ 13,10 say v1 @ 9,10 TO 11,37 @ 10,11 SAY "ОБР АБОТАНО :" @ 10,24 SAY 0 @ 9,41 TO 11,70 @ 10,42 SAY "ВСЕГО ЗАПИСЕЙ :" @ 10,61 SAY coun SET COLOR TO (clr11) RETURN ********************************************************************* * Представление на экране обработки записей БД ( динамика ) * ********************************************************************* PROCEDURE SHOW_DIN PARAMETERS counts c1=c1+counts v2=replicate(chr(219),int(60*(c1/coun))) @ 13,10 SAY v2 @ 10,24 SAY c1 count=1 RETURN ********************************************************************* * Суммирование колонок по классам операций для отчета N3 * ********************************************************************* FUNCTION summ PRIVATE k,s,s1,n,A,B,C SELEC T BUFF8 SET SOFTSEEK ON GO TOP FOR k=2 TO 16 s=IF(k<10,"0"+STR(k,1),STR(k,2))+"00" SEEK s IF !FOUND() APPEND BLANK REPLACE SHIFR WITH s catalog(@s,@txt) REPLACE NAME WITH ALLTRIM(txt) ENDIF n=RECNO() SKIP 1 s1=IF(k+1<10,"0"+STR(k+1 ,1),STR(k+1,2))+"00" SUM COUNT1,COUNT2,A1 TO A,B,C WHILE SHIFR=ALLTRIM(_FAM) GO TOP D2=EOF() menu1=5 SET FILTER TO ELSEIF menu1=3 SET CURSOR ON @ 10,45 GET _DATE_IN PICTURE "@D" READ SET CURSOR OFF SET FILTER TO DATE_IN=_DATE_IN GO TOP D2=EOF() IF D2=.F. menu1=1 @ 16,8 CLEAR TO 20,72 DO WHILE menu1#0.AND.!D2 _NUM_IB=NUM_IB _FAM=FAM _DATE_IN=DATE_IN DO first @ 11,14 TO 14,40 DOUBLE @ 12,15 PROMPT "СЛЕДУЮЩАЯ КАРТА " @ 13,15 PROMPT "ПРЕДЫДУЩАЯ КАРТА " MENU TO menu1 IF menu1=1 SKIP D2=EOF() ELSEIF menu1=2 SKIP -1 D2=BOF() EN DIF ENDDO menu1=1 ENDIF SET FILTER TO ELSEIF menu1=5 SKIP D2=EOF() ELSEIF menu1=6 SKIP -1 D2=BOF() ENDIF @ 16,8 CLEAR TO 20,72 IF D2=.F. _NUM_IB=NUM_IB _FAM=FAM _DATE_IN=DATE_IN DO first ELSEIF D2=.T. @ 17,25 TO 19,55 DOUBLE @ 18,31 SAY "БОЛЬШЕ ЗАПИСЕЙ НЕТ !" ENDIF ENDDO SET SOFTSEEK OFF SELECT (sel1) SET COLOR TO (clr1) RETURN ********************************************************************* * ПРОВЕРКА П РАВИЛЬНОСТИ ЗАПОЛНЕНИЯ КАРТЫ * ********************************************************************* FUNCTION all_r PRIVATE _qui _qui=.F. IF EMPTY(_FAM)=.T. message('e',"НЕ ВВЕДЕНА ФАМИЛИЯ ПАЦИЕНТА ") beg_line=1 cur_promp=2 ELSEIF EMPT Y(_DATE_B)=.T. message('e',"НЕ ВВЕДЕНА ДАТА РОЖДЕНИЯ ") beg_line=1 cur_promp=5 ELSEIF EMPTY(_OLD)=.T. message('e',"НЕ ВВЕДЕН ВОЗРАСТ ") beg_line=1 cur_promp=6 ELSEIF EMPTY(_RAION)=.T. message('e',"НЕ ВВЕДЕН РАЙОН ПРОЖИВАНИЯ ") beg_line=1 cur_promp=9 ELSEIF EMPTY(_CITY_VILL)=.T. message('e',"НЕ ВВЕДЕН ПУНКТ <ЖИТЕЛЬ >") beg_line=1 cur_promp=10 ELSEIF EMPTY(_STATE)=.T. message('e',"НЕ ВВЕДЕНО НАЗВАНИЕ ГОСУДАРСТВА <по умолчанию - РФ > ") beg_line=1 cur_promp=12 ELSEIF EMPTY(_DEPARTMENT)=.T. message('e',"НЕ ВВЕДЕН O НАЗВАНИЕ ОТДЕЛЕНИЕ ") beg_line=1 cur_promp=13 ELSEIF EMPTY(_KOIKA)=.T. message('e',"НЕ ВВЕДЕН ПРОФИЛЬ КОЙКИ ") beg_line=1 cur_promp=14 ELSEIF EMPTY(_DATE_IN)=.T. message('e',"НЕ В ВЕДЕНА ДАТА ПОСТУПЛЕНИЯ ") beg_line=1 cur_promp=17 ELSEIF EMPTY(_DATE_END)=.T. message('e',"НЕ ВВЕДЕНА ДАТА ВЫПИСКИ ") beg_line=20 cur_promp=20 ELSEIF _ALL_DAY<0.AND.EMPTY(_DATE_END)=.F. beg_line=1 cur_promp=17 message('e',"НЕСООТВ ЕТСТВИЕ МЕЖДУ ДАТАМИ ПОСТУПЛЕНИЯ И ВЫПИСКИ ") ELSEIF _END1=3.AND.EMPTY(_OLD_D)=.T. message('e',"НЕ ВВЕДЕН ВОЗРАСТ НА МОМЕНТ СМЕРТИ ") beg_line=1 cur_promp=18 ELSEIF EMPTY(_END1)=.T. message('e',"НЕ ВВЕДЕН ПУНКТ <ИСХОД >") beg_line=1 cur_pro mp=19 ELSEIF EMPTY(_NUM_COME)=.T. message('e',"НЕ ВВЕДЕНО КОЛИЧЕСТВО ГОСПИТАЛИЗАЦИЙ ") beg_line=20 cur_promp=22 * ELSEIF EMPTY(_DIA_DIRECT)=.T. * message('e',"НЕ ВВЕДЕН НАПРАВЛЯЮЩИЙ ДИАГНОЗ ") * beg_line=20 * cur_promp=21 ELSEIF LE N(vars1[1])=0 message('e',"НЕ ВВЕДЕН ОСНОВНОЙ ДИАГНОЗ ") beg_line=20 cur_promp=23 ELSEIF AT("000.0",vars1[1])#0.AND.LEN(vars[1])>80 message('e',"ОШИБОЧНЫЙ ДИАГНОЗ ") beg_line=20 cur_promp=25 EL SEIF AT("000.0",vars1[1])#0.AND.LEN(vars1[2])#0 message('e',"ОШИБОЧНЫЙ ДИАГНОЗ ") beg_line=20 cur_promp=25 ELSE _qui=.T. ENDIF RETURN (_qui) ********************************************************************* * П редставление на экране основной информации из 66 формы * ********************************************************************* PROCEDURE first IF !BOF().AND.!EOF() @ 16,8 CLEAR TO 20,72 @ 17,15 SAY "НОМЕР И /Б :"+NUM_IB @ 18,15 SAY "ФАМИЛИЯ БО ЛЬНОГО :"+ALLTRIM(FAM) @ 19,15 SAY "ДАТА ПОСТУПЛЕНИЯ :" @ 19,34 SAY DATE_IN ENDIF RETURN ********************************************************************* * Каталог операций * ************ ********************************************************* FUNCTION catalog PARAMETERS s,t PRIVATE sel3,screen3,N3 sel3=SELECT() SAVE SCREEN TO screen3 select 0 use cato.dbf index cato alias cato SET SOFTSEEK ON SEEK s SET SOFTSEEK OFF IF FOUND() t=NAME_ILL ELSE private NUILL,K go top nuill=RECCOUNT() declare OPERATION[NUILL] for K=1 to NUILL operation[k]=NAME_ILL skip 1 next release NUILL,K @ 4,1 CLEAR TO 21,78 @ 4,1 TO 21,78 saycent (4,1,78," КАТАЛОГ ОПЕРАЦИЙ ") N3=ACHOICE(5,2,20,77,operation,.T.,"",NUMBER-1) IF LASTKEY()=27 RESTORE SCREEN FROM screen3 use SELECT (sel3) RETURN (-1) ENDIF GO N3 s=SHIFR t=NAME_ILL ENDIF RESTORE SCREEN FROM screen3 use SELECT (sel3) RETURN (0) ********************************************************************* * Процедура настройки каталогов * ************************************************* ******************** PROCEDURE recon PRIVATE N4,N5,cod_name STORE 0 TO N4,N5 DO WHILE gotomain=.F. cod_name=SPACE(4) codif1("CORR",@N4) IF LASTKEY()=27 SET CURSOR OFF RETURN ELSEIF N4=1 cod_name="RIGS" ELSEIF N4=2 cod_name="DIRS" ELSE IF N4=3 cod_name="STTE" ELSEIF N4=4 cod_name="HOSP" ELSEIF N4=5 cod_name="BIRS" ELSEIF N4=6 cod_name="RIZS" ELSEIF N4=7 cod_name="DEPS" ELSEIF N4=8 cod_name="KOIK" ELSEIF N4=9 cod_name="RIZ1" ELSEIF N4=10 cod_name="RIZ2" ELSEIF N4=11 cod_name="RIZ3" ELSEIF N4=12 cod_name="OLDS" ELSEIF N4=13 cod_name="PLCE" ENDIF codifM("CODIF",cod_name,@N5) ENDDO RELEASE N4,N5,cod_name RETURN ******************* ************************************************** * Продедура работы с каталогами * ********************************************************************* FUNCTION codifM PARAMETERS codfile,code_name,code_var PRIVATE scr een,sel,ret,i,k,svtx,maxlen,color,count,first,x1,x2,y1,y2 PRIVATE prom,prom1 IF !t_qwerty RETURN 0 ENDIF SAVE SCREEN TO screen SET CURSOR OFF color=SETCOLOR() sel=SELECT() SET COLOR TO (color3) SET EXACT OFF SELECT &CODFILE CLEAR TYPEAHEAD prom= "ESC- отказ ,ENTER-переименовать " prom1="INS-добавить ,DEL-удалить " first=1 DO WHILE .T. SEEK (code_name) IF !FOUND() RETURN "" ENDIF svtx=ALLTRIM(TEXT) maxlen=MAX(LEN(svtx),MAX(LEN(prom),LEN(prom1))) COUNT WHILE SUBSTR(KEY,1,4)=SUBSTR(code_name+ ' ',1,4) TO COUNT count=count-1 && не учитываем заголовок DECLARE A[count],B[count] * A[]-массив для текстов шаблонов * B[]-массив для номеров шаблонов IF count=0 DECLARE A[1] a[1]=" Коди фикатор пуст,воспользуйтесь клавишей INS" maxlen=MAX(maxlen,40) ENDIF SEEK(code_name) FOR k=1 TO COUNT SKIP A[K]=ALLTRIM(TEXT) B[K]=SUBSTR(KEY,5) maxlen=MAX(maxlen,LE N(A[K])) NEXT y1=12-ROUND(MIN(count,13)/2 +0.49,0) x1=37-ROUND(MIN(maxlen,72)/2 +0.49,0) * рисование рамки и заголовка * SET COLOR TO (color3) y2=MIN(y1+count+2,20) x2=MIN(x1+maxlen+3,77) RESTORE SCREEN FROM SCREEN @ y1,x1,y2,x2 BOX singl+fon2 @ y2,x1,y2+3,x2 BOX "+-+¦ --L¦ "+fon2 saycent(y2+1,x1,x2,prom) saycent(y2+2,x1,x2,prom1) saycent(y1,x1,x2,svtx) I=ACHOICE(y1+1,x1+1,y2-1,x2-1,a,.t.,"u_key1",first) IF i=0 ret="" CLEAR TYPEAHEAD EXIT ELSE DO CASE CASE LASTKEY()=13.AND.COUNT>0 && SEEK(code_name) SKIP I PRIVATE scr,col1,pict pict=SPACE(LEN(TEXT)) scr=SAVESCREEN(10,9,12,70) col1=SETCOLOR() SET COLOR TO (color7) @10,9,12,70 box singl+fon2 saycent(10,9,70,"ВВОДИТЕ НОВОЕ ИМЯ ") SET CURSOR ON @ 11,10 GET pict READ PICT=STRTRAN(pict,'Н ','H') SET CURSOR OFF SETCOLOR(col1) RESTSCREEN( 10,9,12,70,scr) IF LASTKEY()#27.AND.!EMPTY(PICT) && ESC REPLACE TEXT WITH pict ENDIF RELEASE scr,col1,pict CASE LASTKEY()=22 && IF count>0 ins_pic(code_name,b[count]) ELSE ins_pic(code_name,' ') ENDIF first=count+1 CASE LASTKEY()=7 && IF count>0 del_pic(code_name,i) ENDIF first=i-1 ENDCASE ENDIF ENDDO *CLEAR TYPEAHEAD REINDEX RESTORE SCREEN FROM screen SET COLOR TO (color) SELECT(sel) SET C URSOR OFF RETURN ret ********************************************************************* * Проверка наличия в текущей директории файла отчета * ********************************************************************* FUNCTION f_FRM PRIVATE l og,screen log=.T. IF !FILE(OT1) log=.F. SAVE SCREEN TO screen @ 8,8 CLEAR TO 15,71 @ 8,8 TO 15,71 DOUBLE saycent(8,20,60,"ВНИМАНИЕ ") @ 11,15 SAY "ДЛЯ СОЗДАНИЯ ОТЧЕТА НЕОБХОДИМ ФАЙЛ :"+OT1 @ 12,15 SAY "УКАЗАННОГО ФАЙЛА НЕТ В РАБОЧЕЙ ДИР ЕКТОРИИ " INKEY(10) RESTORE SCREEN FROM screen ENDIF RETURN (log) ********************************************************************* * Функция ввода отчетного периода * ***************************************** **************************** FUNCTION period PRIVATE screen,M1,R1 R1=0 M1=1 SAVE SCREEN TO screen SET CURSOR ON @ 8,8 CLEAR TO 15,71 @ 8,8 TO 15,71 DOUBLE DO WHILE .T. saycent(8,20,60,"ВВЕДИТЕ ОТЧЕТНЫЙ ПЕРИОД ") @ 9,17 TO 11,34 @ 10,20 SAY "c " GET _D ATE_FROM PICTURE "@D" @ 9,47 TO 11,64 @ 10,50 SAY "по " GET _DATE_TILL PICTURE "@D" @ 12,17 TO 14,64 @ 13,21 PROMPT " Ok " @ 13,38 PROMPT " ПОВТОР " @ 13,53 PROMPT " ОТКАЗ " READ MENU TO M1 IF M1=1 EXIT ELSEIF M1=2 M1=1 ELSEIF M1=0.OR.M1=3 R1=1 EXIT ENDIF ENDDO SET CURSOR OFF RESTORE SCREEN FROM screen RETURN (R1) ********************************************************************* * Вывод отчетного документа на печать * ** ******************************************************************* FUNCTION do_PRN PRIVATE YN YN=1 codif1("PRNT",@YN) IF YN=2 SET CURSOR OFF TYPE &OT2 TO PRINT ENDIF RETURN 0 ********************************************************************* * Функция определения возраста пациента * ********************************************************************* FUNCTION y_m_day PARAMETERS day_bir,hour_bir,m ins_bir,day_bas,hour_bas,mins_bas PRIVATE years,mons,days,screen,txt SAVE SCREEN TO screen txt="" years="00" @ 1,20 CLEAR TO 3,60 @ 1,20 TO 3,60 @ 2,22 SAY IF(choice=8," Возраст пациента :","Возраст на момент смерти :") years=oldM(day_bir,day_bas) IF VAL(ye ars)>0 txt=years IF VAL(years)=1 txt=txt+" год " ELSEIF VAL(years)<5 txt=txt+" года " ELSE txt=txt+" лет " ENDIF ELSE mons=INT((day_bas-day_bir)/30) IF mons>0 txt=ALLTRIM(STR(mons)) IF mons=1 txt=txt+ " месяц " ELSEIF mons<5 txt=txt+" месяца " ELSE txt=txt+" месяцев " ENDIF ELSE PRIVATE _add _add=piece(hour_bir,mins_bir,hour_bas,mins_bas) days=day_bas-day_bir+_add txt=ALLTRIM(STR(days)) IF days=1 txt=txt+" день " ELSEIF days<5 txt=txt+" дня " ELSE txt=txt+" дней " ENDIF ENDIF ENDIF @ 2,50 SAY txt vars[choice]=vars[choice]+"." PRIVATE string2 string2="" IF choice=8 context(@string2,promp[choice],vars[choice],length,New_Str) stuff1(@string,length,string2,choice,row,len(promp)) choice=9 vars[choice]=codif1("OLDS",@_OLD) ELSEIF choice=22 codif1("OLDS",@_OLD_D) ENDIF RESTORE SCREEN FROM screen RETURN 0 ********************************************************************* * Функция определения полных лет пациента * ********************************************************************* FUNCT ION oldM PARAMETERS b_dat,today PRIVATE old1 PRIVATE year1 SET CENTURY OFF year1=year(today)-year(b_dat) if month(today)>month(b_dat) old1=alltrim(str(year1)) else if month(today)NUL") DELETE FILE &_file RENAME _0000F TO &_file RETURN 0 ******************************************************************** Модуль : VIEWER.PRG ************************************************************************* * Функция просмотра текстового файла в заданном окне - fileview. * * Для перемещения текста в окне используются * * только : _ _ * * Параметры : * * filename - имя файла, * * wt,wl,wb,wr - окно просмотра, * * color - цвет [необязательный параметр ], * * linewide - длина строки (гориз . скроллинг ) [необязательный параметр ]. * ************************************ ************************************* function fileview parameters filename,wt,wl,wb,wr,color,linewide private col_sv col_sv=setcolor() if pcount()<6 color="W+/B,N/G,BG/N,RB+/B,BG/B" endif if pcount()<7 linewide=wr-wl+1 endif set key 24 to cr set key 18 to bl set key 3 to bl set key 29 to bl set key 30 to bl set key 31 to bl if empty(color) color="W+/B,N/G,BG/N,RB+/B,BG/B" endif setcolor(color) private f_mov private fh,file_len,file_down,file_up private blok,pos_str,pos_cur private lines,old_line,count,cnt_pos private buf,p,wt,wl,wb,wr private str_vid,p_vid private buf1,buf2 buf="buf1" blok=2000 pos_str=wb-wt+1 pos_cur=wb-wt+1 lines=0 count=0 cnt_pos=0 old_line=0 last=chr(13)+chr(10) f_mov=0 fh=fopen(filename,0) if ferror()#0 @ 1,2 say "Ошибка при открытии файла "+filename return(0) endif file_len=fseek(fh,0,2) fseek(fh,0,0) buf1=freadstr(fh,blok) file_down=blok file_up=-1 str_vid=buf1 p_vid= rat(last,str_vid) str_vid=left(str_vid,p_vid-1) do while .T. clear typeahead memoedit(STRTRAN(str_vid,"Н ","H"),wt,wl,wb,wr,.F.,"mod",linewide,'',pos_str,0,pos_cur,0) if lastkey()=27 exit endif do case case f_mov=1 str_vid=&buf buf=if(buf="buf1","buf2","buf1") fseek(fh,file_down,0) file_down=file_down+ blok file_up=file_down-3*blok &buf=freadstr(fh,blok) str_vid=str_vid+&buf pos_str=lines-old_line+1 pos_cur=wb-wt+1 old_line=pos_str-1 p_vid= rat(last,str_vid) str_vid=left(str_vid,p_vid-1) coun t=count+1 if count>cnt_pos cnt_pos=cnt_pos+1 p="pos"+alltrim(str(cnt_pos)) private &p &p=pos_str endif case f_mov=-1 fseek(fh,file_up,0) file_down=file_down-blok file_up=file_down-3*blok &buf=freadstr(fh,blok) str_vid=&buf buf=if(buf="buf1","buf2","buf1") str_vid=str_vid+&buf count=count-1 p="pos"+alltrim(str(count)) pos_str=&p+wb-wt+1 pos_cur=wb-wt+1 p_vid= rat(last,str_vid) str_vid=left(str_vid,p_vid-1) otherwise endcase enddo fclose(fh) set key 24 set key 18 set key 3 set key 29 set key 30 set key 31 setcolor(col_sv) RETURN(0) function mod parameters mode,line,col private key key=lastkey() do case case key=13 .and. line=lines .and. file_down-1 f_mov=-1 keyboard chr(23) return(0) otherwise lines=line endcase re turn(0) procedure cr keyboard chr(13) return procedure bl keyboard chr(32) return
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Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Выносил мусор. Соседи подумали, что переезжаю.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

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

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru