class Parceiros(db.Model): __tablename__:'parceiros' id_geral = db.Column(db.Integer,primary_key=True) nivel = db.Column(db.String(100)) nome = db.Column(db.String(100)) email = db.Column(db.String(100)) senha = db.Column(db.String(500)) cpf = db.Column(db.String(50)) rg = db.Column(db.String(15)) dt_nascimento = db.Column(db.Date()) genero = db.Column(db.String(15)) local_trabalho = db.Column(db.String(100)) cargo = db.Column(db.String(100)) telefone = db.Column(db.String(20)) lattes = db.Column(db.String(500)) facebook = db.Column(db.String(500)) linkedin = db.Column(db.String(500)) twitter = db.Column(db.String(500)) def __init__(self,nivel,nome,email,senha,cpf): self.nivel = nivel self.nome = nome self.email = email self.senha = senha self.cpf = cpf
class OperationComp(db.Model): __tablename__ = 'OperationComp' id = db.Column(db.Integer(), primary_key=True) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id'), index=True) history_id = db.Column(db.Integer(), db.ForeignKey('History.id')) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) operation_id = db.Column(db.Integer(), db.ForeignKey('Operation.id')) complication_id = db.Column(db.Integer(), db.ForeignKey('Complication.id')) date_begin = db.Column(db.Date())
class Diagnose(db.Model): __tablename__ = 'Diagnose' id = db.Column(db.Integer(), primary_key=True) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id'), index=True) history_id = db.Column(db.Integer(), db.ForeignKey('History.id'), index=True) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) diagnose_item_id = db.Column(db.Integer(), db.ForeignKey('DiagnoseItem.id')) prosthesis_id = db.Column(db.Integer(), db.ForeignKey('Prosthesis.id')) side_damage = db.Column(db.String(100)) date_created = db.Column(db.Date())
class Task(db.Model): __tablename__ = 'tasks' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) done = db.Column(db.Boolean, default=0) deadline = db.Column(db.Date()) def __init__(self, name, done, deadline): self.name = name self.done = done self.deadline = deadline def __repr__(self): return "[{0}] {1}".format(self.done, self.name)
class ProfileResponse(db.Model): __tablename__ = 'ProfileResponse' id = db.Column(db.Integer(), primary_key=True) date_value = db.Column(db.Date()) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id'), index=True) history_id = db.Column(db.Integer(), db.ForeignKey('History.id')) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) history_event_id = db.Column(db.Integer(), db.ForeignKey('HistoryEvent.id')) profile_id = db.Column(db.Integer(), db.ForeignKey('Profile.id'), index=True) profile_item_id = db.Column(db.Integer(), db.ForeignKey('ProfileItem.id')) response = db.Column(db.String(100), unique=False) response_value = db.Column(db.Numeric())
class Eventos(db.Model): __tablename__: 'eventos' id = db.Column(db.Integer, primary_key=True) id_atividades = db.Column(db.Integer, db.ForeignKey(Atividades.id)) id_unidades = db.Column(db.Integer, db.ForeignKey(Unidades.id)) _data = db.Column(db.Date()) hora = db.Column(db.Time()) id_diretor = db.Column(db.Integer, db.ForeignKey(Diretores.id)) situacao = db.Column(db.Boolean) def __init__(self, id_atividades, id_unidades, _data, hora, id_diretor, situacao): self.id_atividades = id_atividades self.id_unidades = id_unidades self._data = _data self.hora = hora self.id_diretor = id_diretor self.situacao = situacao
class IndicatorValue(db.Model): __tablename__ = 'IndicatorValue' id = db.Column(db.Integer(), primary_key=True) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id'), index=True) history_id = db.Column(db.Integer(), db.ForeignKey('History.id'), index=True) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) history_event_id = db.Column(db.Integer(), db.ForeignKey('HistoryEvent.id')) indicator_id = db.Column(db.Integer(), db.ForeignKey('Indicator.id')) slice = db.Column(db.String(100)) time_created = db.Column(db.DateTime(), default=datetime.utcnow()) date_value = db.Column(db.Date()) date_time_value = db.Column(db.DateTime()) text_value = db.Column(db.String(100)) num_value = db.Column(db.Numeric()) num_deviation = db.Column(db.Numeric()) def_value = db.Column(db.Integer()) comment = db.Column(db.String(500)) events = db.relationship('HistoryEvent', backref='indicator_values')
class Parceiros(UserMixin, db.Model): __tablename__:'parceiros' id_geral = db.Column(db.Integer,primary_key=True) nivel = db.Column(db.String(100)) nome = db.Column(db.String(100)) sobrenome = db.Column(db.String(50)) email = db.Column(db.String(100), unique = True) senha = db.Column(db.String(500)) cpf = db.Column(db.String(50)) rg = db.Column(db.String(15)) matricula = db.Column(db.Integer()) foto_perfil = db.Column(db.String(500)) dt_nascimento = db.Column(db.Date()) genero = db.Column(db.String(15)) local_trabalho = db.Column(db.String(100)) cargo = db.Column(db.String(100)) telefone = db.Column(db.String(20)) lattes = db.Column(db.String(500)) facebook = db.Column(db.String(500)) linkedin = db.Column(db.String(500)) twitter = db.Column(db.String(500)) validado = db.Column(db.Boolean) termos = db.Column(db.Boolean) def __init__(self, nivel, email, senha, validado): self.nivel = nivel self.email = email self.senha = senha self.validado = validado
class Patient(db.Model): __tablename__ = 'Patient' id = db.Column(db.Integer(), primary_key=True) snils_hash = db.Column(db.String(128), unique=False) birthdate = db.Column(db.Date()) sex = db.Column(db.String(1), index=True) histories = db.relationship('History', backref='patient') # Создание хэш-значения для СНИЛС @staticmethod def get_snils_hash(snils): digest = md5(snils.lower().encode('utf-8')).hexdigest() return digest # Проверка наличия пациента в базе @staticmethod def get_patient_by_snils(digest): f_patient = Patient.query.filter(Patient.snils_hash == digest).first() if f_patient is None: return (None) else: return (f_patient)
class History(db.Model): __tablename__ = 'History' id = db.Column(db.Integer(), primary_key=True) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id'), index=True) hist_number = db.Column(db.String(100), unique=False) time_created = db.Column(db.DateTime(), default=datetime.utcnow()) date_in = db.Column(db.Date()) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) research_group_id = db.Column(db.Integer(), db.ForeignKey('ResearchGroup.id'), index=True) doctor_researcher_id = db.Column(db.Integer(), db.ForeignKey('Doctor.id'), index=True) date_research_in = db.Column(db.Date()) date_research_out = db.Column(db.Date()) reason_id = db.Column(db.Integer(), db.ForeignKey('Reason.id')) diagnoses = db.relationship('Diagnose', backref='history', lazy='dynamic') events = db.relationship('HistoryEvent', backref='history', lazy='dynamic') operations = db.relationship('Operation', backref='history', lazy='dynamic') def get_diagnoses(self, **kwargs): """ Выбор диагнозов Возвращает все диагнозы и отдельно - основной Параметры: """ # Выбор диагнозов diagnoses = self.diagnoses diagnoses_items = [] main_diagnose = None for d in diagnoses: diagnose_item = DiagnoseItem.query.get(d.diagnose_item_id) item = {} item['id'] = d.id item['description'] = diagnose_item.description item['type'] = diagnose_item.type item['mkb10'] = diagnose_item.mkb10 item['date_created'] = d.date_created if diagnose_item.type == 'Основной': main_diagnose = d diagnoses_items.append(item) return ([diagnoses_items, main_diagnose]) def get_events(self, **kwargs): """ Выбор событий Возвращает все события истории болезни Параметры: Тип события - опционально """ # Выбор событий event_type = kwargs.get('type', None) if event_type: # Задано событие определенного типа events = HistoryEvent.query.join(Event, Event.id==HistoryEvent.event_id).\ filter(and_(HistoryEvent.history_id==self.id, Event.type==event_type)).all() else: events = self.events items = [] for a in events: # Пытаемся найти и передать номер госпитализации и операции operation_obj = Operation.query.filter_by( history_id=self.id).first() event_item = Event.query.get(a.event_id) item = {} item['event'] = a item['event_id'] = a.id item['event_date'] = a.date_begin item['event_date_begin'] = a.date_begin item['event_date_end'] = a.date_end doctor = Doctor.query.get(a.doctor_id) item['doctor'] = doctor.fio item['event_name'] = event_item.description item['event_type'] = event_item.id if operation_obj: item['operation_id'] = operation_obj.id item['hospital_id'] = operation_obj.hospital_id else: item['operation_id'] = 0 item['hospital_id'] = 0 items.append(item) return items def get_operations(self): items = [] operations = self.operations for o in operations: doctor_surgeon = Doctor.query.get(o.doctor_surgeon_id) item = {} item["id"] = o.id item["date"] = date(2012, 1, 1) if doctor_surgeon: item["doctor_surgeon"] = doctor_surgeon.fio else: item["doctor_surgeon"] = '' items.append(item) return items def check_history(self, **kwargs): """ Проверка истории болезни Возвращает результаты проверки в виде словаря Параметры: """ # Проверка 1: # В разделе телерентгенографии где отмечаем углы, # есть пункт уровень суставной щели ( полученные данные сравниваются с нормой, норма - 0, # но нам необходимо сравнивать полученную цифру с цифрой до операции, # в графе норма надо чтобы подтягивалось из базы данные до операции result_check = {} # Получить показатель - Уровень суставной щели по всем событиям истории болезни iv_set = IndicatorValue.query.join(HistoryEvent, HistoryEvent.id == IndicatorValue.history_event_id).\ filter(and_(IndicatorValue.history_id==self.id, IndicatorValue.indicator_id==106, IndicatorValue.slice=='Значение')).all() # Значение до операции val_ind_before = 0 for val_ind in iv_set: if val_ind.event_id == 3: val_ind_before = val_ind.num_value # Если значение показателя = 0 то дальнейшие проверки бессмысленны #if val_ind_before == 0: # return(result_check) # Сравнение значений после операции со значением до операции for val_ind in iv_set: if val_ind.event_id > 4: if val_ind.num_value != val_ind_before: result_check['Indicator'] = val_ind.indicator_id result_check['Event'] = val_ind.indicator_id return (result_check)
class HistoryEvent(db.Model): __tablename__ = 'HistoryEvent' id = db.Column(db.Integer(), primary_key=True) parent_event_id = db.Column(db.Integer(), db.ForeignKey('HistoryEvent.id')) clinic_id = db.Column(db.Integer(), db.ForeignKey('Clinic.id')) history_id = db.Column(db.Integer(), db.ForeignKey('History.id')) patient_id = db.Column(db.Integer(), db.ForeignKey('Patient.id')) event_id = db.Column(db.Integer(), db.ForeignKey('Event.id'), index=True) date_begin = db.Column(db.Date()) date_end = db.Column(db.Date()) doctor_id = db.Column(db.Integer(), db.ForeignKey('Doctor.id'), index=True) doctor_researcher_id = db.Column(db.Integer(), db.ForeignKey('Doctor.id'), index=True) doctor_chief_id = db.Column(db.Integer(), db.ForeignKey('Doctor.id'), index=True) days1 = db.Column(db.Integer()) #койко-день days2 = db.Column(db.Integer()) #предоперационный койко-день days3 = db.Column(db.Integer()) #послеоперационный койко-день def get_indicators_values(self, indicator_group, **kwargs): """ Выбор показателей события Параметры: indicators_group - код группы indicators_list - список показателей (опционально) """ indicators_list = kwargs.get('indicators_list', None) # Выбор всех показателей из группы indicators_values = IndicatorValue.query.join(Indicator, IndicatorValue.indicator_id==Indicator.id).\ filter(IndicatorValue.history_event_id==self.id, Indicator.group_id==indicator_group).\ order_by(IndicatorValue.id).all() items = [] for i in indicators_values: indicator = Indicator.query.get(i.indicator_id) if indicators_list and indicator.id not in indicators_list: continue indicator_norms = IndicatorNorm.query.filter( IndicatorNorm.indicator_id == indicator.id).first() item = {} item['id'] = i.id item['indicator'] = i.indicator_id item['slice'] = i.slice item['description'] = indicator.description item['is_calculated'] = indicator.is_calculated item['date_value'] = i.date_value item['date_time_value'] = i.date_time_value item['def_value'] = i.def_value if i.num_value == None: item['num_value'] = 0 else: if indicator.type == 'integer': item['num_value'] = int(i.num_value) else: item['num_value'] = i.num_value if i.comment == None: item['comment'] = '' else: item['comment'] = i.comment if i.text_value == None: item['text_value'] = '' else: item['text_value'] = i.text_value if indicator.unit == None: item['unit'] = '' else: item['unit'] = indicator.unit if indicator_norms: item['nvalue_from'] = indicator_norms.nvalue_from item['nvalue_to'] = indicator_norms.nvalue_from items.append(item) return (items)