diff --git a/app.py b/app.py index cea98bc..e53b2b7 100644 --- a/app.py +++ b/app.py @@ -102,8 +102,6 @@ class MainWinHandler: self.catalog_list_unselected() cl.invalidate_filter() - - def list_sort_func(row1, row2, *a): text1 = row1.props.name text2 = row2.props.name diff --git a/mods/db.py b/mods/db.py index 06400fd..492f0ff 100644 --- a/mods/db.py +++ b/mods/db.py @@ -2,6 +2,7 @@ import os from peewee import Model, CharField, DateTimeField, TextField, ForeignKeyField, DateField, fn, BooleanField from playhouse.sqlite_ext import CSqliteExtDatabase, FTS5Model, AutoIncrementField, SearchField, RowIDField, JSONField import platform +from mods.files import init_db_dir if 'windows' in platform.system().lower(): user_dir = os.path.abspath(os.environ['APPDATA']) @@ -17,6 +18,29 @@ if not os.path.exists(var_dir): if not os.path.exists(db_dir): os.mkdir(db_dir) +################################################################### +diag_db_file = os.path.join(init_db_dir, 'diag.db') +diag_db = CSqliteExtDatabase(diag_db_file, pragmas={ + 'foreign_keys': 'on', + 'ignore_check_constraints': 'off'}) + +class DiagBaseModel(Model): + 'Базовая таблица' + class Meta: + database = diag_db + +class DiagCategory(DiagBaseModel): + id = AutoIncrementField() + parent = ForeignKeyField('self', null=True, backref='subcat') + title = TextField() +class Diag(DiagBaseModel): + id = AutoIncrementField() + category = ForeignKeyField(DiagCategory, backref='diagnosis') + code = CharField(32) + title = TextField() + +#################################################################### + db = CSqliteExtDatabase(db_file, pragmas={ 'journal_mode': 'wal', 'cache_size': -1 * 64000, # 64MB @@ -74,6 +98,18 @@ class Reception(BaseModel): patient = ForeignKeyField(Patient, backref='receptions', on_delete='CASCADE') time = DateTimeField() attended = BooleanField(default=False) +class DiagnosisCategory(BaseModel): + id = AutoIncrementField() + parent = ForeignKeyField('self', null=True, backref='subcat') + title = TextField() +class Diagnosis(BaseModel): + id = AutoIncrementField() + category = ForeignKeyField(DiagnosisCategory, backref='diagnosis') + code = CharField(32) + title = TextField() +class DiagnosisIndex(BaseFTSModel): + rowid = RowIDField() + title = SearchField() class ReceptionDiagnosis(BaseModel): id = AutoIncrementField() reception = ForeignKeyField(Reception, backref='reception_diagnosisses', on_delete='CASCADE') @@ -106,6 +142,9 @@ db.create_tables([ CatalogIndex, CatalogRecord, CatalogRecordIndex, + DiagnosisCategory, + Diagnosis, + DiagnosisIndex, Reception, ReceptionDiagnosis, ReceptionAnamnesis, diff --git a/mods/files.py b/mods/files.py index d906a0c..480a02f 100644 --- a/mods/files.py +++ b/mods/files.py @@ -1,5 +1,6 @@ import os resource_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'res') +init_db_dir = os.path.join(resource_dir, 'initdb') ui_dir = os.path.join(resource_dir, 'ui') icon_dir = os.path.join(resource_dir, 'icons') list_row_file = os.path.join(ui_dir, 'list_row.glade') diff --git a/mods/settings.py b/mods/settings.py index 8714206..59cc859 100644 --- a/mods/settings.py +++ b/mods/settings.py @@ -1,4 +1,4 @@ -from mods.db import db, Settings +from mods.db import db, Settings, Diag, DiagCategory, diag_db, Diagnosis, DiagnosisCategory, DiagnosisIndex # Имена ключей параметров S_KEY_RECEPTION_LIST = 'reception_list' @@ -38,3 +38,25 @@ with db.atomic(): q = Settings.select().where(Settings.key == S_KEY_RECEPTION_LIST) if not len(q): s_set_reception_list([8,0], [17,0], 30) +# Загрузка диагнозов МКБ 10 +q = Diagnosis.select() +if not len(q): + diag_db.connect() + __root_cat_map_ = {} + __subcat_map_ = {} + for root_cat in DiagCategory.select().where(DiagCategory.parent == None): + __root_cat_ = DiagnosisCategory.create(title=root_cat.title) + __root_cat_map_[root_cat] = __root_cat_ + for root_cat in __root_cat_map_.keys(): + for sc in DiagCategory.select().where(DiagCategory.parent == root_cat): + __subcat_ = DiagnosisCategory.create(parent=__root_cat_map_[root_cat], title=sc.title) + __subcat_map_[sc] = __subcat_ + for diag in Diag.select().where(Diag.category == sc): + new_diag = Diagnosis.create(category=__subcat_map_[sc], code=diag.code, title=diag.title) + DiagnosisIndex.insert({ + DiagnosisIndex.rowid: new_diag.id, + DiagnosisIndex.title: new_diag.title + }).execute() + del __subcat_map_ + del __root_cat_map_ + diag_db.close() diff --git a/res/initdb/diag.db b/res/initdb/diag.db new file mode 100644 index 0000000..50fd2b4 Binary files /dev/null and b/res/initdb/diag.db differ