Esempio n. 1
0
def search_coordinats(a):
    TOKENS = open('/home/sshuser/jupyter/tmp/yandex_api.txt',
                  'r').read().split('\n')

    file = get_dir('path_robot') + '/прикрепления/zone+coordinats.xlsx'
    #df = pd.read_excel(file)

    for TOKEN in TOKENS:
        #df = pd.read_sql("""select top(1000) * from  [dbo].[zone_and_coordinates] where  coordinats = 'не найдено'""", con)

        sql = """SELECT top(1000) [idUMSRS],[adress],[coordinats]
                    FROM [COVID].[robo].[UMSRS_coordinates]
                        where [adress] is not null and [coordinats] is null"""

        df = pd.read_sql(sql, con)
        send('admin',
             'Использую токен под номером ' + str(TOKENS.index(TOKEN) + 1))
        for i in df.index:
            try:
                ADDRESS = df.at[i, 'adress'].replace(' г', '')
                #ADDRESS =  str(df.at[i,'TOWN_NAME'].replace('г.',''))+'+'+str(df.at[i,'GEONIM_NAME']) +"+"+ str(df.at[i,'HOUSE']) +'+'+ str(df.at[i,'KORPUS']) +'+'+ str(df.at[i,'TOWN_AREA_NAME'])
                #ADDRESS = df.at[i,'TOWN_NAME'] +"+"+df.at[i,'TOWN_AREA_NAME'] + "+" +df.at[i,'GEONIM_NAME'] + "+" +df.at[i,'GEONIM_TYPE_NAME'] + "+" +df.at[i,'HOUSE'] +'+'+ df.at[i,'KORPUS']
            except:
                continue
            else:
                ADDRESS = ADDRESS.replace(' ', '+').replace('++', '')
                coordinats = get_coordinat(ADDRESS, TOKEN)
                if not coordinats is None:
                    update_table(int(df.at[i, 'idUMSRS']), coordinats)
                    #df.loc[i,'coordinats'] = coordinats
                else:
                    update_table(int(df.at[i, 'idUMSRS']), 'не найдено')

    send('admin', 'Закончил искать адреса на сегодня.')
    return 1
Esempio n. 2
0
def check_table(path_to_excel, names):
    sum_colum = len(names)
    num_colum = 0
    try:
        file = pd.read_excel(path_to_excel, header=None, na_filter=False)
    except:
        send('', 'Файл не читается\n' + path_to_excel)
        return [1, 'Файл не читается', '', 0]
    if len(file) < 2:
        return [1, 'Файл пустой', '', 0]
    for head in range(len(file)):
        if num_colum != sum_colum:
            coll = file.loc[head].tolist()
            num_colum = 0
            collum = []
            error = 0
            error_text = ''
            for name in names:
                k = 0
                f = 0
                for col in coll:
                    if str(col).replace(' ', '') == name.replace(' ', ''):
                        collum.append(k)
                        num_colum += 1
                        f = 1
                    k += 1
                if f == 0:
                    error = 1
                    error_text = error_text + ' Не найдена колонка ' + name + ';'
        else:
            break
    return error, error_text, collum, head - 1
Esempio n. 3
0
 def fr_death_to_sql(df):
     send('admin','Обрезаю слишком длинные строки')
     df = df.apply(lambda x: x.loc[::].str[:255] )
     send('admin','Убираю Nan из таблицы')
     df = df.apply(lambda x: x.loc[::].str.replace('nan','') )
     send('admin','Отправляю в базу')
     df.to_sql('cv_input_fr_d_all_2',con,schema='dbo',if_exists='replace',index = False)
     send('admin','Запускаю процедуры')
     sql_execute("""
             EXEC   [dbo].[Insert_Table_cv_input_fr_d_all_2]
             EXEC   [dbo].[cv_from_d_all_to_d_covid]
             EXEC   [dbo].[cv_Load_FedReg_d_All]
             EXEC   [dbo].[cv_Load_FedReg_d_covid]
                 """)
     send('admin','Успешно загружено')
     return 1
Esempio n. 4
0
 def fr_lab_to_sql(df):
     send('admin','Ну, тут надо переименовать колонки и можно грузить')
     i = 1
     for column in df.columns:
         df.rename(columns = {column: str(i)}, inplace = True)
         i+=1
     df = df.dropna(subset=['1','2','3','4','5','6'])
     send('admin','Всего строк в  лабе '+ str(len(df)))
     df.to_sql('cv_input_fr_lab_2',con,schema='dbo',if_exists='replace',index = False)
     send('admin','Остались процедуры в базе')
     sql_execute("""
                 EXEC   [dbo].[Insert_Table_cv_input_fr_lab_2]
                 EXEC   [dbo].[cv_load_frlab]
                 """)
     if check_table('fedreg_lab'):
         send('admin','Лаборатория успешно загружена')
         return 1
     else:
         send('admin','Какая-то проблема с загрузкой лаборатории')
         return 0
Esempio n. 5
0
def create_tred_task(work,func,arg):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        future = executor.submit(globals()[func],arg)
        try:
            return_value = future.result()
            send('admin', 'Выполнил ' + work)
        except:
            send('admin', 'При выполнении ' + work + 'что-то произошло\n' )
        
        sql = f"""INSERT INTO [robo].[bot_logs]
	            ([user],[task],[schedule],[success],[result])
                    VALUES
                   ('devil'
                   ,'{work}'
                   ,'True'
                   ,''
                   ,'{str(future.result()).replace("'","")}') """
        
        con.execute(sql)
        return True
Esempio n. 6
0
def contact(direction):

    if direction == "left":

        sense.show_message("Contacting Bren")
        send("Fire")

    elif direction == "right":

        sense.show_message("Contacting Kheraass")

        send("Move")

    elif direction == "up":

        sense.show_message("Contacting Voltar")

        song = input("What sont do you want voltar to \"play\"?\n")
        send("Play " + song)

    elif direction == "down":

        sense.show_message("Glub")

        sleep(5)

    sense.clear((0, 0, 0))
Esempio n. 7
0
def load_UMSRS(a): 
    def UMSRS_to_sql(df):
        df.to_sql('cv_input_umsrs_2',con,schema='dbo',if_exists='replace',index = False)
        send('admin','Данные загружены в input_umsrs_2, запускаю процедурки')
        sql_execute("""
                    EXEC   [dbo].[Insert_Table_cv_input_umsrs_2]
                    EXEC   [dbo].[cv_Load_UMSRS]
                    """)
        if check_table('umsrs'):
            send('admin','Успешно выполнено!')
            return 1
        else:
            send('admin','Какая-то проблема с загрузкой УМСРС')
            return 0

    send('admin','А теперь будем грузить УМСРС')
    search = search_file('UMSRS')
    if search[0]:
        names = ['№ п/п', 'Номер свидетельства о смерти', 'Дата выдачи', 'Категория МС', 'Фамилия', 'Имя', 'Отчество', 'Пол', 'Дата рождения','Дата смерти', 'Возраст', 'Страна',  'Субъект',  'Район', 'Город', 'Населенный пункт', 'Элемент планировочной структуры','Район СПБ', 'Улица', 'Дом', 'Корпус', 'Строение', 'Квартира', 'Страна смерти', 'Субъект смерти', 'Район смерти', 'Город смерти', 'Населенный пункт смерти', 'Элемент планировочной структуры смерти', 'Район СПБ смерти', 'Улица смерти','Дом смерти', 'Корпус смерти', 'Строение смерти', 'Квартира смерти', 'Место смерти', 'Код МКБ-10 а', 'Болезнь или состояние, непосред приведшее к смерти','Код МКБ-10 б', 'Патол. состояние, кот. привело к указанной причине', 'Код МКБ-10 в', 'Первоначальная причина смерти', 'Код МКБ-10 г','Внешняя причина при травмах и отравлениях','Код II-1', 'Прочие важные состояния-1', 'Код МКБ-10 а(д)', 'Основное заболевание плода или ребенка','Код МКБ-10 б(д)', 'Другие заболевания плода или ребенка', 'Код МКБ-10 в(д)', 'Основное заболевание матери', 'Код МКБ-10 г(д)','Другие заболевания матери', 'Код МКБ-10 д(д)', 'Другие обстоятельства мертворождения', 'Установил причины смерти', 'Адрес МО','Краткое наименование', 'Осмотр трупа', 'Записи в мед.док.', 'Предшествующего наблюдения','Вскрытие', 'Статус МС', 'Взамен', 'Дубликат', 'Испорченное', 'Напечатано', 'в случае смерти результате ДТП'] 
        send('admin','Найден файл, сейчас прочту')
        try:
            df = pd.read_excel(search[2],usecols=names, header=7)
        except Exception as e:
            raise my_except('Не смог обработать файл\n' + search[2] + '\n' + str(e) )
        else:
            df.columns = range(len(df.columns))
            df.head()
            UMSRS_to_sql(df)
        return 0 
    else:
        send('admin', 'Не найден файл УМСРС')
Esempio n. 8
0
 def UMSRS_to_sql(df):
     df.to_sql('cv_input_umsrs_2',con,schema='dbo',if_exists='replace',index = False)
     send('admin','Данные загружены в input_umsrs_2, запускаю процедурки')
     sql_execute("""
                 EXEC   [dbo].[Insert_Table_cv_input_umsrs_2]
                 EXEC   [dbo].[cv_Load_UMSRS]
                 """)
     if check_table('umsrs'):
         send('admin','Успешно выполнено!')
         return 1
     else:
         send('admin','Какая-то проблема с загрузкой УМСРС')
         return 0
Esempio n. 9
0
def shedule():
    def read_tasks():
        sql = f"""select *
                    from robo.bot_scheduler
                    where IsAction = 1 and Day_week like '%{datetime.datetime.now().strftime("%a")}%'"""
        df = pd.read_sql(sql,con)
        return df
    
    try:
        df = read_tasks()
    except Exception as e:
        send('','Проблема с чтением заданий шедулера \n' + str(e))
    else:
        pass
    
    starttime=time.time()
    delta = 60 - time.time() % 60
    time.sleep(delta)
    while True:   
        time_now = datetime.datetime.now()
        if time_now.minute == 30:
            df = read_tasks()
        

        for i in df.loc[( (df['Time_hour'] == time_now.hour) & (df['Time_minute'] == time_now.minute) ) \
                | ( ( df['Time_hour'].isnull()  )  & (time_now.minute % df['Time_minute'] == 0)  ) ].index:
            try:
                my_thread = threading.Thread(target=create_tred_task, args=(df.at[i, 'name_job'],df.at[i, 'Procedure' ],df.at[i,'argument']))
            except Exception as e:
                send('', 'Ошибка при запуске задания\n' + str(e))
            try:
                my_thread.start()
            except Exception as e:
                send('', 'Ошибка при запуске задания\n' + str(e))
        
        delta = 60 - time.time() % 60
        time.sleep(delta)
Esempio n. 10
0
def regiz_decomposition(a):
    # Создаем подключение
    answer = pd.read_sql('SELECT * FROM [dbo].[v_Answer_MO]', con)
    if len(answer) > 0:
        ftp_user = answer.ftp_user.unique()
        statistic = pd.DataFrame()
        for ftp in ftp_user:
            otvet = answer[answer.ftp_user == ftp]
            lpu_name = otvet.LPU_name.unique()[0]
            del otvet['ftp_user']
            del otvet['LPU_level1_key']
            del otvet['LPU_name']
            otvet.rename(
                columns={
                    'HistoryNumber': 'Номер истории болезни',
                    'OpenDate': 'Дата открытия СМО'
                    #, 'IsAmbulant':'Признак амбулаторного СМО'
                    #, 'SnilsDoctor':'СНИЛС врача'
                    ,
                    'Error': 'Ошибка, выявленная в РЕГИЗ'
                },
                inplace=True)
            path_otvet = str(
                get_dir('regiz') + '/' + ftp + '/Ответы/_' +
                str(datetime.datetime.now().date()) + ' ' + lpu_name +
                '.xlsx').replace('"', '')
            with pd.ExcelWriter(path_otvet) as writer:
                try:
                    otvet.to_excel(writer, sheet_name='номера', index=False)
                except PermissionError:
                    statistic = statistic.append(
                        {
                            'MOName': lpu_name,
                            'NameFile': path_otvet.split('/')[-1],
                            'CountRows': len(otvet),
                            'TextError':
                            'Не удалось положить файл из-за ошибки доступа',
                            'OtherFiles': '',
                            'DateLoadFile': datetime.datetime.now(),
                            'InOrOut': 'Out'
                        },
                        ignore_index=True)
                else:
                    statistic = statistic.append(
                        {
                            'MOName': lpu_name,
                            'NameFile': path_otvet.split('/')[-1],
                            'CountRows': len(otvet),
                            'TextError': '',
                            'OtherFiles': '',
                            'DateLoadFile': datetime.datetime.now(),
                            'InOrOut': 'Out'
                        },
                        ignore_index=True)

        path_log = get_dir('regiz_svod') + '/' + datetime.datetime.now(
        ).strftime('%d.%m.%Y_%H-%M') + '_лог_разложения.xlsx'

        with pd.ExcelWriter(path_log) as writer:
            statistic.to_excel(writer, sheet_name='логи', index=False)
        temp_log = get_dir('temp') + '/' + datetime.datetime.now().strftime(
            '%d.%m.%Y_%H-%M') + '_decomposition_log.xlsx'
        shutil.copyfile(path_log, temp_log)
        statistic.to_sql('JrnLoadFiles',
                         con,
                         schema='logs',
                         if_exists='append',
                         index=False)
        send('info', 'Загружены логи')
        # Очистка таблиц в базе данных
        from sqlalchemy.orm import sessionmaker

        Session = sessionmaker(bind=con)
        session = Session()
        session.execute('''
        -- после отправки в МО
        -- Обновление даты отправки ответа в МО
        UPDATE [dbo].[HistoryAnswerFromShowcase]
          SET [DateAnswerMO] = GETDATE()
          WHERE [DateAnswerMO] is null 

        -- Обновление даты отправки ответа в МО
        UPDATE [dbo].[ErrorRequest]
          SET [DateSend] = GETDATE()
          WHERE [DateSend] is null
          AND [TextError] not like 'MIAC:%'
        ''')
        session.commit()
        session.close()

        send('info', 'Региз разложен по папкам')
        send_file('info', temp_log)
        try:
            file = open(get_dir('regiz_svod') + '/log.txt',
                        'a',
                        encoding='utf-8')
        except:
            send('info', 'Файл лога недоступен!')
        else:
            with file:
                file.write("  Региз разложен по папкам " +
                           str(datetime.datetime.today()) + '\n')

        return temp_log
    else:
        try:
            file = open(get_dir('regiz_svod') + r'/log.txt',
                        'a',
                        encoding='utf-8')
        except:
            send('info', 'Файл лога недоступен!')
        else:
            with file:
                file.write("  РЕГИЗ Нечего раскладывать по папкам " +
                           str(datetime.datetime.today()) + '\n')

        raise my_except("Нечего раскладывать по папкам!")
Esempio n. 11
0
def regiz_load_to_base_old(a):
    mo = pd.read_excel(get_dir('regiz_svod') + '/mo_directory.xlsx')
    names = [
        'Номер истории болезни', 'Дата открытия СМО',
        'Признак амбулаторного СМО', 'СНИЛС врача'
    ]
    path = get_dir('regiz')
    try:
        sql_execute("""
                TRUNCATE TABLE [dbo].[TempTableFromMO]
                TRUNCATE TABLE [nsi].[Organization] 
                """)
    except:
        raise my_exception('Не удалось очистить таблицы')

    list_ = []
    svod = pd.DataFrame()
    statistic = pd.DataFrame()

    for i in range(len(mo)):
        path_otc = path + '/' + mo.at[i, 'ftp_user'] + '/_Входящие'
        if os.path.exists(path_otc) == True:
            listOfFiles = os.listdir(path_otc)
            files = glob.glob(path_otc + '/*.xl*')
            file_alien = str(glob.glob(path_otc + '/*[!xls]*')).replace(
                path, '')
            #send('','я работаю')
            if len(files) == 0:
                k = len(statistic)
                statistic.at[k, 'MOName'] = mo.at[i, 'MO']
                statistic.at[k, 'NameFile'] = ''
                statistic.at[k, 'CountRows'] = 0
                statistic.at[k, 'TextError'] = 'Файл не найден'
                statistic.at[k, 'OtherFiles'] = file_alien
                statistic.at[k, 'DateLoadFile'] = datetime.datetime.now()
                statistic.at[k, 'InOrOut'] = 'IN'

            else:
                for file in files:
                    check = check_table(file, names)
                    if check[0] == 1:
                        k = len(statistic)
                        statistic.at[k, 'MOName'] = mo.at[i, 'MO']
                        statistic.at[k, 'NameFile'] = file.split('/')[-1]
                        statistic.at[k, 'CountRows'] = 0
                        statistic.at[k, 'TextError'] = check[1]
                        statistic.at[k, 'OtherFiles'] = file_alien
                        statistic.at[k,
                                     'DateLoadFile'] = datetime.datetime.now()
                        statistic.at[k, 'InOrOut'] = 'IN'
                    else:
                        try:
                            otchet = pd.read_excel(file,
                                                   header=check[3],
                                                   usecols=check[2],
                                                   dtype=str)
                        except:
                            k = len(statistic)
                            statistic.at[k, 'MOName'] = mo.at[i, 'MO']
                            statistic.at[k, 'NameFile'] = file.split('/')[-1]
                            statistic.at[k, 'CountRows'] = 0
                            statistic.at[k, 'TextError'] = 'Не смог прочитать'
                            statistic.at[k, 'OtherFiles'] = file_alien
                            statistic.at[
                                k, 'DateLoadFile'] = datetime.datetime.now()
                            statistic.at[k, 'InOrOut'] = 'IN'
                        else:
                            for col in otchet.columns:
                                otchet[col.replace(' ', '')] = otchet[col]
                            otchet['level1_key'] = mo.at[i, 'level1_key']
                            otchet.rename(columns={
                                'Номеристорииболезни': 'HistoryNumber',
                                'ДатаоткрытияСМО': 'OpenDate',
                                'ПризнакамбулаторногоСМО': 'IsAmbulant',
                                'СНИЛСврача': 'SnilsDoctor',
                                'level1_key': 'LPU_level1_key'
                            },
                                          inplace=True)
                            columnsTitles = [
                                'LPU_level1_key', 'HistoryNumber', 'OpenDate',
                                'IsAmbulant', 'SnilsDoctor'
                            ]
                            otchet = otchet.reindex(columns=columnsTitles)
                            list_.append(otchet)
                            try:
                                otchet.to_sql('TempTableFromMO',
                                              con,
                                              schema='dbo',
                                              if_exists='append',
                                              index=False)
                            except:
                                k = len(statistic)
                                statistic.at[k, 'MOName'] = mo.at[i, 'MO']
                                statistic.at[k,
                                             'NameFile'] = file.split('/')[-1]
                                statistic.at[k, 'CountRows'] = 0
                                statistic.at[
                                    k,
                                    'TextError'] = 'Не смог отправить в базу'
                                statistic.at[k, 'OtherFiles'] = file_alien
                                statistic.at[
                                    k,
                                    'DateLoadFile'] = datetime.datetime.now()
                                statistic.at[k, 'InOrOut'] = 'IN'
                            else:
                                send('', 'обработан файл\n' + file)
                                new_file = path + '/' + mo.at[
                                    i,
                                    'ftp_user'] + '/Архив/время_' + datetime.datetime.now(
                                    ).strftime('%d.%m.%Y_%H-%M') + '.xlsx'
                                otchet.to_excel(new_file)
                                try:
                                    os.remove(file)
                                except PermissionError:
                                    pass
                                k = len(statistic)
                                statistic.at[k, 'MOName'] = mo.at[i, 'MO']
                                statistic.at[k,
                                             'NameFile'] = file.split('\\')[-1]
                                statistic.at[k, 'CountRows'] = len(otchet)
                                statistic.at[k, 'TextError'] = ''
                                statistic.at[k, 'OtherFiles'] = file_alien
                                statistic.at[
                                    k,
                                    'DateLoadFile'] = datetime.datetime.now()
                                statistic.at[k, 'InOrOut'] = 'IN'

    try:
        svod = pd.concat(list_)
    except ValueError:
        #send('info', 'Нет новых файлов для сбора')
        try:
            f = open(get_dir('regiz_svod') + '/log.txt', 'a')
        except:
            pass
        else:
            with f:
                f.write("  Региз нет новых файлов " +
                        str(datetime.datetime.now()) + '\n')
        raise my_except('Нечего делать')
    else:
        svod.index = range(1, len(svod) + 1)
        svod_file = path + '/свод/' + datetime.datetime.now().strftime(
            '%d.%m.%Y_%H-%M') + ' свод номеров для проверки.xlsx'
        with pd.ExcelWriter(svod_file) as writer:
            svod.to_excel(writer, sheet_name='номера', index=False)
            statistic.to_excel(writer, sheet_name='статистика', index=False)

        mo.to_sql('Organization',
                  con,
                  schema='nsi',
                  if_exists='append',
                  index=False)

        sql_execute('EXEC [dbo].[Insert_Table_FileMO]')

        try:
            f = open(get_dir('regiz_svod') + '/log.txt', 'a')
        except:
            pass
        else:
            with f:
                f.write("  Региз файлы загружены в базу " +
                        str(datetime.datetime.now()) + '\n')

    statistic.to_sql('JrnLoadFiles',
                     con,
                     schema='logs',
                     if_exists='append',
                     index=False)
    return svod_file
Esempio n. 12
0
def upload():
    while True:
        message = sender.recv(1024).decode()
        send(message)
        print("Uploaded message")
Esempio n. 13
0
def load_fr_lab(a): 
    def fr_lab_to_sql(df):
        send('admin','Ну, тут надо переименовать колонки и можно грузить')
        i = 1
        for column in df.columns:
            df.rename(columns = {column: str(i)}, inplace = True)
            i+=1
        df = df.dropna(subset=['1','2','3','4','5','6'])
        send('admin','Всего строк в  лабе '+ str(len(df)))
        df.to_sql('cv_input_fr_lab_2',con,schema='dbo',if_exists='replace',index = False)
        send('admin','Остались процедуры в базе')
        sql_execute("""
                    EXEC   [dbo].[Insert_Table_cv_input_fr_lab_2]
                    EXEC   [dbo].[cv_load_frlab]
                    """)
        if check_table('fedreg_lab'):
            send('admin','Лаборатория успешно загружена')
            return 1
        else:
            send('admin','Какая-то проблема с загрузкой лаборатории')
            return 0
    send('admin','Посмотрим на файлик лабораторных исследований')
    search = search_file('fr_lab')
    if search[0] and search[1]:
        send('admin','Найден файл:\n' + search[2].split('/')[-1])
        send('admin','Сейчас мы его рассмотрим...')
        check = check_file(search[2],'fr_lab')
        if check[0]:
            send('admin','Неужели файл все-таки можно загрузить?')
            df = pd.read_csv(search[2],header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python')
            fr_lab_to_sql(df)
            return 1
        else:
            send('admin','Не, это плохой файл!\n' + str(check))
            return 0
    else:
        if search[0]:
            send('admin','Ну, это точно нужно перевести в csv!')
            file_csv = excel_to_csv(search[2]) 
            send('admin','Результат:\n' + file_csv.split('/')[-1])
            check = check_file(file_csv,'fr_lab')
            if check[0]:
                send('admin','Теперь можно и загрузить в память')
                df = pd.read_csv(file_csv,header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python')
                fr_lab_to_sql(df)
                return 1
            else:
                send('admin','Файл не прошёл проверку!\n' + check[1])
                return 0
        else:
            send('admin','Не найден файл лаборатории')
        return 0
Esempio n. 14
0
def svod_50_cov_19(a):
    sql1 = open('sql/parus/covid_50_polic.sql', 'r').read()
    sql2 = open('sql/parus/covid_50_stac.sql', 'r').read()
    sql3 = open('sql/covid/mz_50.sql', 'r').read()

    sql4 = open('sql/parus/covid_50_polic_old.sql', 'r').read()
    sql5 = open('sql/parus/covid_50_stac_old.sql', 'r').read()

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        polic = pd.read_sql(sql1, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        stac = pd.read_sql(sql2, con)
    with sqlalchemy.create_engine(
            f"mssql+pymssql://{user}:{passwd}@{server}/{dbase}",
            pool_pre_ping=True).connect() as con:
        covid = pd.read_sql(sql3, con)

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        polic_old = pd.read_sql(sql4, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        stac_old = pd.read_sql(sql5, con)

    send('', 'Запросы к базе выполнены')
    date_otch = polic['DAY'].unique()[0]

    del polic['DAY']
    del stac['DAY']
    covid_pol = covid.loc[covid['Type_Therapy'] == 'Поликлинника']
    del covid_pol['Type_Therapy']
    del covid_pol['Count_70_COVID_week']
    del covid_pol['Count_70_COVID']
    del covid_pol['Count_70_Pnev_week']
    del covid_pol['Count_70_Pnev']
    covid_stac = covid.loc[covid['Type_Therapy'] == 'Стационар']
    del covid_stac['Type_Therapy']

    new_name_pred = '50_COVID_19_' + date_otch + '_предварительный.xlsx'
    shablon_path = get_dir('help')

    shutil.copyfile(shablon_path + '/50_COVID_19_pred.xlsx',
                    shablon_path + '/' + new_name_pred)

    wb = openpyxl.load_workbook(shablon_path + '/' + new_name_pred)
    ws = wb['Разрез МО_ГП']
    rows = dataframe_to_rows(polic, index=False, header=False)
    index_col = [2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 0):
            ws.cell(row=r_idx, column=index_col[c_idx], value=value)

    ws = wb['Разрез МО_стац']
    rows = dataframe_to_rows(stac, index=False, header=False)
    index_col = [2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 0):
            ws.cell(row=r_idx, column=index_col[c_idx], value=value)

    ws = wb['Пред.отч_разрез МО_ГП']
    rows = dataframe_to_rows(polic_old, index=False, header=False)
    index_col = [2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 0):
            ws.cell(row=r_idx, column=index_col[c_idx], value=value)

    ws = wb['Пред.отч_разрез МО_стац']
    rows = dataframe_to_rows(stac_old, index=False, header=False)
    index_col = [2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 0):
            ws.cell(row=r_idx, column=index_col[c_idx], value=value)

    ws = wb['ФР_ГП']
    rows = dataframe_to_rows(covid_pol, index=False, header=False)
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 2):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['ФР_стац']
    rows = dataframe_to_rows(covid_stac, index=False, header=False)
    for r_idx, row in enumerate(rows, 7):
        for c_idx, value in enumerate(row, 2):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(shablon_path + '/' + new_name_pred)
    return shablon_path + '/' + new_name_pred
Esempio n. 15
0
def load_fr_death(a): 
    def fr_death_to_sql(df):
        send('admin','Обрезаю слишком длинные строки')
        df = df.apply(lambda x: x.loc[::].str[:255] )
        send('admin','Убираю Nan из таблицы')
        df = df.apply(lambda x: x.loc[::].str.replace('nan','') )
        send('admin','Отправляю в базу')
        df.to_sql('cv_input_fr_d_all_2',con,schema='dbo',if_exists='replace',index = False)
        send('admin','Запускаю процедуры')
        sql_execute("""
                EXEC   [dbo].[Insert_Table_cv_input_fr_d_all_2]
                EXEC   [dbo].[cv_from_d_all_to_d_covid]
                EXEC   [dbo].[cv_Load_FedReg_d_All]
                EXEC   [dbo].[cv_Load_FedReg_d_covid]
                    """)
        send('admin','Успешно загружено')
        return 1
    send('admin','Пришло время спокойных')
    search = search_file('fr_death')
    if search[0] and search[1]:
        send('admin','Найден файл:\n' + search[2].split('/')[-1] + '\n Сейчас мы его рассмотрим')
        check = check_file(search[2],'fr_death')
        if check[0]:
            send('admin','Похоже файл в порядке, попробую загрузить')
            df = pd.read_csv(search[2],header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python')
            fr_death_to_sql(df)
            return 1
        else:
            send('admin','Что-то с файлом ' + str(check))
            return 0
    else:
        if search[0]:
            send('admin','Давайте всё-таки работать с csv, конвертирую')
            file_csv = excel_to_csv(search[2]) 
            send('admin','Результат:\n' + file_csv.split('/')[-1])
            check = check_file(file_csv,'fr_death')
            if check[0]:
                send('admin','Теперь можно и загрузить в память')
                df = pd.read_csv(file_csv,header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python')
                fr_death_to_sql(df)
                return 1
            else:
                send('admin','Файл не прошёл проверку!\n' + check[1])
                return 0
        else:
            send('admin','Не найден файл умерших')
        return 0
Esempio n. 16
0
    def fr_to_sql(df):
        df  = df[df['Дата создания РЗ'] != '']
        del df ['Ведомственная принадлежность']
        del df ['Осложнение основного диагноза']
        # ==== Репорт о количестве выздоровевших =====
        report = pd.DataFrame()
        report.loc[0,'date_rows'] = pd.to_datetime(df['Дата создания РЗ'],format='%d.%m.%Y').max().date()
        report.loc[0,'value_name'] = 'Всего выздоровело от COVID'
        report.loc[0,'value_count'] = len(df[df['Исход заболевания'].isin(['Выздоровление']) & df['Диагноз'].isin(['U07.1'])])

        report.loc[1,'date_rows'] = pd.to_datetime(df['Дата создания РЗ'],format='%d.%m.%Y').max().date()
        report.loc[1,'value_name'] = 'Всего на амбулаторном лечении от COVID'
        report.loc[1,'value_count'] = len(df.loc[(df['Исход заболевания'] == '' ) \
                & (df['Диагноз'].isin(['U07.1','U07.2']) | df['Диагноз'].str.contains('J1[2-8]') ) \
                & (df['Вид лечения'].isin(['Амбулаторное лечение']))] )

        report.to_sql('values',con,schema='robo',index=False,if_exists='append')
        # ============================================
        send('admin','Файл в памяти, количество строк: ' + str(len(df)) )
        sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
        send('admin','Очистил input_fr')
        df.to_sql('cv_input_fr',con,schema='dbo',if_exists='append',index=False)
        send('admin','Загрузил input_fr, запускаю процедуру')
        sql_execute('EXEC [dbo].[cv_Load_FedReg]')
        sql_execute('EXEC [mz].[p_Recalculate_for_50_Report]')
        send('admin','Расчёт замечаний МЗ')
        if check_table('fedreg'):
            send('admin','Федеральный регистр успешно загружен')
            return 1
        else:
            send('admin','Произошла какая-то проблема с загрузкой фр')
            return 0
Esempio n. 17
0
def load_fr(a):
    def fr_to_sql(df):
        df  = df[df['Дата создания РЗ'] != '']
        del df ['Ведомственная принадлежность']
        del df ['Осложнение основного диагноза']
        # ==== Репорт о количестве выздоровевших =====
        report = pd.DataFrame()
        report.loc[0,'date_rows'] = pd.to_datetime(df['Дата создания РЗ'],format='%d.%m.%Y').max().date()
        report.loc[0,'value_name'] = 'Всего выздоровело от COVID'
        report.loc[0,'value_count'] = len(df[df['Исход заболевания'].isin(['Выздоровление']) & df['Диагноз'].isin(['U07.1'])])

        report.loc[1,'date_rows'] = pd.to_datetime(df['Дата создания РЗ'],format='%d.%m.%Y').max().date()
        report.loc[1,'value_name'] = 'Всего на амбулаторном лечении от COVID'
        report.loc[1,'value_count'] = len(df.loc[(df['Исход заболевания'] == '' ) \
                & (df['Диагноз'].isin(['U07.1','U07.2']) | df['Диагноз'].str.contains('J1[2-8]') ) \
                & (df['Вид лечения'].isin(['Амбулаторное лечение']))] )

        report.to_sql('values',con,schema='robo',index=False,if_exists='append')
        # ============================================
        send('admin','Файл в памяти, количество строк: ' + str(len(df)) )
        sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
        send('admin','Очистил input_fr')
        df.to_sql('cv_input_fr',con,schema='dbo',if_exists='append',index=False)
        send('admin','Загрузил input_fr, запускаю процедуру')
        sql_execute('EXEC [dbo].[cv_Load_FedReg]')
        sql_execute('EXEC [mz].[p_Recalculate_for_50_Report]')
        send('admin','Расчёт замечаний МЗ')
        if check_table('fedreg'):
            send('admin','Федеральный регистр успешно загружен')
            return 1
        else:
            send('admin','Произошла какая-то проблема с загрузкой фр')
            return 0
    send('admin','Я проснулся и хочу грузить фр!')
    search = search_file('fr')
    if search[0] and search[1]:
        send('admin','Вот нашёлся такой файлик:\n' + search[2].split('/')[-1])
        send('admin','Сейчас я его проверю...')
        check = check_file(search[2],'fr')
        if check[0]:
            send('admin','Файл прошёл проверку, начинаю грузить в память')
            df = pd.read_csv(search[2],header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python',encoding = 'utf-8')
            print(df.head(3))
            fr_to_sql(df)
            return 1
        else:
            send('admin','Файл не прошёл проверку!\n' + check[1])
            return 0
    else:
        if search[0]:
            send('admin','Нее... я не хочу работать с xlsx, щас конвертирую!')
            file_csv = excel_to_csv(search[2]) 
            send('admin','Результат:\n' + file_csv.split('/')[-1])
            check = check_file(file_csv,'fr')
            if check[0]:
                send('admin','Файл прошёл проверку, начинаю грузить в память')
                df = pd.read_csv(file_csv,header = check[3], usecols = check[2], na_filter = False, dtype = str, delimiter=';', engine='python',encoding = 'utf-8')
                fr_to_sql(df)
                return 0
            else:
                send('admin', 'Файл не прошёл проверку!\n' + check[1])
                return 0
        else:
            send('admin','Но я не нашёл файла федерального регистра (((')
            return 0
    return 1
Esempio n. 18
0
def regiz_load_to_base(a):
    def org_mis(ftp):
        sql = f"""SELECT LEFT([NameMIS], LEN([NameMIS]) - 1)
            FROM (
                SELECT mis.[NameMIS] + ', '
                    FROM [PNK_NCRN].[nsi].[MISMO] as mis
                    inner join [nsi].[Organization] as org
                    on (mis.[level1_key] = org.level1_key)
               where org.ftp_user = '******'
            FOR XML PATH ('')
          ) c ([NameMIS])"""
        try:
            mis = pd.read_sql(sql, con).iat[0, 0]
        except:
            return 'Не удалось узнать МИС'
        else:
            return str(mis)

    sql_execute("""
                TRUNCATE TABLE dbo.TempTableFromMO
                TRUNCATE TABLE nsi.Organization
            """)
    mo = pd.read_excel(get_dir('regiz_svod') + '/mo_directory.xlsx')
    mo1 = mo.rename(
        columns={
            'ftp_user': '******',
            'oid': 'OID',
            'level1_key': 'level1_key',
            'МО_краткое наименование': 'MONameSpr64',
            'MO': 'MOName',
            'MO_полное': 'MONameFull',
            'email': 'Email',
            'active': 'IsActive',
            'ИОГВ': 'IOGV'
        })

    mo1.to_sql('Organization',
               con,
               schema='nsi',
               if_exists='append',
               index=False)
    names = [
        'Номер истории болезни', 'Дата открытия СМО',
        'Признак амбулаторного СМО', 'СНИЛС врача'
    ]
    names_new = ['HistoryNumber', 'OpenDate', 'IsAmbulant', 'SnilsDoctor']
    path = get_dir('regiz') + '/ori.regiz*/_Входящие/[!~]*.xls'
    files = glob.glob(path) + glob.glob(path + 'x')
    list_ = []
    remove_files = []
    stat = pd.DataFrame()
    df = pd.DataFrame()

    for file in files:
        if os.path.getsize(file) == 0:
            continue
        other_files = str(glob.glob(file.rsplit('/', 1)[0] + '/*'))
        send('', file)
        if len(mo.loc[mo['ftp_user'] == file.split('/')[5], 'MO']):
            organization = mo.loc[mo['ftp_user'] == file.split('/')[5],
                                  'MO'].values[0]
        else:
            organization = 'Не определена'
        try:
            df = pd.read_excel(file, usecols=names, dtype=str)
        except KeyError:
            stat = stat.append(
                {
                    'MOName': organization,
                    'NameFile': file,
                    'CountRows': len(df),
                    'TextError':
                    'Файл является листом excel, не могу прочитать',
                    'OtherFiles': other_files,
                    'mis': org_mis(file.split('/')[5]),
                    'DateLoadFile': datetime.datetime.now(),
                    'InOrOut': 'IN'
                },
                ignore_index=True)

        except XLRDError:  # если это html файл
            try:
                df = pd.read_html(file)
            except ValueError:  # если не удалось распарсить html
                pass
                #send('',file)
            else:
                df = pd.concat(df)
                df = df[names].applymap(str)
                df.columns = names_new
                stat = stat.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': len(df),
                        'TextError': 'Файл HTMl удачно распарсен',
                        'OtherFiles': other_files,
                        'mis': org_mis(file.split('/')[5]),
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
        except ValueError as exc:  # Если не найдены колонки
            if str(exc) == r"File is not a recognized excel file":
                try:
                    df = pd.read_html(file)
                except ValueError:  # если не удалось распарсить html
                    send('', file)
                else:
                    if len(df) > 0:
                        df = pd.concat(df)
                        df = df[names].applymap(str)
                        df.columns = names_new
                        stat = stat.append(
                            {
                                'MOName': organization,
                                'NameFile': file,
                                'CountRows': len(df),
                                'TextError': 'Файл HTMl удачно распарсен',
                                'OtherFiles': other_files,
                                'mis': org_mis(file.split('/')[5]),
                                'DateLoadFile': datetime.datetime.now(),
                                'InOrOut': 'IN'
                            },
                            ignore_index=True)
                    else:
                        stat = stat.append(
                            {
                                'MOName': organization,
                                'NameFile': file,
                                'CountRows': 0,
                                'TextError': 'Файл HTMl не удалось распарсить',
                                'OtherFiles': other_files,
                                'mis': org_mis(file.split('/')[5]),
                                'DateLoadFile': datetime.datetime.now(),
                                'InOrOut': 'IN'
                            },
                            ignore_index=True)
            elif str(
                    exc
            ) == "Excel file format cannot be determined, you must specify an engine manually.":
                stat = stat.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': 0,
                        'TextError': 'Файл HTMl не удалось распарсить',
                        'OtherFiles': other_files,
                        'mis': org_mis(file.split('/')[5]),
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
            else:
                try:
                    df = pd.read_excel(file, usecols=names_new, dtype=str)
                except:
                    if len(pd.read_excel(file).columns) == 4:
                        for i in range(10):  # Ищем по строкам
                            try:
                                df = pd.read_excel(file,
                                                   usecols=names,
                                                   skiprows=i,
                                                   dtype=str)
                            except:
                                if i == 9:
                                    stat = stat.append(
                                        {
                                            'MOName': organization,
                                            'NameFile': file,
                                            'CountRows': 0,
                                            'TextError':
                                            'Не найдена одна из колонок',
                                            'OtherFiles': other_files,
                                            'mis': org_mis(file.split('/')[5]),
                                            'DateLoadFile':
                                            datetime.datetime.now(),
                                            'InOrOut': 'IN'
                                        },
                                        ignore_index=True)
                                else:
                                    pass
                            else:
                                df.columns = names_new
                                stat = stat.append(
                                    {
                                        'MOName':
                                        organization,
                                        'NameFile':
                                        file,
                                        'CountRows':
                                        len(df),
                                        'TextError':
                                        'Файл прочитан, но пришлось поискать шапку на строке номер '
                                        + str(i),
                                        'OtherFiles':
                                        other_files,
                                        'mis':
                                        org_mis(file.split('/')[5]),
                                        'DateLoadFile':
                                        datetime.datetime.now(),
                                        'InOrOut':
                                        'IN'
                                    },
                                    ignore_index=True)
                                break
                    if not len(df):
                        stat = stat.append(
                            {
                                'MOName': organization,
                                'NameFile': file,
                                'CountRows': 0,
                                'TextError': 'Файл не удалось прочитать',
                                'OtherFiles': other_files,
                                'mis': org_mis(file.split('/')[5]),
                                'DateLoadFile': datetime.datetime.now(),
                                'InOrOut': 'IN'
                            },
                            ignore_index=True)
                else:
                    stat = stat.append(
                        {
                            'MOName': organization,
                            'NameFile': file,
                            'CountRows': len(df),
                            'TextError':
                            'Файл прочитан, но он уже был когда-то обработан',
                            'OtherFiles': other_files,
                            'mis': org_mis(file.split('/')[5]),
                            'DateLoadFile': datetime.datetime.now(),
                            'InOrOut': 'IN'
                        },
                        ignore_index=True)
        else:
            df.columns = names_new
            stat = stat.append(
                {
                    'MOName': organization,
                    'NameFile': file,
                    'CountRows': len(df),
                    'TextError': 'Файл прочитан без проблем',
                    'OtherFiles': other_files,
                    'mis': org_mis(file.split('/')[5]),
                    'DateLoadFile': datetime.datetime.now(),
                    'InOrOut': 'IN'
                },
                ignore_index=True)

        if len(df):
            if len(mo.loc[mo['ftp_user'] == file.split('/')[5], 'level1_key']):
                df['LPU_level1_key'] = mo.loc[mo['ftp_user'] ==
                                              file.split('/')[5],
                                              'level1_key'].values[0]
                key = df['LPU_level1_key']
                df.drop(labels=['LPU_level1_key'], axis=1, inplace=True)
                df.insert(0, 'LPU_level1_key', key)
                list_.append(df)
                remove_files.append(file)
                #new_file = file.rsplit('/',2)[0] + '/Архив/время_'+ datetime.datetime.now().strftime('%d.%m.%Y_%H-%M') + '.xlsx'
                #df.to_excel(new_file, index=False)
        df = df[0:0]

    stat.to_sql('JrnLoadFiles',
                con,
                schema='logs',
                if_exists='append',
                index=False)
    try:
        svod = pd.concat(list_)
    except ValueError:
        svod_file = get_dir('regiz_svod') + '/' + datetime.datetime.now(
        ).strftime('%d.%m.%Y_%H-%M') + ' свод номеров для проверки.xlsx'
        with pd.ExcelWriter(svod_file) as writer:
            stat.to_excel(writer, sheet_name='статистика', index=False)
        send_file('info', svod_file)
        return svod_file
    else:
        svod.index = range(1, len(svod) + 1)
        svod = svod.apply(lambda x: x.loc[::].str[:255])
        svod.to_sql('TempTableFromMO',
                    con,
                    schema='dbo',
                    if_exists='append',
                    index=False)
        sql_execute('EXEC [dbo].[Insert_Table_FileMO]')
        svod_file = get_dir('regiz_svod') + '/' + datetime.datetime.now(
        ).strftime('%d.%m.%Y_%H-%M') + ' свод номеров для проверки.xlsx'
        with pd.ExcelWriter(svod_file) as writer:
            svod.to_excel(writer, sheet_name='номера', index=False)
            stat.to_excel(writer, sheet_name='статистика', index=False)

        send_file('info', svod_file)
        for file in remove_files:
            new_file = file.rsplit(
                '/', 2)[0] + '/Архив/время_' + datetime.datetime.now(
                ).strftime('%d.%m.%Y_%H-%M') + '_' + file.rsplit('/', 1)[1]
            try:
                os.replace(file, new_file)
            except:
                pass
        return svod_file
Esempio n. 19
0
def regiz_load_to_base_new_old(a):
    sql_execute("""
                TRUNCATE TABLE dbo.TempTableFromMO
                TRUNCATE TABLE nsi.Organization
            """)
    mo = pd.read_excel(get_dir('regiz_svod') + '/mo_directory.xlsx')
    names = [
        'Номер истории болезни', 'Дата открытия СМО',
        'Признак амбулаторного СМО', 'СНИЛС врача'
    ]
    path = get_dir('regiz') + '/ori.regiz*/_Входящие/*.xls'
    files = glob.glob(path) + glob.glob(path + 'x')
    list_ = []
    remove_files = []
    statistic = pd.DataFrame()
    df = pd.DataFrame()

    def read_file(file):
        other_files = str(glob.glob(file.rsplit('/', 1)[0] + '/*'))
        if len(mo.loc[mo['ftp_user'] == file.split('/')[5], 'MO']):
            organization = mo.loc[mo['ftp_user'] == file.split('/')[5],
                                  'MO'].values[0]
        else:
            organization = 'Не определена'
        try:
            df = pd.read_excel(file)
        except:
            try:
                df = pd.read_html(file)
                df = pd.concat(df)
                return df
            except:
                statistic.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': 0,
                        'TextError': 'Файл не читается совсем',
                        'OtherFiles': other_files,
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
                return pd.DataFrame(None)
        else:
            if len(df) < 2:
                statistic.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': 0,
                        'TextError': 'Файл пустой',
                        'OtherFiles': other_files,
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
                return pd.DataFrame(None)
            if list(df.columns) == [
                    'Unnamed: 0', 'LPU_level1_key', 'HistoryNumber',
                    'OpenDate', 'IsAmbulant', 'SnilsDoctor'
            ]:
                del df['Unnamed: 0']
                return df
            if list(df.columns) == [
                    'Номер истории болезни', 'Дата открытия СМО',
                    'Признак амбулаторного СМО', 'СНИЛС врача'
            ]:
                return df
            check = check_table(file, names)
            if not check[0]:
                df = pd.read_excel(file,
                                   header=check[3],
                                   usecols=check[2],
                                   dtype=str)
                del df['Unnamed: 0']
                return df
            else:
                statistic.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': 0,
                        'TextError': chek[1],
                        'OtherFiles': other_files,
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
                return pd.DataFrame(None)

    def load_file(df, file):
        if len(mo.loc[mo['ftp_user'] == file.split('/')[5], 'MO']):
            organization = mo.loc[mo['ftp_user'] == file.split('/')[5],
                                  'MO'].values[0]
        else:
            organization = 'Неизвестно'

        if list(df.columns) == [
                'LPU_level1_key', 'HistoryNumber', 'OpenDate', 'IsAmbulant',
                'SnilsDoctor'
        ]:
            df.to_sql('TempTableFromMO',
                      con,
                      schema='dbo',
                      if_exists='append',
                      index=False)
            statistic.append(
                {
                    'MOName': organization,
                    'NameFile': file,
                    'CountRows': len(df),
                    'TextError': 'Успешно загружен повторно',
                    'OtherFiles': '',
                    'DateLoadFile': datetime.datetime.now(),
                    'InOrOut': 'IN'
                },
                ignore_index=True)
            return 1

        for col in df.columns:
            df[col.replace(' ', '')] = df[col]
            del df[col]

        if len(mo.loc[mo['ftp_user'] == file.split('/')[5], 'level1_key']):
            df['level1_key'] = mo.loc[mo['ftp_user'] == file.split('/')[5],
                                      'level1_key'].values[0]
            key = df['level1_key']
            df.drop(labels=['level1_key'], axis=1, inplace=True)
            df.insert(0, 'level1_key', key)
            df.rename(columns={
                'level1_key': 'LPU_level1_key',
                'Номеристорииболезни': 'HistoryNumber',
                'ДатаоткрытияСМО': 'OpenDate',
                'ПризнакамбулаторногоСМО': 'IsAmbulant',
                'СНИЛСврача': 'SnilsDoctor'
            },
                      inplace=True)
            try:
                df.to_sql('TempTableFromMO',
                          con,
                          schema='dbo',
                          if_exists='append',
                          index=False)
            except:
                statistic.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': 0,
                        'TextError': 'Не удалось загрузить файл в базу',
                        'OtherFiles': '',
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)
                return 1
            else:
                statistic.append(
                    {
                        'MOName': organization,
                        'NameFile': file,
                        'CountRows': len(df),
                        'TextError': 'Успешно загружен',
                        'OtherFiles': '',
                        'DateLoadFile': datetime.datetime.now(),
                        'InOrOut': 'IN'
                    },
                    ignore_index=True)

                new_file = file.rsplit(
                    '/', 2)[0] + '/Архив/время_' + datetime.datetime.now(
                    ).strftime('%d.%m.%Y_%H-%M') + '.xlsx'
                df.to_excel(new_file, index=False)
                remove_files.append(file)
                list_.append(df)
                return 1
        else:
            statistic.append(
                {
                    'MOName': organization,
                    'NameFile': file,
                    'CountRows': 0,
                    'TextError': 'Не определен левел 1 кей',
                    'OtherFiles': '',
                    'DateLoadFile': datetime.datetime.now(),
                    'InOrOut': 'IN'
                },
                ignore_index=True)
            return 1

    for file in files:
        try:
            df = read_file(file)
        except:
            send('', 'Ошибка при чтении ' + file)
        if len(df):
            try:
                load_file(df, file)
            except:
                send('', 'Ошибка при загрузке ' + file)

    send('', 'Приступаем к сборке свода')

    mo.rename(columns={
        'ftp_user': '******',
        'oid': 'OID',
        'level1_key': 'level1_key',
        'МО_краткое наименование': 'MONameSpr64',
        'MO': 'MOName',
        'MO_полное': 'MONameFull',
        'email': 'Email',
        'active': 'IsActive'
    },
              inplace=True)
    try:
        svod = pd.concat(list_)
    except ValueError:
        mo.to_sql('Organization',
                  con,
                  schema='nsi',
                  if_exists='append',
                  index=False)
        statistic.to_sql('JrnLoadFiles',
                         con,
                         schema='logs',
                         if_exists='append',
                         index=False)
        try:
            f = open(get_dir('regiz_svod') + '/log.txt', 'a')
        except:
            pass
        else:
            with f:
                f.write('Региз нет новых файлов ' +
                        datetime.datetime.now().strftime('%d.%m.%Y_%H-%M') +
                        '\n')
        svod_file = get_dir('regiz_svod') + '/' + datetime.datetime.now(
        ).strftime('%d.%m.%Y_%H-%M') + ' свод номеров для проверки.xlsx'
        with pd.ExcelWriter(svod_file) as writer:
            statistic.to_excel(writer, sheet_name='статистика', index=False)
        return svod_file
    else:
        svod.index = range(1, len(svod) + 1)
        svod_file = get_dir('regiz_svod') + '/' + datetime.datetime.now(
        ).strftime('%d.%m.%Y_%H-%M') + ' свод номеров для проверки.xlsx'
        with pd.ExcelWriter(svod_file) as writer:
            svod.to_excel(writer, sheet_name='номера', index=False)
            statistic.to_excel(writer, sheet_name='статистика', index=False)

        mo.to_sql('Organization',
                  con,
                  schema='nsi',
                  if_exists='append',
                  index=False)
        statistic.to_sql('JrnLoadFiles',
                         con,
                         schema='logs',
                         if_exists='append',
                         index=False)
        sql_execute('EXEC [dbo].[Insert_Table_FileMO]')

        try:
            f = open(get_dir('regiz_svod') + '/log.txt', 'a')
        except:
            pass
        else:
            with f:
                f.write("  Региз файлы загружены в базу " +
                        datetime.datetime.now().strftime('%d.%m.%Y_%H-%M') +
                        '\n')
        for file in remove_files:
            try:
                os.remove(file)
            except:
                pass
        return svod_file
Esempio n. 20
0
def load_report_vp_and_cv(a): 
    def open_save(file): 
        pass
    def load_file_mo(file):
        nameMO = pd.read_excel(file, sheet_name= 'Титул', header =3, usecols='H', nrows = 1).iloc[0,0]
        df = pd.read_excel(file, sheet_name= 'Данные1', header =6, usecols='C:AH', nrows = 1)
        df = df.fillna(0)
        df['nameMO'] = nameMO
        os.replace(file, path + '/' + os.path.basename(file))
        return df 
    def check_data_table(name):
        sql=f"""
            IF (EXISTS (SELECT * FROM {name})) 
                SELECT 1 ELSE SELECT 0 """
        return pd.read_sql(sql,con).iat[0,0]
    send('epid','Продготовка к отчету Мониторинг ВП и COVID')
    files = glob.glob(get_dir('VP_CV') + '/из_почты/[!~$]*.xls*')
    if len(files) == 0:
        raise my_except('Папка пустая!')
    path = get_dir('VP_CV') + '/' + datetime.datetime.now().strftime("%Y%m%d")
    if os.path.exists(path):
        pass
    else:
        try:
            os.mkdir(path)
        except OSError:
            raise my_except('не смог создать папку') 
    list_=[]
    excel = pd.DataFrame()
    for file in files:
        try:
            excel = load_file_mo(file)
        except:
            open_save(file)
            try:
                excel = load_file_mo(file)
            except:
                send('epid','не обработался следующий файл \n'+ file.split('/')[-1])
            else:
                list_.append(excel)
        else:
            list_.append(excel)
    if len(list_):
        df = pd.concat(list_)
    else:
        raise my_except('Не один файл не обработался')
    df = df.set_axis(['vp_03_Power_Count_Departments','vp_04_Power_Count_Allocated_All','vp_05_Power_Count_Allocated','vp_06_Power_Count_Reanimation_All','vp_07_Power_Count_Reanimation','vp_08_Hospital_All','vp_09_Hospital_Day','vp_10_Hospital_Hard_All','vp_11_Hospital_Hard_Reaniamation','vp_12_Hospital_Hard_Ivl','vp_13_ReceivedAll','vp_14_ReceivedDay','vp_15_DischargedAll','vp_16_DischargedDay','vp_17_DiedAll','vp_18_DiedDay','cv_19_Power_Count_Departments','cv_20_Power_Count_Allocated_All','cv_21_Power_Count_Allocated','cv_22_Power_Count_Reanimation_All','cv_23_Power_Count_Reanimation','cv_24_Hospital_All','cv_25_Hospital_Day','cv_26_Hospital_Hard_All','cv_27_Hospital_Hard_Reaniamation','cv_28_Hospital_Hard_Ivl','cv_29_ReceivedAll','cv_30_ReceivedDay','cv_31_DischargedAll','cv_32_DischargedDay','cv_33_DiedAll','cv_34_DiedDay','nameMO'], axis=1, inplace=False)
    try:
        df.to_sql('HistoryFileMO',con,schema='mon_vp',index = False,if_exists='append')
    except:
        raise my_except('не удалось загрузить в базу!')
    if check_data_table('mon_vp.v_DebtorsReport'):
        return short_report('SELECT * FROM mon_vp.v_DebtorsReport')
    else:
        #==========  тут мы грузим исходные данные в первую вкладку отчета
        df = pd.read_sql('SELECT * FROM mon_vp.v_GrandReport' ,con)
        df1 = df.loc[df.typeMO==1].sort_values(["numSort"]).drop('typeMO',1).drop('numSort',1)
        df2 = df.loc[df.typeMO==2].sort_values(["numSort"]).drop('typeMO',1).drop('numSort',1)
        shablon = get_dir('help') + '/СводОбщий_' + (datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%d %m %Y") +'.xlsx'
        shutil.copyfile(get_dir('help') + '/шаблон Мониторинг ВП.xlsx', shablon)

        wb= openpyxl.load_workbook(shablon)
        ws= wb['Данные']
        ws.cell(row=1, column=2, value=(datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%d.%m.%Y"))

        rows = dataframe_to_rows(df1,index=False, header=False)
        for r_idx, row in enumerate(rows,9):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        rows = dataframe_to_rows(df2,index=False, header=False)
        for r_idx, row in enumerate(rows,73):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        wb.save(shablon)

        #  ========== сейчас мы загрузим и сохраним данные по проверкам

        df=pd.read_sql("exec mon_vp.p_CheckMonitorVpAndCovid",con)
        part_one = df.iloc[:,range(26)]
        part_two = df.iloc[:,[0] + list(range(26,58,1)) ]

        wb= openpyxl.load_workbook(shablon)
        ws= wb['Проверка']

        rows = dataframe_to_rows(part_one,index=False, header=False)
        for r_idx, row in enumerate(rows,3):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)
        wb.save(shablon)

        wb= openpyxl.load_workbook(shablon)
        ws= wb['Разница']

        rows = dataframe_to_rows(part_two,index=False, header=False)
        for r_idx, row in enumerate(rows,7):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        wb.save(shablon)
        try:
            shutil.copyfile(shablon, get_dir('VP_CV') + '/' + shablon.split('/')[-1])
        except PermissionError:
            raise my_except('Закройте файлик! Не могу скопировать')
        return shablon
Esempio n. 21
0
def sbor_death_week_svod(a):
    #date_end   = '2022-01-05'
    #date_start = '2021-12-23'
    date_end = (datetime.datetime.today() +
                relativedelta.relativedelta(weeks=-1, weekday=2)).date()
    date_start = date_end - datetime.timedelta(days=6)

    path = get_dir(
        'death_week') + f'/с {date_start} по {date_end}/[!~]*[!вод]*.xlsx'
    send('', path)
    df = pd.DataFrame()
    list_ = []
    for excel in glob.glob(path):
        chast = pd.read_excel(excel)
        chast['file'] = excel.rsplit('/', 1)[1]
        list_.append(chast)
    df = pd.concat(list_)
    df_file = get_dir('temp') + '/df_file.xlsx'
    df.to_excel(df_file)
    #send('',str(len(df)) + ' , ' + str(len(glob.glob(path))))
    df = df.loc[~df['Медицинская организация'].isnull()]
    df['Ndays'] = (
        pd.to_datetime(df['Дата госпитализации'], errors='coerce') -
        pd.to_datetime(df['Дата начала заболевания'], errors='coerce')).dt.days
    df = df.loc[~df['ФИО'].isnull()]
    df.index = range(len(df))
    cheak_diagnoz = df[['ФИО', 'Дата рождения',
                        'Посмертный диагноз']].to_sql('cheak_diagnoz',
                                                      con,
                                                      schema='tmp',
                                                      if_exists='replace',
                                                      index=True)

    sql = """select c.*,fr.[Посмертный диагноз] as 'Посмертный диагноз новый' from (
    select * from tmp.cheak_diagnoz ) as c
    left join (select * from robo.v_FedReg where [Исход заболевания] = 'Смерть') as fr
    on (c.[ФИО] = fr.[ФИО] and c.[Дата рождения] = fr.[Дата рождения])
    where  c.[Посмертный диагноз] <> fr.[Посмертный диагноз]
    order by [index]
    """

    cheak = pd.read_sql(sql, con)

    for i in range(len(cheak)):
        index = int(cheak.at[i, 'index'])
        diagnoz = cheak.at[i, 'Посмертный диагноз новый']
        df.loc[index, 'Посмертный диагноз'] = diagnoz
    send('', f"exec robo.death_week_value'{date_start}','{date_end}'")
    svod = pd.read_sql(
        f"exec robo.death_week_value'{date_start}','{date_end}'", con)
    svod = svod.fillna(0)

    MOs = svod['Медицинская организация'].unique()

    for org in df['Медицинская организация'].unique():
        if not org in MOs:
            send('epid', 'Неправильная организация! \n' + org)

    for MO in MOs:
        svod.loc[svod['Медицинская организация'].isin([MO]),'J'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Факт обращения за медицинской помощью на амбулаторном этапе (да/нет)'].isin(['да','Да']) &\
                                                        df['Посмертный диагноз'].isin(['U07.1'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'K'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Факт обращения за медицинской помощью на амбулаторном этапе (да/нет)'].isin(['да','Да']) &\
                                                        df['Посмертный диагноз'].isin(['U07.2'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'L'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Факт обращения за медицинской помощью на амбулаторном этапе (да/нет)'].isin(['да','Да']) &\
                                                        df['Посмертный диагноз'].isin(['J18.9'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'M'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Факт получения бесплатной лекарственной терапии (БЛТ) на амбулаторном этапе (да/нет)'].isin(['да','Да']) &\
                                                        df['Посмертный диагноз'].isin(['U07.1'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'N'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Факт получения бесплатной лекарственной терапии (БЛТ) на амбулаторном этапе (да/нет)'].isin(['да','Да']) &\
                                                        df['Посмертный диагноз'].isin(['U07.2'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'O'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) & (df['Ndays'] > 5)
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'P'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) & (df['Ndays'] > 5)
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'Q'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) & (df['Ndays'] > 5)
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'R'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'S'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'T'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'U'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) & \
                                                        df['Поступление в ОРИТ  при госпитализации (да/нет)'].isin(['да','Да']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'V'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) & \
                                                        df['Поступление в ОРИТ  при госпитализации (да/нет)'].isin(['да','Да']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'W'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) & \
                                                        df['Поступление в ОРИТ  при госпитализации (да/нет)'].isin(['да','Да']) \
                                                        & (df['Степень тяжести состояния при госпитализации (легкая, ср.тяжести, тяжелая)'].str.contains('яжел') )
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'X'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) & \
                                                        df['Факт выполнения КТ на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'Y'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) & \
                                                        df['Факт выполнения КТ на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'Z'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) & \
                                                        df['Факт выполнения КТ на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AA'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) & \
                                                        df['Факт выполнения ПЦР-SARS-CoV-2  на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AB'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) & \
                                                        df['Факт выполнения ПЦР-SARS-CoV-2  на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AC'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) & \
                                                        df['Факт выполнения ПЦР-SARS-CoV-2  на амбулаторном этапе (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AP'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.1']) & \
                                                        df['Факт получения антицитокиновой терапии в стационаре (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AQ'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['U07.2']) & \
                                                        df['Факт получения антицитокиновой терапии в стационаре (да/нет)'].isin(['да','Да'])
                                                                         ])
        svod.loc[svod['Медицинская организация'].isin([MO]),'AR'] = len(df[df['Медицинская организация'].isin([MO]) & \
                                                        df['Посмертный диагноз'].isin(['J18.9']) & \
                                                        df['Факт получения антицитокиновой терапии в стационаре (да/нет)'].isin(['да','Да'])
                                                                         ])
    svod.rename(columns={
        'Умерло за истекшую неделю':
        'Умерло за истекшую неделю (учитываются пациенты, по которым запись о летальном исходе внесена в ФР в течение отчетной недели)',
        'Из них: Основная причина смерти COVID-19':
        'Из них (по данным ПАЗ или по данным Посмертного клинического диагноза): основная причина смерти - COVID-19  U07.1',
        'Из них: U07.2':
        'Из них, U07.2',
        'Из них: Внебольничные пневмонии':
        'Из них, Внебольничные пневмонии',
        'Умерших в возрасте до 60 лет':
        'Количество умерших в возрасте до 60 лет (от всех заболеваний)',
        'Умерших в возрасте до 60 лет (u07.1)':
        'Количество умерших в возрасте до 60 лет (U07.1)',
        'Умерших в возрасте до 60 лет (u07.2)':
        'Количество умерших в возрасте до 60 лет (U07.2)',
        'Умерших в возрасте до 60 лет (пневмонии)':
        'Количество умерших в возрасте до 60 лет (пневмонии)',
        'J':
        'Количество пациентов, умерших от U07.1, обращавшихся за медицинской помощью на амбулаторном этапе',
        'K':
        'Количество пациентов, умерших от U07.2, обращавшихся за медицинской помощью на амбулаторном этапе',
        'L':
        'Количество пациентов, умерших от внебольничной пневмонии, обращавшихся за медицинской помощью на амбулаторном этапе',
        'M':
        'Количество пациентов, умерших от U07.1, получавших бесплатное лекарственное лечение амбулаторно',
        'N':
        'Количество пациентов, умерших от U07.2, получавших бесплатное лекарственное лечение амбулаторно',
        'O':
        'Количество пациентов, умерших от U07.1, поступивших в стационар после 5  дней после начала заболевания',
        'P':
        'Количество пациентов, умерших от U07.2, поступивших в стационар после 5 дней после начала заболевания',
        'Q':
        'Количество пациентов, умерших от внебольничной пневмонии, поступивших в стационар после 5  дней после начала заболевания',
        'R':
        'Количество пациентов, умерших от U07.1, поступивших в стационар в тяжелом состоянии',
        'S':
        'Количество пациентов, умерших от U07.2, поступивших в стационар в тяжелом состоянии',
        'T':
        'Количество пациентов, умерших от ВБП, поступивших в стационар в тяжелом состоянии',
        'U':
        'Количество пациентов, умерших от U07.1, поступивших в стационар в тяжелом состоянии в ОРИТ',
        'V':
        'Количество пациентов, умерших от U07.2, поступивших в стационар в тяжелом состоянии в ОРИТ',
        'W':
        'Количество пациентов, умерших от ВБП, поступивших в стационар в тяжелом состоянии в ОРИТ',
        'X':
        'Количество пациентов, умерших от U07.1, которым на амбулаторном этапе выполнялась КТ',
        'Y':
        'Количество пациентов, умерших от U07.2, которым на амбулаторном этапе выполнялась КТ',
        'Z':
        'Количество пациентов, умерших от ВБП, которым на амбулаторном этапе выполнялась КТ',
        'AA':
        'Количество пациентов, умерших от U07.1, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2',
        'AB':
        'Количество пациентов, умерших от U07.2, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2',
        'AC':
        'Количество пациентов, умерших от ВБП, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2',
        'Умершие от U07.1 имеющие СД':
        'Количество пациентов, умерших от U07.1, имеющих СД',
        'Умершие от U07.2 имеющие СД':
        'Количество пациентов, умерших от U07.2, имеющих СД',
        'Умершие от ВПБ имеющие СД':
        'Количество пациентов, умерших от ВБП, имеющих СД',
        'Умершие от U07.1 имеющие АГ':
        'Количество пациентов, умерших от U07.1, имеющих АГ',
        'Умершие от U07.2 имеющие АГ':
        'Количество пациентов, умерших от U07.2, имеющих АГ',
        'Умершие от ВПБ имеющие АГ':
        'Количество пациентов, умерших от ВБП, имеющих АГ',
        'Умершие от U07.1 имеющие ИБС':
        'Количество пациентов, умерших от U07.1, имеющих ИБС',
        'Умершие от U07.2 имеющие ИБС':
        'Количество пациентов, умерших от U07.2, имеющих ИБС',
        'Умершие от ВПБ имеющие ИБС':
        'Количество пациентов, умерших от ВБП, имеющих ИБС',
        'Умершие от U07.1 имеющие ожирение':
        'Количество пациентов, умерших от U07.1, имеющих ожирение',
        'Умершие от U07.2 имеющие ожирение':
        'Количество пациентов, умерших от U07.2, имеющих ожирение',
        'Умершие от ВПБ имеющие ожирение':
        'Количество пациентов, умерших от ВБП, имеющих ожирение',
        'AP':
        'Количество пациентов, умерших от U07.1, получавших в стационаре антицитокиновую терапию (АЦТ)',
        'AQ':
        'Количество пациентов, умерших от U07.2, получавших в стационаре АЦТ',
        'AR':
        'Количество пациентов, умерших от ВБП, получавших в стационаре АЦТ'
    },
                inplace=True)

    sp = pd.DataFrame()

    summ =  svod['Из них (по данным ПАЗ или по данным Посмертного клинического диагноза): основная причина смерти - COVID-19  U07.1'].sum() \
                + svod['Из них, U07.2'].sum() + svod['Из них, Внебольничные пневмонии'].sum()

    def add_stroka_one(name, u071, u072, vpb):
        k = len(sp)
        sp.loc[k, 'Столбец'] = name
        sp.loc[k, 'Всего'] = u071 + u072 + vpb
        sp.loc[k, 'U07.1'] = u071
        sp.loc[k, 'U07.1 (процент)'] = round(100 * u071 / summ, 1)
        sp.loc[k, 'U07.2'] = u072
        sp.loc[k, 'U07.2 (процент)'] = round(100 * u072 / summ, 1)
        sp.loc[k, 'Пневмонии'] = vpb
        sp.loc[k, 'Пневмонии (процент)'] = round(100 * vpb / summ, 1)

    def add_stroka(name, u071, u072, vpb):
        k = len(sp)
        sp.loc[k, 'Столбец'] = name
        sp.loc[k, 'Всего'] = u071 + u072 + vpb
        sp.loc[k, 'U07.1'] = u071
        sp.loc[k, 'U07.1 (процент)'] = round(100 * u071 / sp.at[0, 'U07.1'], 1)
        sp.loc[k, 'U07.2'] = u072
        sp.loc[k, 'U07.2 (процент)'] = round(100 * u072 / sp.at[0, 'U07.2'], 1)
        sp.loc[k, 'Пневмонии'] = vpb
        sp.loc[k, 'Пневмонии (процент)'] = round(
            100 * vpb / sp.at[0, 'Пневмонии'], 1)

    def add_stroka_free(name, u071, u072):
        k = len(sp)
        sp.loc[k, 'Столбец'] = name
        sp.loc[k, 'Всего'] = u071 + u072
        sp.loc[k, 'U07.1'] = u071
        sp.loc[k, 'U07.1 (процент)'] = round(100 * u071 / sp.at[2, 'U07.1'], 1)
        sp.loc[k, 'U07.2'] = u072
        sp.loc[k, 'U07.2 (процент)'] = round(100 * u072 / sp.at[2, 'U07.2'], 1)

    add_stroka_one(
        'Умерли U07.1, U07.2, пневмонии за неделю', svod[
            'Из них (по данным ПАЗ или по данным Посмертного клинического диагноза): основная причина смерти - COVID-19  U07.1']
        .sum(), svod['Из них, U07.2'].sum(),
        svod['Из них, Внебольничные пневмонии'].sum())

    add_stroka(
        'Умерших в возрасте до 60 лет',
        svod['Количество умерших в возрасте до 60 лет (U07.1)'].sum(),
        svod['Количество умерших в возрасте до 60 лет (U07.2)'].sum(),
        svod['Количество умерших в возрасте до 60 лет (пневмонии)'].sum())

    add_stroka(
        'Обращались за медицинской помощью на догоспитальном этапе', svod[
            'Количество пациентов, умерших от U07.1, обращавшихся за медицинской помощью на амбулаторном этапе']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, обращавшихся за медицинской помощью на амбулаторном этапе']
        .sum(), svod[
            'Количество пациентов, умерших от внебольничной пневмонии, обращавшихся за медицинской помощью на амбулаторном этапе']
        .sum())

    add_stroka_free(
        'Получавшие бесплатную лекарственную терапию', svod[
            'Количество пациентов, умерших от U07.1, получавших бесплатное лекарственное лечение амбулаторно']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, получавших бесплатное лекарственное лечение амбулаторно']
        .sum())

    add_stroka(
        'Поступили через 5 дней и более от начала заболевания', svod[
            'Количество пациентов, умерших от U07.1, поступивших в стационар после 5  дней после начала заболевания']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, поступивших в стационар после 5 дней после начала заболевания']
        .sum(), svod[
            'Количество пациентов, умерших от внебольничной пневмонии, поступивших в стационар после 5  дней после начала заболевания']
        .sum())

    add_stroka(
        'Поступили в тяжелом состоянии', svod[
            'Количество пациентов, умерших от U07.1, поступивших в стационар в тяжелом состоянии']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, поступивших в стационар в тяжелом состоянии']
        .sum(), svod[
            'Количество пациентов, умерших от ВБП, поступивших в стационар в тяжелом состоянии']
        .sum())

    add_stroka(
        'Поступили в тяжелом состоянии (поступили в ОРИТ)', svod[
            'Количество пациентов, умерших от U07.1, поступивших в стационар в тяжелом состоянии в ОРИТ']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, поступивших в стационар в тяжелом состоянии в ОРИТ']
        .sum(), svod[
            'Количество пациентов, умерших от ВБП, поступивших в стационар в тяжелом состоянии в ОРИТ']
        .sum())

    add_stroka(
        'Выполнялась КТ на амбулаторном этапе', svod[
            'Количество пациентов, умерших от U07.1, которым на амбулаторном этапе выполнялась КТ']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, которым на амбулаторном этапе выполнялась КТ']
        .sum(), svod[
            'Количество пациентов, умерших от ВБП, которым на амбулаторном этапе выполнялась КТ']
        .sum())
    add_stroka(
        'Выполнялась ПЦР на амбулаторном этапе', svod[
            'Количество пациентов, умерших от U07.1, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2']
        .sum(), svod[
            'Количество пациентов, умерших от ВБП, которым на амбулаторном этапе выполнялась ПЦР-SARS-CoV-2']
        .sum())

    add_stroka(
        'Получали антицитокиновую терапию', svod[
            'Количество пациентов, умерших от U07.1, получавших в стационаре антицитокиновую терапию (АЦТ)']
        .sum(), svod[
            'Количество пациентов, умерших от U07.2, получавших в стационаре АЦТ']
        .sum(), svod[
            'Количество пациентов, умерших от ВБП, получавших в стационаре АЦТ']
        .sum())

    add_stroka(
        'Сопутствующая ИБС',
        svod['Количество пациентов, умерших от U07.1, имеющих ИБС'].sum(),
        svod['Количество пациентов, умерших от U07.2, имеющих ИБС'].sum(),
        svod['Количество пациентов, умерших от ВБП, имеющих ИБС'].sum())

    add_stroka(
        'Сопутствующий СД',
        svod['Количество пациентов, умерших от U07.1, имеющих СД'].sum(),
        svod['Количество пациентов, умерших от U07.2, имеющих СД'].sum(),
        svod['Количество пациентов, умерших от ВБП, имеющих СД'].sum())

    add_stroka(
        'Сопутствующий артериальная гипертония',
        svod['Количество пациентов, умерших от U07.1, имеющих АГ'].sum(),
        svod['Количество пациентов, умерших от U07.2, имеющих АГ'].sum(),
        svod['Количество пациентов, умерших от ВБП, имеющих АГ'].sum())

    add_stroka(
        'Сопутствующий ожирение',
        svod['Количество пациентов, умерших от U07.1, имеющих ожирение'].sum(),
        svod['Количество пациентов, умерших от U07.2, имеющих ожирение'].sum(),
        svod['Количество пациентов, умерших от ВБП, имеющих ожирение'].sum())
    # ========== Расчёт районов ==================

    empty = ''
    for i in df.loc[df['Район проживания'].isnull()].index:
        empty += 'Пустой район в ' + str(
            df.at[i, 'Медицинская организация']) + '\n'

    if len(empty):
        send('epid', empty)
    df['Район проживания'] = df['Район проживания'].fillna('Пустое значение')
    df['Район проживания'] = df['Район проживания'].str.lower()
    districts = df['Район проживания'].unique()
    zone = pd.DataFrame()
    for area in districts:
        k = len(zone)
        zone.loc[k, 'Район проживания'] = area
        zone.loc[k, 'Количество умерших'] = len(
            df.loc[df['Район проживания'] == area])
        zone.loc[k,'из них: в первые сутки'] = len(df.loc[(df['Район проживания'] == area) \
                & (df['Смерть наступила в первые сутки с момента госпитализации (да/нет)'].isin(['да']))])
        zone.loc[k,'из них: возраст старше 60'] = len(df.loc[(df['Район проживания'] == area) \
                & (df['Смерть наступила в первые сутки с момента госпитализации (да/нет)'].isin(['да'])) \
                & (df['Возраст'] >= 60) ])

    file_svod = get_dir(
        'temp') + f'/Умершие за неделю с {date_start} по {date_end} свод.xlsx'
    with pd.ExcelWriter(file_svod) as writer:
        svod.to_excel(writer, sheet_name='Свод по МО', index=False)
        sp.to_excel(writer, sheet_name='Проценты', index=False)
        zone.to_excel(writer, sheet_name='Умершие по районам', index=False)
        cheak.to_excel(writer, sheet_name='Изменившиеся диагнозы', index=False)
    try:
        shutil.copyfile(file_svod, new_path + '/свод.xlsx')
    except:
        pass
    return file_svod + ';' + df_file
Esempio n. 22
0
def svod_40_cov_19(a):
    sql = open('sql/parus/covid_40_spytnic.sql',
               'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql2 = open('sql/parus/covid_40_spytnic_old.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql3 = open('sql/parus/covid_40_epivak.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql4 = open('sql/parus/covid_40_epivak_old.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql5 = open('sql/parus/covid_40_covivak.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql6 = open('sql/parus/covid_40_covivak_old.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql7 = open('sql/parus/covid_40_revac.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql8 = open('sql/parus/covid_40_revac_old_new.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql9 = open('sql/parus/covid_40_light.sql',
                'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')
    sql10 = open('sql/parus/covid_40_light_old.sql',
                 'r').read()  #.replace('SYSDATE', 'SYSDATE - 1')

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        sput = pd.read_sql(sql, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        sput_old = pd.read_sql(sql2, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        epivak = pd.read_sql(sql3, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        epivak_old = pd.read_sql(sql4, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        covivak = pd.read_sql(sql5, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        covivak_old = pd.read_sql(sql6, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        revac = pd.read_sql(sql7, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        revac_old = pd.read_sql(sql8, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        light = pd.read_sql(sql9, con)
    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        light_old = pd.read_sql(sql10, con)

    send('', 'Запросы к базе выполнены')
    del sput['ORGANIZATION']
    del sput_old['ORGANIZATION']
    del epivak['ORGANIZATION']
    del epivak_old['ORGANIZATION']
    del covivak['ORGANIZATION']
    del covivak_old['ORGANIZATION']
    #del revac ['INDX']
    #del revac_old ['INDX']
    del light['ORGANIZATION']
    del light_old['ORGANIZATION']
    revac = revac.loc[revac['TIP'] == 'Медицинская организация']
    revac_old = revac_old.loc[revac_old['TIP'] == 'Медицинская организация']

    date_otch = (datetime.datetime.now() -
                 datetime.timedelta(days=1)).strftime('%d.%m.%Y')
    new_name_pred = '40_COVID_19_БОТКИНА_' + date_otch + '_предварительный.xlsx'
    new_name_osn = '40_COVID_19_БОТКИНА_' + date_otch + '_основной.xlsx'
    shablon_path = get_dir('help')

    shutil.copyfile(shablon_path + '/40_COVID_19_pred.xlsx',
                    shablon_path + '/' + new_name_pred)
    shutil.copyfile(shablon_path + '/40_COVID_19_osn.xlsx',
                    shablon_path + '/' + new_name_osn)

    wb = openpyxl.load_workbook(shablon_path + '/' + new_name_pred)
    ws = wb['Спутник-V']
    rows = dataframe_to_rows(sput, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Вчера_Спутник']
    rows = dataframe_to_rows(sput_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['ЭпиВакКорона']
    rows = dataframe_to_rows(epivak, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Вчера_ЭпиВак']
    rows = dataframe_to_rows(epivak_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['КовиВак']
    rows = dataframe_to_rows(covivak, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Спутник Лайт']
    rows = dataframe_to_rows(light, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Вчера_КовиВак']
    rows = dataframe_to_rows(covivak_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Ревакцинация']
    rows = dataframe_to_rows(revac, index=False, header=False)
    for r_idx, row in enumerate(rows, 9):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Вчера_ревакцин']
    rows = dataframe_to_rows(revac_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 9):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Вчера_Спутник Лайт']
    rows = dataframe_to_rows(light_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(shablon_path + '/' + new_name_pred)
    send('', 'Готов предварительный файл')

    # основной отчёт
    del sput[sput.columns[-1]]
    del sput[sput.columns[-1]]
    del sput[sput.columns[-1]]

    wb = openpyxl.load_workbook(shablon_path + '/' + new_name_osn)
    ws = wb['Спутник-V']
    rows = dataframe_to_rows(sput, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    del epivak[epivak.columns[-1]]
    del epivak[epivak.columns[-1]]
    del epivak[epivak.columns[-1]]

    ws = wb['ЭпиВакКорона']
    rows = dataframe_to_rows(epivak, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    del covivak[covivak.columns[-1]]
    del covivak[covivak.columns[-1]]
    del covivak[covivak.columns[-1]]

    ws = wb['КовиВак']
    rows = dataframe_to_rows(covivak, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    del light[light.columns[-1]]
    del light[light.columns[-1]]
    del light[light.columns[-1]]

    ws = wb['Спутник Лайт']
    rows = dataframe_to_rows(light, index=False, header=False)
    for r_idx, row in enumerate(rows, 5):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    del revac['SCEP']
    ws = wb['Ревакцинация']
    rows = dataframe_to_rows(revac, index=False, header=False)
    for r_idx, row in enumerate(rows, 9):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(shablon_path + '/' + new_name_osn)

    return (shablon_path + '/' + new_name_pred + ';' + shablon_path + '/' +
            new_name_osn)
Esempio n. 23
0
def cvod_27_covid(a):
    sql1 = open('sql/parus/covid_27_svod.sql', 'r').read()
    sql2 = open('sql/parus/covid_27_svod_old.sql', 'r').read()
    sql3 = open('sql/parus/covid_27_svod_2.sql', 'r').read()
    sql4 = open('sql/parus/covid_27_svod_3.sql', 'r').read()
    sql5 = open('sql/parus/covid_27_svod_4.sql', 'r').read()

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        df = pd.read_sql(sql1, con)

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        df_old = pd.read_sql(sql2, con)

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        df_2 = pd.read_sql(sql3, con)

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        df_3 = pd.read_sql(sql4, con)

    with cx_Oracle.connect(userName, password, userbase,
                           encoding="UTF-8") as con:
        df_4 = pd.read_sql(sql5, con)

    date = datetime.datetime.now().strftime('%d_%m_%Y')

    df_3 = df_3.loc[~(df_3['IDMO'].isnull())]
    for col in df_3.columns[10:]:
        try:
            df_3[col] = df_3[col].str.replace(',', '.').astype(float)
        except:
            send('', col)

    df_4 = df_4.loc[~(df_4['IDMO'].isnull())]
    for col in df_4.columns[10:]:
        try:
            df_4[col] = df_4[col].str.replace(',', '.').astype(float)
        except:
            send('', col)

    shablon_path = get_dir('help')

    new_name_1 = shablon_path + '/' + date + '_1_27_COVID-19.xlsx'
    new_name_2 = shablon_path + '/' + date + '_2_Результаты_исследований_материала_на_COVID-19.xlsx'
    new_name_3 = shablon_path + '/' + date + '_3_Кратность_лаб_обсл_на_COVID-19.xlsx'
    new_name_4 = shablon_path + '/' + date + '_4_Кратность_положительных_лаб_обсл_на_COVID-19.xlsx'

    shutil.copyfile(shablon_path + '/27_COVID_19_svod.xlsx', new_name_1)

    wb = openpyxl.load_workbook(new_name_1)

    ws = wb['Для заполнения']
    rows = dataframe_to_rows(df, index=False, header=False)
    for r_idx, row in enumerate(rows, 4):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    ws = wb['Пред.отч']
    rows = dataframe_to_rows(df_old, index=False, header=False)
    for r_idx, row in enumerate(rows, 4):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(new_name_1)

    shutil.copyfile(shablon_path + '/27_COVID_19_svod_2.xlsx', new_name_2)

    wb = openpyxl.load_workbook(new_name_2)

    ws = wb['свод']
    rows = dataframe_to_rows(df_2, index=False, header=False)
    for r_idx, row in enumerate(rows, 4):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(new_name_2)

    shutil.copyfile(shablon_path + '/27_COVID_19_svod_3.xlsx', new_name_3)

    wb = openpyxl.load_workbook(new_name_3)

    ws = wb['свод']
    rows = dataframe_to_rows(df_3, index=False, header=False)
    for r_idx, row in enumerate(rows, 4):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(new_name_3)

    shutil.copyfile(shablon_path + '/27_COVID_19_svod_4.xlsx', new_name_4)

    wb = openpyxl.load_workbook(new_name_4)

    ws = wb['свод']
    rows = dataframe_to_rows(df_4, index=False, header=False)
    for r_idx, row in enumerate(rows, 4):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)

    wb.save(new_name_4)
    return (new_name_1 + ';' + new_name_2 + ';' + new_name_3 + ';' +
            new_name_4)
Esempio n. 24
0
            except Exception as e:
                send('', 'Ошибка при запуске задания\n' + str(e))
            try:
                my_thread.start()
            except Exception as e:
                send('', 'Ошибка при запуске задания\n' + str(e))
        
        delta = 60 - time.time() % 60
        time.sleep(delta)

    
try:
    t = threading.Thread(target=shedule, name="Расписание работ")
    t.start()
except Exception as e:
    send('', 'Не удалось запустить шедулер\n' + str(e))
else:
    send('','Шедулер успешно запущен')
# ========= Маленькая процедурка для определения периода суток

def get_hello_start():
    temp = int(time.strftime("%H"))
    return {
         0   <= temp   < 6  :  'Доброй ночи, ',
         6   <= temp   < 11 :  'Доброе утро, ',
         11  <= temp   < 16 :  'Добрый день, ',
         16  <= temp   < 22 :  'Добрый вечер, ',
         22  <= temp   < 24 :  'Доброй ночи, '
    }[True]

# ========= Процедура логирования =================
Esempio n. 25
0
def generate_pptx(date):
    def create_slide(title, type_error, type_org, date_start, date_end,
                     dynamic):
        if type_org == 'Частные':
            chastn = 'in'
            type_org = 'Амбулаторная'
        else:
            chastn = 'not in'

        sql = f"""select distinct case when d1.[Медицинская организация] is null then d2.[Медицинская организация]
                             when d2.[Медицинская организация] is null then d1.[Медицинская организация]
                             else  d1.[Медицинская организация] 
                             end as "Медицинская организация"
                            ,d1.eror1  , d2.eror2 
                            , d2.eror2 -  d1.eror1  as 'Динамика'           
            from (
        SELECT [Медицинская организация]
              , isnull([{type_error}],0) as 'eror1'
          FROM [COVID].[robo].[cv_Zamechania_fr]
          where [дата отчета] = '{date_start}' 
            and [Тип организации] = '{type_org}'  ) as d1
          full join (
        SELECT [Медицинская организация]
              , isnull([{type_error}],0) as 'eror2'
          FROM [COVID].[robo].[cv_Zamechania_fr]
          where [дата отчета] = '{date_end}'
          and [Тип организации] = '{type_org}' ) as d2
          on (d1.[Медицинская организация] = d2.[Медицинская организация])
          where d2.eror2 is not null and d1.eror1 is not null
          and d1.[Медицинская организация] {chastn} ('ООО "ЛАХТА КЛИНИКА"','ООО «Городские поликлиники»', 'ООО "Современная медицина"',
                                                     'ООО «Медицентр ЮЗ»','АНО "Медицинский центр "Двадцать первый век"', 'ООО "ЦСМ "21 ВЕК"',
                                                     'ООО Ава-Петер','ЧУЗ «КБ «РЖД-МЕДИЦИНА» Г. С-ПЕТЕРБУРГ"','ООО «ММЦ «СОГАЗ»')
          and  d1.[Медицинская организация] <> 'МО другого региона'
          order by  [Динамика] DESC, d1.eror1 DESC"""

        #send('',sql)

        df = pd.read_sql(sql, con)
        df.fillna(0, inplace=True)

        if dynamic:
            df['Динамика'] = pd.to_numeric(df['Динамика'])
            df.loc[(df != 0).any(1)]
            df.index = range(len(df))
        else:
            df = df.sort_values(by=['eror2'], ascending=False)
            df = df.loc[df['eror2'] != 0]
            df.loc[(df != 0).any(1)]
            df.index = range(len(df))

        if not len(df):
            return 1

        sum_err1 = df['eror1'].sum()
        sum_err2 = df['eror2'].sum()
        title_only_slide_layout = prs.slide_layouts[5]
        slide = prs.slides.add_slide(title_only_slide_layout)
        shapes = slide.shapes

        shapes.title.text = title
        shapes.title.text_frame.paragraphs[0].font.color.rgb = RGBColor(
            255, 0, 0)
        shapes.title.text_frame.paragraphs[0].font.size = Pt(30)

        body_shape = shapes.placeholders[0]
        tf = body_shape.text_frame
        p = tf.add_paragraph()
        p.text = 'Общее число замечаний на ' + date_start + ' — ' + str(
            sum_err1).replace('.0', '')
        p.font.color.rgb = RGBColor(20, 20, 20)
        p.font.size = Pt(18)

        p = tf.add_paragraph()
        p.text = 'На ' + date_end + ' — ' + str(sum_err2).replace('.0', '')
        p.font.color.rgb = RGBColor(20, 20, 20)
        p.font.size = Pt(18)

        p = tf.add_paragraph()
        p.text = 'Общая динамика: ' + str(sum_err2 - sum_err1).replace(
            '.0', '')
        p.font.color.rgb = RGBColor(20, 20, 20)
        p.font.size = Pt(18)

        # Первая таблица
        if dynamic:
            if len(df.loc[~(df['Динамика'] < 0)]) > 16:
                rows = 17
            else:
                rows = len(df.loc[~(df['Динамика'] < 0)]) + 1
        else:
            #send('', type_error + str(len(df)))
            if len(df) > 16:
                rows = 17
            else:
                rows = len(df) + 1

        if dynamic:
            cols = 5
        else:
            cols = 3
        left = Inches(0.5)
        top = Inches(2)
        width = Inches(5)
        height = Inches(0.1)

        shape = shapes.add_table(rows, cols, left, top, width, height)
        table = shape.table
        tbl = shape._element.graphic.graphicData.tbl
        style_id = '{9DCAF9ED-07DC-4A11-8D7F-57B35C25682E}'
        tbl[0][-1].text = style_id

        # set column widths
        table.columns[0].width = Inches(0.5)
        table.columns[1].width = Inches(3.5)
        table.columns[2].width = Inches(1.5)
        if dynamic:
            table.columns[1].width = Inches(2.5)
            table.columns[3].width = Inches(1.5)
            table.columns[4].width = Inches(1.5)
        # write column headings
        table.cell(0, 0).text = '№'
        table.cell(0, 1).text = 'Медицинская организация'
        if dynamic:
            table.cell(0, 2).text = date_start
            table.cell(0, 3).text = date_end
            table.cell(0, 4).text = 'Динамика'
        else:
            table.cell(0, 2).text = date_end

        k = 0
        if dynamic:
            if len(df.loc[~(df['Динамика'] < 0)]):
                for i in df.loc[~(df['Динамика'] < 0)].head(16).index:
                    table.cell(k + 1, 0).text = str(i + 1)
                    table.cell(k + 1,
                               0).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1,
                               1).text = df.at[i, 'Медицинская организация']
                    table.cell(k + 1,
                               1).text_frame.paragraphs[0].font.size = Pt(10)
                    table.cell(k + 1,
                               2).text = str(df.at[i,
                                                   'eror1']).replace('.0', '')
                    table.cell(k + 1,
                               2).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1,
                               3).text = str(df.at[i,
                                                   'eror2']).replace('.0', '')
                    table.cell(k + 1,
                               3).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1, 4).text = str(df.at[i,
                                                          'Динамика']).replace(
                                                              '.0', '')
                    table.cell(k + 1,
                               4).text_frame.paragraphs[0].font.size = Pt(12)
                    k += 1
                    if k > 16:
                        break
        else:
            for i in df.head(16).index:
                table.cell(k + 1, 0).text = str(k + 1)
                table.cell(k + 1,
                           0).text_frame.paragraphs[0].font.size = Pt(12)
                table.cell(k + 1, 1).text = df.at[i, 'Медицинская организация']
                table.cell(k + 1,
                           1).text_frame.paragraphs[0].font.size = Pt(10)
                table.cell(k + 1,
                           2).text = str(df.at[i, 'eror2']).replace('.0', '')
                table.cell(k + 1,
                           2).text_frame.paragraphs[0].font.size = Pt(12)
                df.drop(i, inplace=True)
                k += 1

        # Вторая таблица
        if dynamic:
            if len(df.loc[df['Динамика'] < 0]) > 16:
                rows = 17
            else:
                rows = len(df.loc[df['Динамика'] < 0]) + 1
        else:
            #send('','2' +  type_error + str(len(df)))
            if len(df) > 16:
                rows = 17
            else:
                rows = len(df) + 1
                if rows < 2:
                    #send('', str(df.head()))
                    return 1

        if dynamic:
            cols = 5
        else:
            cols = 3
        left = Inches(8.25)
        top = Inches(2)
        width = Inches(5)
        height = Inches(0.1)

        shape = shapes.add_table(rows, cols, left, top, width, height)
        table = shape.table
        tbl = shape._element.graphic.graphicData.tbl
        style_id = '{9DCAF9ED-07DC-4A11-8D7F-57B35C25682E}'
        tbl[0][-1].text = style_id

        # set column widths
        table.columns[0].width = Inches(0.5)
        table.columns[1].width = Inches(3.5)
        table.columns[2].width = Inches(1.5)
        if dynamic:
            table.columns[1].width = Inches(2.5)
            table.columns[3].width = Inches(1.5)
            table.columns[4].width = Inches(1.5)
        # write column headings
        table.cell(0, 0).text = '№'
        table.cell(0, 1).text = 'Медицинская организация'
        if dynamic:
            table.cell(0, 2).text = date_start
            table.cell(0, 3).text = date_end
            table.cell(0, 4).text = 'Динамика'
        else:
            table.cell(0, 2).text = date_end

        k = 0
        if dynamic:
            if len(df.loc[df['Динамика'] < 0]):
                for i in df.loc[df['Динамика'] < 0].sort_values(
                        by=['Динамика']).head(16).index:
                    table.cell(k + 1, 0).text = str(i + 1)
                    table.cell(k + 1,
                               0).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1,
                               1).text = df.at[i, 'Медицинская организация']
                    table.cell(k + 1,
                               1).text_frame.paragraphs[0].font.size = Pt(10)
                    table.cell(k + 1,
                               2).text = str(df.at[i,
                                                   'eror1']).replace('.0', '')
                    table.cell(k + 1,
                               2).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1,
                               3).text = str(df.at[i,
                                                   'eror2']).replace('.0', '')
                    table.cell(k + 1,
                               3).text_frame.paragraphs[0].font.size = Pt(12)
                    table.cell(k + 1, 4).text = str(df.at[i,
                                                          'Динамика']).replace(
                                                              '.0', '')
                    table.cell(k + 1,
                               4).text_frame.paragraphs[0].font.size = Pt(12)
                    k += 1
                    if k > 16:
                        break
        else:
            for i in df.head(16).index:
                table.cell(k + 1, 0).text = str(k + 17)
                table.cell(k + 1,
                           0).text_frame.paragraphs[0].font.size = Pt(12)
                table.cell(k + 1, 1).text = df.at[i, 'Медицинская организация']
                table.cell(k + 1,
                           1).text_frame.paragraphs[0].font.size = Pt(10)
                table.cell(k + 1,
                           2).text = str(df.at[i, 'eror2']).replace('.0', '')
                table.cell(k + 1,
                           2).text_frame.paragraphs[0].font.size = Pt(12)
                k += 1

    date1 = date.split(',')[0]
    date2 = date.split(',')[1]
    date_start_sql = date1
    date_end_sql = date2
    date_start = pd.to_datetime(date1).strftime("%d.%m.%Y")
    date_end = pd.to_datetime(date2).strftime("%d.%m.%Y")
    prs = Presentation()

    prs.slide_height = Inches(9)
    prs.slide_width = Inches(16)

    title_slide_layout = prs.slide_layouts[0]
    slide = prs.slides.add_slide(title_slide_layout)
    title = slide.shapes.title
    subtitle = slide.placeholders[1]
    # Первый слайд
    title.text = "Замечания по ведению Федерального регистра лиц, больных COVID-19"
    subtitle.text = "По состоянию на " + date_end

    # Второй слайд

    bullet_slide_layout = prs.slide_layouts[5]
    slide = prs.slides.add_slide(bullet_slide_layout)
    shapes = slide.shapes

    title_shape = shapes.title
    body_shape = shapes.placeholders[0]

    title_shape.text = 'Группы замечаний по ведению Регистра на ' + date_end
    tf = body_shape.text_frame
    date_in_text = (pd.to_datetime(date2) -
                    datetime.timedelta(30)).strftime("%d.%m.%Y")

    text = f"""Срок создания регистровой записи (УНРЗ) не соответствует дате установки диагноза – более 7 дней между датами (МЗ оценивает регион) (Количество регистровых записей, внесённых с задержкой больше недели, за последний месяц)
    Отсутствие информации о номере Полиса ОМС в разделе «Медицинское страхование»
    Не заполнен Раздел «Результаты ежедневного наблюдения» (дневниковые записи) – по данным МЗ РФ
    Поле «исход заболевания» заполнено «переведён в другую МО» без открытия следующего этапа лечения («зависшие» пациенты более 7 дней от даты перевода в др. МО)
    Поле «исход заболевания» не заполнено с датой установки диагноза ранее {date_in_text} (длительность болезни более 30 дней)
    Количество УНРЗ с заполненным полем «исход заболевания» «выздоровление» не соответствует оперативной отчётности поликлиник
    Количество УНРЗ с пустым полем «исход заболевания» (находящиеся под медицинским наблюдением в амбулаторных условиях) не соответствует оперативной отчётности поликлиник
    Поле «Вид лечения» ошибочно заполнено «стационарный» -  у пациентов, находящихся под медицинским наблюдением в амбулаторных условиях 
    Количество УНРЗ с заполненным Разделом «Результаты ежедневного наблюдения» в части поля «ИВЛ» не соответствует оперативной отчётности стационаров
    Количество УНРЗ пациентов, находящихся под медицинским наблюдением в стационарных условиях, не соответствует оперативной отчётности стационаров
    Дублированные  УНРЗ в одном МО
    Отсутствие прикреплённого файла патологоанатомического заключения"""

    rows = 12
    cols = 2
    left = Inches(0.5)
    top = Inches(2)
    width = Inches(8)
    height = Inches(0.1)

    shape = shapes.add_table(rows, cols, left, top, width, height)

    tbl = shape._element.graphic.graphicData.tbl
    table = shape.table

    style_id = '{2D5ABB26-0587-4C30-8999-92F81FD0307C}'
    tbl[0][-1].text = style_id

    table.columns[0].width = Inches(0.5)
    table.columns[1].width = Inches(8.0)

    i = 0
    for t in text.split('\n'):
        table.cell(i, 0).text = str(i + 1) + ')'
        table.cell(i, 0).text_frame.paragraphs[0].font.size = Pt(12)
        table.cell(i, 1).text = t
        table.cell(i, 1).text_frame.paragraphs[0].font.size = Pt(11)
        i += 1

    # Третий слайд

    bullet_slide_layout = prs.slide_layouts[2]
    slide = prs.slides.add_slide(bullet_slide_layout)
    shapes = slide.shapes

    title_shape = shapes.title
    title_shape.text = '1 группа замечаний'
    title_shape.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0)

    body_shape = shapes.placeholders[1]
    tf = body_shape.text_frame

    #df = pd.read_sql("Select count(*) from cv_fedreg where DATEDIFF(day,[Дата создания РЗ],getdate() ) < 31", con)
    df = pd.read_sql(
        """
	    select count(*)
	    from cv_fedreg 
	    where 
	    DATEDIFF(day,[Дата создания РЗ],getdate() ) < 31
	    and (DATEDIFF(day,[Дата создания РЗ],[Диагноз установлен] ) > 7 or DATEDIFF(day,[Дата создания РЗ],[Диагноз установлен] ) < -7 )
            """, con)

    p = tf.add_paragraph()
    p.text = 'за последние 30 дней: + ' + str(df.iat[0, 0]) + ' УНРЗ'
    p.font.color.rgb = RGBColor(255, 0, 0)
    p.font.size = Pt(30)

    df = pd.read_sql(
        """
	    select count(*)
	    from cv_fedreg 
	    where 
	    (DATEDIFF(day,[Дата создания РЗ],[Диагноз установлен] ) > 7 or DATEDIFF(day,[Дата создания РЗ],[Диагноз установлен] ) < -7 )
            """, con)

    p = tf.add_paragraph()
    p.text = 'за всё время: ' + str(df.iat[0, 0]) + ' УНРЗ'
    p.font.color.rgb = RGBColor(255, 0, 0)
    p.font.size = Pt(30)

    p = tf.add_paragraph()
    p = tf.add_paragraph()
    p.text = 'Срок создания регистровой записи (УНРЗ) не соответствует дате установки диагноза: разница более 7 дней после даты установки диагноза, количество взято за последний месяц'
    p.font.size = Pt(20)

    for title, type_error, type_org, dynamic in valume:
        try:
            create_slide(title, type_error, type_org, date_start_sql,
                         date_end_sql, dynamic)
        except Exception as e:
            send('', type_error + '\n' + type_org + '\n' + str(e))

    pptx_file = get_dir('temp') + '/dynamic.pptx'
    prs.save(pptx_file)

    return pptx_file
Esempio n. 26
0
def log_shedule(work,result):
    if not result[0]:
        send('admin', 'При выполнении ' + work + ' произошло\n' + result[1])
    else:
        send('admin', 'Выполнил ' + work)
Esempio n. 27
0
def load_vaccina(a):
    files = glob.glob(get_dir('path_robot') + '/_ФР_по_частям/Федеральный регистр вакцинированных*')
    if not len(files):
        raise my_except('В папке нет файлов!')
    names = [
    'п/н', 'Дата создания РЗ', 'Дата обновления РЗ', 'УНРЗ', 'СНИЛС', 'ФИО', 'Пол', 'Дата рождения', 'Вакцина','Дата вакцинации', 'Субъект РФ', 'Медицинская организация', 'Ведомственная принадлежность', 'Структурное подразделение', 'СНИЛС медицинского работника','Статус иммунизации', 'Дневник самонаблюдения', 'Сведения об осложнениях', 'Наличие пациента в Регистре COVID'      
        ]
    cols = ['number','Data_sozdaniya_RZ','Data_obnovleniya_RZ','UNRZ','SNILS','FIO','Pol','Data_rozhdeniya','Vaktsina','Data_vaktsinatsii','Subyekt_RF','Meditsinskaya_organizatsiya','Vedomstvennaya_prinadlezhnost','Strukturnoye_podrazdeleniye','SNILS_MO_employee','Status_immunizatsii','Dnevnik_samonablyudeniya','Ob_informatsii_oslozhneniyakh','Nalichiye_patsiyenta_v_Registre_COVID']
    list_ = []
    for file in files:
        part = pd.DataFrame()
        try:
            part = pd.read_excel(file, usecols=names,  header=0,skipfooter=1 )
        except:
            try:
                part = pd.read_excel(file, usecols=names,  header=1,skiprows = 1, skipfooter=1 )
            except Exception as e:
                send('admin', file.rsplit('/',1)[-1] +'\n'+ str(e) )
        
        if len(part):
            send('admin','Я прочёл ' + file.rsplit('/',1)[-1])
            list_.append(part)
        else:
            send('admin','Я не смог прочитать ' + file.rsplit('/',1)[-1])

    df = pd.concat(list_)
    df.columns = cols
    send('admin',str(df.columns))
    send('admin','Файл в памяти, количество строк: ' + str(len(df)) )
    sql_execute('TRUNCATE TABLE [dbo].[cv_fedRegVakcin]')
    send('admin','Очистил cv_fedRegVakcin')

    with sqlalchemy.create_engine(f"mssql+pymssql://{user}:{passwd}@{server}/{dbase}",pool_pre_ping=True).connect() as con:
        df.to_sql('cv_fedRegVakcin',con,schema='dbo',if_exists='replace',index=False)
    if check_table('fedRegVakcin'):
        send('admin','Федеральный регистр успешно загружен')
        return 1
    else:
        send('admin','Произошла какая-то проблема с загрузкой вакцинируемых')
        return 0
Esempio n. 28
0
from sending import sendMessage as send
import RPi.GPIO as GPIO
from gpiozero import MotionSensor


#Create loop for selecting other Pi's
try:
    
    while True:
#Ask who the user would like to interact with
        who = input("Who do you want to contact?\nKheraass - K, Voltar - V, Bren - B, SpookFeesh - S\n")
        
#Give options and requirements
        if who == "B":
            
            send("Fire")
            
        elif who == "K":
            
            send("Move")
            
        elif who == "V":
            
            song = input("What song do you want to play\n")
            
            send("Play " + song)
            
        elif who == "S":
            
            print("glub")
Esempio n. 29
0
def slojit_fr(a):
    import xlrd
    xlrd.xlsx.ensure_elementtree_imported(False, None)
    xlrd.xlsx.Element_has_iter = True

    file = '/mnt/COVID-списки/Входящие списки/для загрузки/Robot/_ФР_по_частям/Федеральный регистр лиц, больных COVID-19 - 2021-04-18T203626.396.xlsx'
    names = ['п/н','Дата создания РЗ','УНРЗ','Дата изменения РЗ','СНИЛС','ФИО','Пол','Дата рождения','Диагноз','Диагноз установлен','Осложнение основного диагноза',
             'Субъект РФ','Медицинская организация','Ведомственная принадлежность','Вид лечения','Дата исхода заболевания','Исход заболевания','Степень тяжести',
             'Посмертный диагноз','ИВЛ','ОРИТ','МО прикрепления','Медицинский работник']  

    path = get_dir('path_robot') + '/_ФР_по_частям'
    date = datetime.datetime.today().strftime("%Y_%m_%d")
    nameSheetShablon = "Sheet1"
    _list = []
    
    files = glob.glob(path + '/Федеральный регистр лиц*.xlsx')
    if not len(files):
        raise my_except('В папке нет файлов!')

    for excel in files:
        try:
            df = pd.read_excel(excel,  header= 1, usecols=names,  engine='xlrd',skipfooter=1 )
        except:
            raise my_except('Какой-то непонятный файл ' + excel.rsplit('/',1)[-1])
        send('epid','прочтён файл ' + excel.rsplit('/',1)[-1])
        _list.append(df)
    
    svod = pd.concat(_list)

    #svod = svod[svod["Дата создания РЗ"].notnull()] 
    svod["п/н"] = range(1, len(svod)+1)
    tumorow = (datetime.datetime.today() + datetime.timedelta(days=1)).strftime("%Y_%m_%d")
    
    new_fedreg      = get_dir('robot') +'/'+ tumorow + '/Федеральный регистр лиц, больных - ' + date + '.csv'
    new_fedreg_temp = get_dir('temp') + '/Федеральный регистр лиц, больных - ' + date + '.csv'
    new_iach        = get_dir('covid_iac2') + '/Федеральный регистр лиц, больных - ' + date + '_ИАЦ.csv'
    new_iach_temp   = get_dir('temp') + '/Федеральный регистр лиц, больных - ' + date + '_ИАЦ.csv'
    otchet_9        = glob.glob(get_dir('robot') +'/'+ tumorow +'/9. Отчет по пациентам COVID-центр*.xlsx' )
    if len(otchet_9):
        otchet_9_new = get_dir('covid_iac2') +'/'+ otchet_9[0].rsplit('/',1)[1]
        shutil.copyfile(otchet_9[0],otchet_9_new)
        send('epid','Отчет №9 скопирован в папку иац')
    else:
        send('epid','Не удалось найти отчет №9')
    
    NumberForMG = len(svod[svod['Диагноз'].isin(['U07.1']) \
                    & svod['Исход заболевания'].isnull() \
                    & svod['Вид лечения'].isin(['Стационарное лечение'])])

    NumberFor1 = len(svod[svod['Диагноз'].isin(['U07.1']) ])

    NumberFor2 = len(svod[svod['Посмертный диагноз'].isin(['U07.1']) \
                        & svod['Исход заболевания'].isin(['Смерть'])])

    day = pd.to_datetime(svod['Дата изменения РЗ'], format='%d.%m.%Y').max().date()
    count_vizd_old = pd.read_sql ("""SELECT [value_count] FROM [robo].[values]
                where id = (select max(id) from [robo].[values] where [value_name] = 'Всего выздоровело от COVID' 
                and date_rows = (select max(date_rows) from [robo].[values] where [value_name] = 'Всего выздоровело от COVID'
                and  date_rows != cast(getdate() as date) ) )""",con).iat[0,0]
    count_vizd_new = len(svod[svod['Исход заболевания'].isin(['Выздоровление']) & svod['Диагноз'].isin(['U07.1']) ])

    NumberFor3 = count_vizd_new - count_vizd_old
    # расчет людей на стационарном лечении
    svod['Возраст'] = (pd.to_datetime(svod['Диагноз установлен'], format="%d.%m.%Y") - pd.to_datetime(svod['Дата рождения'], format="%d.%m.%Y")) / numpy.timedelta64(1, 'Y')
    NumberFor4_1 = len(svod.loc[(svod['Исход заболевания'].isnull()) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Стационарное лечение']))])
    NumberFor4_2 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] < 18) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Стационарное лечение']))])
    NumberFor4_3 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] >= 60) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Стационарное лечение']))])
    NumberFor4_4 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] >= 70) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Стационарное лечение']))])

    NumberFor5_1 = len(svod.loc[(svod['Исход заболевания'].isnull()) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Амбулаторное лечение']))])
    NumberFor5_2 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] < 18) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Амбулаторное лечение']))])
    NumberFor5_3 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] >= 60) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Амбулаторное лечение']))])
    NumberFor5_4 = len(svod.loc[(svod['Исход заболевания'].isnull()) & ( svod['Возраст'] >= 70) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) | svod['Диагноз'].str.contains('J1[2-8]') ) \
            & (svod['Вид лечения'].isin(['Амбулаторное лечение']))])

    NumberFor7 = len(svod.loc[(svod['Исход заболевания'].str.contains('Выздоровление')) \
            & (svod['Диагноз'].isin(['U07.1','U07.2']) ) \
            & ( pd.to_datetime(svod['Дата исхода заболевания'], format='%d.%m.%Y', errors='ignore' )  > (datetime.datetime.now() - datetime.timedelta(days=181) ) ) ] )
    
    otvet = 'По цифрам\n' \
            + 'На стационарном лечении (U07.1): ' + format(NumberForMG,'n') + '\n' \
            + 'Всего заболело: ' + format(NumberFor1,'n') +'\n' \
            + 'Всего умерло: '+ format(NumberFor2,'n') + '\n' \
            + 'Всего выздоровело за ' + str(day) + ' : '+ format(NumberFor3, 'n') + '\n'\
            + 'Сейчас на стационаром лечении: ' + format(NumberFor4_1, 'n') + '\n' \
            + 'Сейчас на стационаром лечении младше 18: ' + format(NumberFor4_2, 'n') + '\n' \
            + 'Сейчас на стационаром лечении старше 60: ' + format(NumberFor4_3, 'n') + '\n' \
            + 'Сейчас на стационаром лечении старше 70: ' + format(NumberFor4_4, 'n')  + '\n' \
            + 'Сейчас на амбулаторном лечении: ' + format(NumberFor5_1, 'n') + '\n' \
            + 'Сейчас на амбулаторном лечении младше 18: ' + format(NumberFor5_2, 'n') + '\n' \
            + 'Сейчас на амбулаторном лечении старше 60: ' + format(NumberFor5_3, 'n') + '\n' \
            + 'Сейчас на амбулаторном лечении старше 70: ' + format(NumberFor5_4, 'n')  + '\n' \
            + 'Всего выздоровело от ковида за последние 180 дней: ' + format(NumberFor7, 'n')
    
    send('epid',otvet)
    send('epid','Начинаю записывать файлы')

    #with pd.ExcelWriter(new_fedreg_temp) as writer:
    #    svod.to_excel(writer,index=False)

    svod.to_csv(new_fedreg_temp,index=False,sep=";", encoding='utf-8')#encoding='cp1251')
    try:
        shutil.move(new_fedreg_temp,new_fedreg)
    except:
        shutil.move(new_fedreg_temp, path +'/' + new_fedreg_temp.rsplit('/',1)[-1])

    send('epid','Записан файл фед регистра')

    del svod['СНИЛС']
    del svod['ФИО']

    #with pd.ExcelWriter(new_iach_temp) as writer:
    #    svod.to_excel(writer,index=False)

    svod.to_csv(new_iach_temp,index=False,sep=";",encoding='cp1251')#,encoding='cp1251')

    shutil.move(new_iach_temp,new_iach)
    send('epid','Записан файл иац')
    
    return 'Фух, закончил'