From 1a45238dfca7473e38a93770d79bf9e7927e9ba8 Mon Sep 17 00:00:00 2001 From: Miwory Date: Tue, 2 Dec 2025 11:38:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=82=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 10 + pyproject.toml | 2 + src/apps/remd/dependencies.py | 33 + src/apps/remd/xls/110.xsl | 1221 +++++++++++ src/apps/remd/xls/111.xsl | 1928 +++++++++++++++++ src/apps/remd/xls/119.xsl | 1374 ++++++++++++ src/apps/remd/xls/122.xsl | 1161 +++++++++++ src/apps/remd/xls/148.xsl | 2019 ++++++++++++++++++ src/apps/remd/xls/75.xsl | 1329 ++++++++++++ src/apps/remd/xls/92.xsl | 3702 +++++++++++++++++++++++++++++++++ src/apps/users/v1/router.py | 36 +- src/core/log.py | 17 + 12 files changed, 12825 insertions(+), 7 deletions(-) create mode 100644 src/apps/remd/dependencies.py create mode 100644 src/apps/remd/xls/110.xsl create mode 100644 src/apps/remd/xls/111.xsl create mode 100644 src/apps/remd/xls/119.xsl create mode 100644 src/apps/remd/xls/122.xsl create mode 100644 src/apps/remd/xls/148.xsl create mode 100644 src/apps/remd/xls/75.xsl create mode 100644 src/apps/remd/xls/92.xsl diff --git a/Dockerfile b/Dockerfile index 4c57601..fc399fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -67,6 +67,16 @@ FROM builder-base AS production WORKDIR /app +# ────────────────────── WEASYPRINT SYSTEM DEPENDENCIES ────────────────────── +# These are the exact packages required for WeasyPrint to work on Debian Bookworm +RUN apt-get update && \ + apt-get install -y gcc libpq-dev \ + libcairo2 libcairo2-dev libpangocairo-1.0-0 weasyprint && \ + apt clean && \ + rm -rf /var/cache/apt/* + +# ───────────────────────────────────────────────────────────────────────────── + RUN chown -R appuser:appuser /app COPY --from=python-base /app/.python /app/.python diff --git a/pyproject.toml b/pyproject.toml index cf65f89..f558ccf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,8 @@ dependencies = [ "pyjwt==2.10.1", "xmltodict==1.0.2", "python-multipart==0.0.20", + "weasyprint==66.0", + "lxml==6.0.2; sys_platform != 'win32'", # CLI "typer-slim==0.16.1", ] diff --git a/src/apps/remd/dependencies.py b/src/apps/remd/dependencies.py new file mode 100644 index 0000000..53b8fd9 --- /dev/null +++ b/src/apps/remd/dependencies.py @@ -0,0 +1,33 @@ +from anyio import Path +from fastapi import HTTPException +from lxml import etree # type: ignore +from weasyprint import HTML # type: ignore + + +async def get_parsable_ids(): + parsable_files_dir = await Path('/app/apps/remd/xls').resolve() + parsable_ids: list[str] = [ + file.name.split('.')[0] + async for file in parsable_files_dir.iterdir() + if await file.is_file() + ] + + return parsable_ids + + +async def convert_aemd_to_pdf(xml_str: bytes, docKind: str): + xml = etree.fromstring(xml_str) # type: ignore + xsl = etree.parse(f'/app/apps/remd/xls/{docKind}.xsl') # type: ignore + transform = etree.XSLT(xsl) # type: ignore + + html = transform(xml) # type: ignore + html_str = etree.tostring( # type: ignore + html, pretty_print=True, encoding='unicode', method='html' + ) + + pdf = HTML(string=html_str).write_pdf() # type: ignore + + if not pdf: + raise HTTPException(status_code=500, detail='PDF not generated') + + return pdf diff --git a/src/apps/remd/xls/110.xsl b/src/apps/remd/xls/110.xsl new file mode 100644 index 0000000..7faff1a --- /dev/null +++ b/src/apps/remd/xls/110.xsl @@ -0,0 +1,1221 @@ + + + + + + + + + + + + + + + + + +
+

+ + + + + + + + +

+

+ + + + + + + + +

+ + +

+ ОГРН: + +

+
+
+ + +

+ Контакты: + + + +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ + + + + +

+
+

+ Полис ОМС +

+

+ + + + + + + - + + +

+
+

+ Дата рождения (возраст) +

+

+ + + + +   + ( + + + + + + ) + + + - + + +

+
+

+ СНИЛС +

+

+ + + + + +

+
+

+ Пол +

+

+ + + + + + - + + +

+
+

+ Номер карты +

+

+ + + + + + - + + +

+
+

+ Адрес постоянной регистрации +

+

+ + + + + + - + + +

+
+

+ Адрес фактического проживания +

+

+ + + + + + - + + +

+
+

+ Документ, удостоверяющий личность +

+

+ + +   + + +   + + +   + + +   + + + + +   + + + Дата выдачи: + + + + + + - + + +

+
+

+ Контактные данные +

+ +

+ + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + +
+

+ Сведение о направлении +

+

+ +

+
+

+ Порядок обращения +

+

+ + + + + + - + + +

+
+

+ Место проведения +

+

+ + + + + + - + + +

+
+

+ Дата проведения +

+

+ + + + + + + + + + + + + + - + + +

+
+

+ Диагноз +

+

+ + - + +   + + + +
Врачебное описание нозологической единицы: + +
+
+

+
+

+ Исследование +

+ +

+ + + + +   + + + + + + ( + :  +   + + ) + + +

+
+
+ + + + + + + + + + + + + + + + + + +
+

+ Витальные параметры +

+
ПараметрЗначениеЕд. изм.
+

+ +

+
+

+ +

+
+

+ +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Объективизированная оценка состояния больного (Сведения о результатах расчета прогностических шкал) +

+
ДатаНазвание шкалыРезультат расчетаЕд. изм.Интерпретация результатаФИО мед. работника
+

+ + + +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+ +

+
+
+
+ + + + + + + +
+

+ Протокол исследования +

+

+ + + + + + - + + +

+
+

+ Заключение +

+

+ + + + + + - + + +

+
+ + + + + + + + + + + + + + +
+

+ Рекомендации +

+

+ + + + + + - + + +

+
+

+ Выявленные патологии +

+ +

+ +

+
+
+

+ Оказанные услуги +

+ + + +

+   + + от + + +
+

+
+
+ + - + +
+
+ + + + + +
+

+ Медицинские работники, проводившие исследование +

+

+ + + +

+
+ +

+ + + + - + + +

+
+

+ Дата составления +

+

+ + + + + + + + - + + +

+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + . + + + + + + + + + + . + + + + . + + +   + + + + : + + + + + + + + +
+ + diff --git a/src/apps/remd/xls/111.xsl b/src/apps/remd/xls/111.xsl new file mode 100644 index 0000000..fb77c05 --- /dev/null +++ b/src/apps/remd/xls/111.xsl @@ -0,0 +1,1928 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + +
+ + + , + + + + + + , + + + +
+
+ + +
+ + + ОГРН: + + ; + + + + + ОГРНИП: + + ; + + + + + ОКПО: + + ; + + + + + ОКАТО: + + ; + + +
+
+ + +
Лицензия на осуществление медицинской деятельности: + + + +
+
+ + +
+ + + + + + +
+
+

+
+ +

+ Для предоставления в: + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ ФИО: + + + + + + + + + + +

+

+ Дата рождения: + + + + + + + + + ( + + + + + + ) + + + + +

+

+ + + Пол: + + + + Пол: + + + + + +

+
+

+   +

+

+ + + Полис ОМС: + + + + + +

+

+ + + СНИЛС: + + + +

+ + +

+ + + + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

+ + + + : + + + серия + + + + + номер + + от + + + + + + выдан + + + + + + , код подразделения + + + + + +

+
+

+ + + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Законный (уполномоченный) представитель пациента +

+ + +

+ ФИО: + + + + ( + + ) + + +

+
+
+ + +

+ Наименование организации: + +

+
+
+ + +

+ Дата рождения: + + + +

+
+
+ + +

+ СНИЛС: + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

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

+
+

+ + + Документ, удостоверяющий полномочия: + + + + + + + + + + + + + + + + + + + + + + + Дата выдачи: + + + + + + Документ, удостоверяющий полномочия: + + + + + +

+
+

+ + + + + + +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Шифр по МКБ-10 +

+ + + +

+ + + +

+
+
+ + - + +
+
+

+ Вид обращения +

+

+ + + + + + - + + +

+
+

+ Заболевание выявлено при профилактическом осмотре или обращении за лечением +

+

+ +

+
+

+ Место проведения +

+

+ + + + + + - + + +

+
+

+ Начало диспансерного наблюдения +

+

+ + + + + + + + - + + +

+
+

+ Прекращение диспансерного наблюдения +

+

+ + + +

+
+

+ Следующая явка +

+

+ +

+
+

+ Причина прекращения диспансерного наблюдения +

+

+ +

+
+ + + + + + +
+

+ Льготы +

+ +

+ + : + +
+

+
+
+
+
+ + + + + + + +
+

+ Анамнез заболевания +

+

+ + + + + + - + + +

+
+

+ Анамнез жизни +

+

+ + + + + + - + + +

+ + +

+ Инвалидность: +

+ +

+ . + , + + ( + + + + + + + + + + + + ) + + +
Степень утраты профессиональной трудоспособности(%): + + % +
+
+ + +
Срок, на который установлена степень утраты профессиональной трудоспособности: + +
+
+

+
+
+
+ + +

+ Потенциально-опасные для здоровья социальные факторы: +

+ +

+ +

+
+
+
+ + +

+ Вредные производственные факторы: +

+ +

+ +

+
+
+
+ + +

+ Вредные привычки и зависимости: +

+ +

+ +

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Витальные параметры +

+ + +

+ + + + + + + + + + + + + + + + + +
Дата измеренияПараметрЗначениеЕд. изм.Комментарий
+

+ + + +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + + + +
Дата измеренияПараметрЗначениеЕд. изм.
+

+ + + +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+
+
+
+

+ +

+
+

+ + + + + +

+

+ + + + + +

+
+

+ + + + + +

+

+ + + + + +

+
+

+ + + + + +

+

+ + + + + +

+
+

+ +

+

+ + + + + +

+
+

+ +

+

+ + + + + +

+
+ + + + + + + + + + + +
+

+ Диагнозы +

+

+ + + + + + + + + + +

+
+

+ Режим и рекомендации +

+

+ +

+
+ + + + + + +
+

+ Оказанные услуги +

+ +

+ + + + + + от + + + + + +

+
+
+
+
+ + + + + + + + + + +
+

+ Связанные документы +

+ +
+

+ + + + от + + + + + + + + ( + + ) + + + + + + + + +

+

+ +

+
+
+
+ + + + + + + + + + + + +
+

+ Консультацию провел +

+

+ + + + , + + + +

+
+

+ Дата составления +

+

+ + + + + + + +

+
+

+ Документ заверил +

+

+ + + + , + + + +

+
+ + +
+ + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Тел: + + + ; + + + + + E-mail: + + + ; + + + + + Сайт: + + + ; + + + + + Факс: + + + ; + + + + + + + + + + Номер амбулаторной карты: + + + Номер стационарной карты: + + + Номер медицинской карты: + + + Номер медицинской карты: + + + + + + + + Недопустимое значение + + + Нет информации + + + Другое + + + Минус бесконечность + + + Плюс бесконечность + + + Неприменимо + + + Неизвестно + + + Запрошено, но неизвестно + + + Временно недоступно + + + Не запрашивалось + + + Трудноразличимо + + + Скрыто + + + Извлекаемое значение + + + Кодирование не проводилось + + + Достаточное количество + + + +
+ + diff --git a/src/apps/remd/xls/119.xsl b/src/apps/remd/xls/119.xsl new file mode 100644 index 0000000..b56b4d6 --- /dev/null +++ b/src/apps/remd/xls/119.xsl @@ -0,0 +1,1374 @@ + + + + + + + + + + + + + + + + + +
+

+ + + + + + + + +

+

+ + + + + + + + +

+ + +

+ ОГРН: + +

+
+
+ + +

+ Контакты: + + + +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ + + + + +

+
+

+ Полис ОМС +

+

+ + + + + + + - + + +

+
+

+ Дата рождения (возраст) +

+

+ + + + +   + ( + + + + + + ) + + + - + + +

+
+

+ СНИЛС +

+

+ + + + + +

+
+

+ Пол +

+

+ + + + + +

+
+

+ Номер карты +

+

+ + + + + + - + + +

+
+

+ Адрес постоянной регистрации +

+

+ + + + + + - + + +

+
+

+ Адрес фактического проживания +

+

+ + + + + + - + + +

+
+

+ Документ, удостоверяющий личность +

+

+ + +   + + +   + + +   + + +   + + + + +   + + + Дата выдачи: + + + + + + - + + +

+
+

+ Контактные данные +

+ +

+ + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Шифр по МКБ-10 +

+ + + +

+   + +
+

+
+
+ + - + +
+
+

+ Вид обращения +

+

+ +

+
+

+ Заболевание выявлено при профилактическом осмотре или обращении за лечением +

+

+ +

+
+

+ Место проведения +

+

+ + + + + + - + + +

+
+

+ Начало диспансерного наблюдения +

+

+ + + + + + + + - + + +

+
+ + +

+ Дата прекращения диспансерного наблюдения +

+

+ + + + + + + + - + + +

+
+
+
+

+ Причина прекращения диспансерного наблюдения +

+

+ +

+
+

+ Следующая явка +

+

+ +

+
+ + + + + + +
+

+ Льготы +

+ +

+ + : + +
+

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + +
+

+ Анамнез заболевания +

+

+ + + + + + - + + +

+
+

+ Анамнез жизни +

+

+ + + + + + - + + +

+

+ + +

+

+ Инвалидность: +

+ +

+ . + , + + ( + + + + + + + + + + + + ) +

+
+
+

+ Потенциально-опасные для здоровья социальные факторы: +

+ +

+ +

+
+
+

+ Вредные производственные факторы: +

+ +

+ +

+
+
+

+ Вредные привычки и зависимости: +

+ +

+ +

+
+
+ + + + + + + + + + + + + + + + +

+ + + + + + + +
+

+ Витальные параметры +

+

+

ПараметрЗначениеЕд. изм.
+

+ +

+
+

+ +

+
+

+ +

+
+

+ + + + + +

+

+ + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + +

+

+ + + + + +

+
+

+ + + + + +

+

+ + + + + +

+
+

+ Выявленные патологии +

+ +

+   + +

+
+
+

+ Результат консультации +

+

+ Направление: + +

+
+ + + + + + + +
+

+ Диагнозы +

+

+ + + + + + - + + +

+
+

+ Режим и рекомендации +

+

+ + + + + + - + + +

+
+ + + + + + +
+

+ Связанные документы +

+ +

+
+ + + Серия: +   + + + + + Номер: +   + + + Дата: + + + +

+
+
+
+
+ + + + + +
+

+ Консультацию провел +

+

+ + + +
+ +
+ + - + +
+

+
+

+ Дата составления +

+

+ + + + + + + + - + + +

+
+ + +
+ + + + + + + + + + + ---- + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + -- + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + . + + + + + + + + +
diff --git a/src/apps/remd/xls/122.xsl b/src/apps/remd/xls/122.xsl new file mode 100644 index 0000000..f9ddac4 --- /dev/null +++ b/src/apps/remd/xls/122.xsl @@ -0,0 +1,1161 @@ + + + + + + + + + + + + + + + + + +
+

+ + + + + + + + +

+

+ + + + + + + + +

+ + +

+ ОГРН: + +

+
+
+ + +

+ Контакты: + + + +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ + + + + +

+
+

+ Полис ОМС +

+

+ + + + + + + - + + +

+
+

+ Дата рождения (возраст) +

+

+ + + + +   + ( + + + + + + ) + + + - + + +

+
+

+ СНИЛС +

+

+ + + + + +

+
+

+ Пол +

+

+ + + + + +

+
+

+ Номер карты +

+

+ + + + + + - + + +

+
+

+ Адрес постоянной регистрации +

+

+ + + + + + - + + +

+
+

+ Адрес фактического проживания +

+

+ + + + + + - + + +

+
+

+ Документ, удостоверяющий личность +

+

+ + +   + + +   + + +   + + +   + + + + +   + + + Дата выдачи: + + + + + + - + + +

+
+

+ Контактные данные +

+ +

+ + + +

+
+
+ + + + + + + + + + +
+

+ Дата проведения +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ Группа здоровья пациента +

+

+ + + + + + - + + +

+
+

+ Статус диспансерного наблюдения +

+

+ + + + + + - + + +

+
+ + + + + + + +
+

+ Основное заболевание +

+ + + +

+   + +

+
+
+ + - + +
+
+

+ Сопутствующее заболевание +

+ + + +

+   + +

+
+
+ + - + +
+
+ + + + + + +
+

+ Витальные параметры +

+

+ + + + + + + + + + + + + + + + + +
ПараметрЗначениеЕд. изм.Референтный интервал
+

+ +

+
+

+ +

+
+

+ +

+
+

+ + + + + + + + + < + + + + +

+
+

+
+
+
+ + + + + + +
+

+ Выявленные факторы риска +

+

+ + + + : + + + + , + + + + + + +

+ +

+   + ( + + ) +

+
+
+
+
+ + + + + + +
+

+ Сведения о выданных направлениях +

+ +

+
+ Дата: + + + +

+
+
+
+
+ + + + + +
+

+ Документ составил +

+

+ + + +
+ +
+ + - + +
+

+
+

+ Дата составления +

+

+ + + + + + + + - + + +

+
+ + +
+ + + + + + + + + + + ---- + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + -- + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + . + + + + + + + + + + + + + + . + + + + . + + +   + + + + : + + + + +
+ + diff --git a/src/apps/remd/xls/148.xsl b/src/apps/remd/xls/148.xsl new file mode 100644 index 0000000..af4274e --- /dev/null +++ b/src/apps/remd/xls/148.xsl @@ -0,0 +1,2019 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + +
+ + + , + + + + + + , + + + +
+
+ + +
+ + + ОГРН: + + ; + + + + + ОГРНИП: + + ; + + + + + ОКПО: + + ; + + + + + ОКАТО: + + ; + + +
+
+ + +
Лицензия на осуществление медицинской деятельности: + + + +
+
+ + +
+ + + + + + +
+
+

+
+ +

+ Для предоставления в: + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + от + + + + + + + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ ФИО: + + + + + + + + + + +

+

+ Дата рождения: + + + + + + + + + ( + + + + + + ) + + + + +

+

+ + + Пол: + + + + Пол: + + + + + +

+
+

+   +

+

+ + + Полис ОМС: + + + + + +

+

+ + + СНИЛС: + + + +

+ + +

+ + + + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

+ + + + : + + + серия + + + + + номер + + от + + + + + + выдан + + + + + + , код подразделения + + + + + +

+
+

+ + + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Законный (уполномоченный) представитель пациента +

+ + +

+ ФИО: + + + + ( + + ) + + +

+
+
+ + +

+ Наименование организации: + +

+
+
+ + +

+ Дата рождения: + + + +

+
+
+ + +

+ СНИЛС: + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

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

+
+

+ + + Документ, удостоверяющий полномочия: + + + + + + + + + + + + + + + + + + + + + + + Дата выдачи: + + + + + + Документ, удостоверяющий полномочия: + + + + + +

+
+

+ + + + + + +

+
+
+
+ + + + + + + + + +
+

+ Срок действия рецепта +

+

+ + + + + + - + + +

+
+

+ Дата окончания действия рецепта +

+

+ + + + + + + + - + + +

+
+

+ По специальному назначению (Отметка) +

+

+ + Имеется + + + Отсутствует + +

+
+ + +

+ Приоритет исполнения рецепта +

+

+ +

+
+
+
+ + + + +
+

+ Рецепт +

+ + +

+ + + + + + + + + + + + + + + + + +
НазначеноПриемОсобые указанияКоличество назначенных дозПериодический отпуск
+

+ + + + [ + + ] + + + + + + + + +

+
+

+ + + Общая длительность приема: + + +
+
+ + Общая длительность приема: + + + + + + +
+
+
+ + + Путь введения: +
+
+
+ + По + + + + + + + + ед. + + + + + + + + + раза в + + + раз в + + + + + + 1 раз в + + + + + + + + с + + + + по + + + + + + в течение + + + + + +
+
+

+
+ +

+ +

+
+
+

+ +

+
+

+ + + + + + / + + + + + +

+
+

+
+ +

+ + + + + + + + + + + + + + + +
НазначеноПриемКоличество назначенных дозПериодический отпуск
+

+ + + + [ + + ] + + + + + + + + +

+
+

+ + + Общая длительность приема: + + +
+
+ + Общая длительность приема: + + + + + + +
+
+
+ + + Путь введения: +
+
+
+ + По + + + + + + + + ед. + + + + + + + + + раза в + + + раз в + + + + + + 1 раз в + + + + + + + + с + + + + по + + + + + + в течение + + + + + +
+
+

+
+

+ +

+
+

+ + + + + + / + + + + + +

+
+

+
+ +

+ + + + + + + + + + + + + + + +
НазначеноПриемОсобые указанияКоличество назначенных доз
+

+ + + + [ + + ] + + + + + + + + +

+
+

+ + + Общая длительность приема: + + +
+
+ + Общая длительность приема: + + + + + + +
+
+
+ + + Путь введения: +
+
+
+ + По + + + + + + + + ед. + + + + + + + + + раза в + + + раз в + + + + + + 1 раз в + + + + + + + + с + + + + по + + + + + + в течение + + + + + +
+
+

+
+ +

+ +

+
+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + +
НазначеноПриемКоличество назначенных доз
+

+ + + + [ + + ] + + + + + + + + +

+
+

+ + + Общая длительность приема: + + +
+
+ + Общая длительность приема: + + + + + + +
+
+
+ + + Путь введения: +
+
+
+ + По + + + + + + + + ед. + + + + + + + + + раза в + + + раз в + + + + + + 1 раз в + + + + + + + + с + + + + по + + + + + + в течение + + + + + +
+
+

+
+

+ +

+
+

+
+
+
+ + + + + + + + + + +
+

+ Связанные документы +

+ +
+

+ + + + от + + + + + + + + ( + + ) + + + + + + + + +

+

+ +

+
+
+
+ + + + + + + +
+

+ Рецепт выписал +

+

+ + + + , + + + +

+
+

+ Документ заверил +

+

+ + + + , + + + +

+
+ + +
+ + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Тел: + + + + доб.[ + + ] + + + + + + + ; + + + + доб.[ + + ] + + + + + + + + + E-mail: + + + ; + + + + + Сайт: + + + ; + + + + + Факс: + + + ; + + + + + + + + + + Номер амбулаторной карты: + + + Номер стационарной карты: + + + Номер медицинской карты: + + + Номер медицинской карты: + + + + + + + + Недопустимое значение + + + Нет информации + + + Другое + + + Минус бесконечность + + + Плюс бесконечность + + + Неприменимо + + + Неизвестно + + + Запрошено, но неизвестно + + + Временно недоступно + + + Не запрашивалось + + + Трудноразличимо + + + Скрыто + + + Извлекаемое значение + + + Кодирование не проводилось + + + Достаточное количество + + + +
+ + diff --git a/src/apps/remd/xls/75.xsl b/src/apps/remd/xls/75.xsl new file mode 100644 index 0000000..2cc1e90 --- /dev/null +++ b/src/apps/remd/xls/75.xsl @@ -0,0 +1,1329 @@ + + + + + + + + + + + + + + + + + +
+

+ + + + + + + + +

+

+ + + + + + + + +

+ + +

+ ОГРН: + +

+
+
+ + +

+ Контакты: + + + +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ + + + + +

+
+

+ Полис ОМС +

+

+ + + + + + + - + + +

+
+

+ Дата рождения (возраст) +

+

+ + + + + + ( + + + + + + ) + + + - + + +

+
+

+ СНИЛС +

+

+ + + + + +

+
+

+ Пол +

+

+ + + + + + - + + +

+
+

+ Номер карты +

+

+ + + + + + - + + +

+
+

+ Адрес постоянной регистрации +

+

+ + + + + + - + + +

+
+

+ Адрес фактического проживания +

+

+ + + + + + - + + +

+
+

+ Документ, удостоверяющий личность +

+

+ + +   + + +   + + +   + + +   + + + + + + + + + Дата выдачи: + + + + + + - + + +

+
+

+ Контактные данные +

+ +

+ + + +

+
+
+ + + + + + + +
+

+ Исследованные материалы +

+ + + +

+ + + + ( + + + + ) + + + . + +

+
+
+ + - + +
+
+

+ Оборудование и расходные материалы +

+

+ + + +

+ +

+ + + + - + + +

+
+ + + + + + +
+

+ Результаты лабораторных исследований +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПоказательЗначениеИнтерпретацияЕд. изм.Референтный диапазонКомментарий
+

+ +

+
+

+ +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ + + +

+
+

+ + + + + + + + + + + +

+
+

+ + + + - + + + + + + +

+
+

+ +

+
+

+ +

+
+

+
+
+
+ + + + + + + + + + + +
+

+ Заключение +

+

+ + + + + + - + + +

+
+

+ Оказанные услуги +

+ +

+ + + + от + + +
+

+
+
+ + + + + +
+

+ Медицинские работники, проводившие исследование +

+

+ + + +

+
+ +

+ + + + - + + +

+
+

+ Дата составления +

+

+ + + + + + + + - + + +

+
+ + +
+ + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + + -- + + + + + + + + + + + + -- + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + . + + + + + + + + + + + + + Ниже предела обнаружения + + + Сомнительный + + + Вне диапазона + + + Ожидаемый результат/значение + + + Повышенный + + + Критически повышенный + + + Значительно повышенный + + + Больше верхнего порога + + + Умеренно-устойчивый + + + Непоказательный + + + Не определенный + + + Выше предела обнаружения + + + Пониженный + + + Критически пониженный + + + Значительно пониженный + + + Меньше нижнего порога + + + Нормальный (в пределах референсного диапазона) + + + Не обнаружено + + + Отрицательный + + + Нет реакции + + + Нечувствительный при данных условиях + + + Положительный + + + Патологический (вне референсного диапазона) + + + Контроль качества не пройден + + + Устойчивый + + + Есть реакция + + + Чувствительный + + + Чувствительный-дозозависимый + + + Устойчивый к комбинации + + + Чувствительный к комбинации + + + Присутствуют цитотоксические субстанции + + + Значимо повысилось + + + Неожиданный результат/значение + + + Критически патологический (критически вне референсного диапазона) + + + Ухудшилось + + + Слабая реакция + + + Присутствуют антикомплиментарные субстанции + + + Улучшилось + + + Носитель + + + Значимо понизилось + + + Обнаружено + + + + + + + + Недопустимое значение + + + Нет информации + + + Другое + + + Минус бесконечность + + + Плюс бесконечность + + + Неприменимо + + + Неизвестно + + + Запрошено, но неизвестно + + + Временно недоступно + + + Не запрашивалось + + + Трудноразличимо + + + Скрыто + + + Извлекаемое значение + + + Кодирование не проводилось + + + Достаточное количество + + + +
+ + diff --git a/src/apps/remd/xls/92.xsl b/src/apps/remd/xls/92.xsl new file mode 100644 index 0000000..7d867b2 --- /dev/null +++ b/src/apps/remd/xls/92.xsl @@ -0,0 +1,3702 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + +
+ + + , + + + + + + , + + + +
+
+ + +
+ + + ОГРН: + + ; + + + + + ОГРНИП: + + ; + + + + + ОКПО: + + ; + + + + + ОКАТО: + + ; + + +
+
+ + +
Лицензия на осуществление медицинской деятельности: + + + +
+
+
+ + + + + + + + + +

+
+ +

+ Для предоставления в: + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + [Название вида медицинского документа] + + + +

+
+

+ Пациент +

+

+ ФИО: + + + + + + + + + + +

+

+ Дата рождения: + + + + + + + + + ( + + + + + + ) + + + + +

+

+ + + Пол: + + + + Пол: + + + + + +

+
+

+   +

+

+ + + Полис ОМС: + + + + + + ( + + ) + + + + +

+

+ + + СНИЛС: + + + +

+ + +

+ + + + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

+ Документ, удостоверяющий личность: + + + + + + + + + + + + + + + + + + + + + + + + Дата выдачи: + + + + + +

+
+

+ + + + + + +

+
+

+ Код льготы: + + + + + + ( + + + + + + + + ) + + + (действует до + + + + ) + + + + + + + ) + + + + ; + + + + + + ( + + + + + + + + ) + + + (действует до + + + + ) + + + + + + + ) + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Законный (уполномоченный) представитель пациента +

+ + +

+ ФИО: + + + + ( + + ) + + +

+
+
+ + +

+ Наименование организации: + +

+
+
+ + +

+ Дата рождения: + + + +

+
+
+ + +

+ СНИЛС: + +

+
+
+
+

+ Адрес по месту жительства (постоянной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес по месту пребывания (временной регистрации): + + + + , + + + + + + , + + + +

+
+

+ Адрес фактического проживания (пребывания): + + + + , + + + + + + , + + + +

+
+

+ + + Документ, удостоверяющий личность: + + + + + + + + + + + + + + + + + + + + + + Дата выдачи: + + + + + + Документ, удостоверяющий личность: + + + + + +

+
+

+ + + Документ, удостоверяющий полномочия: + + + + + + + + + + + + + + + + + + + + + + + Дата выдачи: + + + + + + Документ, удостоверяющий полномочия: + + + + + +

+
+

+ + + + + + +

+
+
+
+ + + + + + + + + + + + + + +
+

+ Обращение +

+

+ Тип обращения: + +

+

+ Даты случая: + + + + + + + + + + + +

+

+ Шифр МКБ данного случая: + + + +

+ + +

+ Результат обращения: + +

+
+
+ + +

+ Направление по завершению обращения: + +

+
+
+
+

+ Предварительный диагноз +

+

+ + + + + + + + + + + + + + + + + +
Вид нозологической единицы диагнозаКлиническая формулировка диагнозаКод по МКБ-10Диспансерное наблюдениеДополнительные сведения о заболевании
+

+ +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+ + +

+ +

+ + +

+ Причина прекращения: + +

+
+
+
+ +

+ - +

+
+
+
+ + +

+ Характер заболевания: + +

+
+
+ + +

+ Внешняя причина: + +

+
+
+ + +

+ Вид травмы по способу получения: + +

+
+
+
+

+
+

+ Заключительный диагноз +

+

+ + + + + + + + + + + + + + + + + +
Вид нозологической единицы диагнозаКлиническая формулировка диагнозаКод по МКБ-10Диспансерное наблюдениеДополнительные сведения о заболевании
+

+ +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+ + +

+ +

+ + +

+ Причина прекращения: + +

+
+
+
+ +

+ - +

+
+
+
+ + +

+ Характер заболевания: + +

+
+
+ + +

+ Внешняя причина: + +

+
+
+ + +

+ Вид травмы по способу получения: + +

+
+
+
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Аллергии и непереносимость +

+ + +

+ +

+
+
+ + +

+ + + + + + + + + + + + + + + + + + + +
Дата выявленияОписание агентаТип реакцииКлинические проявленияКомментарий
+

+ + + +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+

+ +

+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + + + + + +
Дата выявленияОписание агентаТип реакцииКлинические проявления
+

+ + + +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+

+ +

+
+

+
+
+
+

+ Социальный анамнез +

+ + +
+

+ Занятость +

+

+ + + + ( + + ) + + +

+
+

+ Инвалидность +

+

+ Группа инвалидности: + +

+ + +

+ Установлена: + +

+
+
+

+ Дата установления инвалидности: + + + +

+
+

+ Потенциально-опасные для здоровья социальные факторы +

+ +

+ +

+
+
+

+ Вредные производственные факторы +

+ +

+ +

+
+
+

+ Вредные привычки или зависимости +

+ +

+ +

+
+
+
+
+ + + + + + +
+

+ Посещения +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + ( + + ) + + , + +
Жалобы пациентаОбъективноЗаключениеРекомендацииОказанные услуги
+

+ +

+
+

+ +

+
+

+ +

+
+

+ + + + + + - + + +

+
+ +

+ + + + + + от + + + + + +

+
+
Предварительный диагноз
Вид нозологической единицы диагнозаКлиническая формулировка диагнозаКод по МКБ-10Диспансерное наблюдениеДополнительные сведения о заболевании
+

+ +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+ + +

+ +

+ + +

+ Причина прекращения: + +

+
+
+
+ +

+ - +

+
+
+
+ + +

+ Характер заболевания: + +

+
+
+ + +

+ Внешняя причина: + +

+
+
+ + +

+ Вид травмы по способу получения: + +

+
+
+
Заключительный диагноз
Вид нозологической единицы диагнозаКлиническая формулировка диагнозаКод по МКБ-10Диспансерное наблюдениеДополнительные сведения о заболевании
+

+ +

+
+

+ + + + ( + + ) + + + + + + + + +

+
+

+ +

+
+ + +

+ +

+ + +

+ Причина прекращения: + +

+
+
+
+ +

+ - +

+
+
+
+ + +

+ Характер заболевания: + +

+
+
+ + +

+ Внешняя причина: + +

+
+
+ + +

+ Вид травмы по способу получения: + +

+
+
+
+

+
+
+
+
+ + + + + + + + + + + + + + + + + +
+

+ Витальные параметры +

+

+ + + + + + + + + + + + + + + + + +
ДатаПараметрЗначениеЕд. изм.
+

+ + + +

+
+

+ + + + ( + + ) + + + + + [ + + ] + + +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ +

+
+

+
+

+ Вакцинация и иммунизация +

+

+ + + + + + + + + + + + + + + +
Дата вакцинацииИммунобиологический лекарственный препаратКомментарий
+

+ + + +

+
+

+ +

+
+

+ +

+
+
+ + + + + + + + + + + + +
Дата вакцинацииИммунобиологический лекарственный препарат
+

+ + + +

+
+

+ +

+
+
+
+

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Диагностические исследования и консультации +

+ + + +
+

+ + + + ( + + + + ) + + +

+

+ Приоритет: + +

+

+ Заключение: + +

+ + +

+ Медицинский работник: + + , + +

+
+
+
+

+ + + + + +

+ + +

+ +

+
+
+ + +

+ Заключение: + + + + ( + + + + ) + + +

+
+
+ + +

+ Автор заключения: + + , + +

+
+
+ + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ДатаПоказательЗначениеЕд. изм.ИнтерпретацияРеферентный интервалМатериалОборудованиеИсполнитель
+

+ + + +

+
+

+ +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ +

+
+

+ + + +

+
+

+ +

+
+

+ + + + + + + + + + + + +

+
+ +

+ +

+
+
+ +

+ + , + +

+
+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ДатаПоказательЗначениеЕд. изм.Референтный интервалМатериалОборудованиеИсполнитель
+

+ + + +

+
+

+ +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ +

+
+

+ +

+
+

+ + + + + + + + + + + + +

+
+ +

+ +

+
+
+ +

+ + , + +

+
+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ДатаПоказательЗначениеЕд. изм.ИнтерпретацияМатериалОборудованиеИсполнитель
+

+ + + +

+
+

+ +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ +

+
+

+ + + +

+
+

+ + + + + + + + + + + + +

+
+ +

+ +

+
+
+ +

+ + , + +

+
+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ДатаПоказательЗначениеЕд. изм.МатериалОборудованиеИсполнитель
+

+ + + +

+
+

+ +

+
+

+ + + + + + + + + + + + + + + + + Да + + + Нет + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+

+ +

+
+

+ + + + + + + + + + + + +

+
+ +

+ +

+
+
+ +

+ + , + +

+
+
+

+ +

+
+

+
+
+
+
+
+

+ + + + + + Иммуногистохимическое исследование + + + + + ( + + + + ) + + +

+

+ Приоритет: + +

+

+ Заключение: + +

+ + +

+ Медицинский работник: + + , + +

+
+
+
+

+ + , + + , + + + + ( + + + + ) + + +

+

+ +

+

+ Приоритет: + +

+

+ Состояние: + +

+ + +

+ Протокол консультации: + +

+
+
+

+ Заключение: + +

+ + +

+ Рекомендации: + +

+
+
+ + +

+ Выявленные патологии: + + + ; + + +

+
+
+ + +

+ Шифр по МКБ-10: + + + +

+
+
+ + +

+ Результат консультации: + +

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ +

+

+ + + + + + + + + + + + + +
+ +
+

+ +

+
+

+
+

+ +

+

+ + + + + + + + + + + + + +
+ +
+

+ +

+
+

+
+

+ + + + + + + + + + + ( + + + + ) + + +

+ + +

+ Аппаратура: + + + ; + + +

+
+
+ + +

+ Устройства и импланты: + + + ; + + +

+
+
+ + +

+ Анестезия: + + + ; + + +

+
+
+ + +

+ Медицинский работник: + + , + +

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+

+ + + + + + + + + + + ( + + + + ) + + +

+ + +

+ Устройства и импланты: + + + ; + + +

+
+
+ + +

+ Анестезия: + + + ; + + +

+
+
+ + +

+ Медицинский работник: + + , + +

+
+
+
+

+ Оказанные услуги +

+ + +

+ + + + + + + + + + + + + +
Дата оказания услугиОказанная медицинская услугаПримечание
+

+ + + +

+
+

+ + + +

+
+

+ +

+
+

+
+ +

+ + + + + + + + + + + +
Дата оказания услугиОказанная медицинская услуга
+

+ + + +

+
+

+ + + +

+
+

+
+
+
+
+
+ + + + + + + + + + +
+

+ Связанные документы +

+ +
+

+ + + + от + + + + + + + + ( + + ) + + + + + + + + +

+

+ +

+
+
+
+ + + + + + + + + + + + +
+

+ Документ составил +

+

+ + + + , + + + +

+
+

+ Дата составления +

+

+ + + + + + + +

+
+

+ Документ заверил +

+

+ + + + , + + + +

+
+ + +
+ + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + января + + + Февраля + + + марта + + + апреля + + + мая + + + июня + + + июля + + + августа + + + сентября + + + октября + + + ноября + + + декабря + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + год + + + года + + + лет + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Тел: + + + + доб.[ + + ] + + + + + + + ; + + + + доб.[ + + ] + + + + + + + + + E-mail: + + + ; + + + + + Сайт: + + + ; + + + + + Факс: + + + ; + + + + + + + + + + Номер амбулаторной карты: + + + Номер стационарной карты: + + + Номер медицинской карты: + + + Номер медицинской карты: + + + + + + + + Недопустимое значение + + + Нет информации + + + Другое + + + Минус бесконечность + + + Плюс бесконечность + + + Неприменимо + + + Неизвестно + + + Запрошено, но неизвестно + + + Временно недоступно + + + Не запрашивалось + + + Трудноразличимо + + + Скрыто + + + Извлекаемое значение + + + Кодирование не проводилось + + + Достаточное количество + + + + + + + + Ниже предела обнаружения + + + Сомнительный + + + Вне диапазона + + + Ожидаемый результат/значение + + + Повышенный + + + Критически повышенный + + + Значительно повышенный + + + Больше верхнего порога + + + Умеренно-устойчивый + + + Непоказательный + + + Не определенный + + + Выше предела обнаружения + + + Пониженный + + + Критически пониженный + + + Значительно пониженный + + + Меньше нижнего порога + + + Нормальный (в пределах референсного диапазона) + + + Не обнаружено + + + Отрицательный + + + Нет реакции + + + Нечувствительный при данных условиях + + + Положительный + + + Патологический (вне референсного диапазона) + + + Контроль качества не пройден + + + Устойчивый + + + Есть реакция + + + Чувствительный + + + Чувствительный-дозозависимый + + + Устойчивый к комбинации + + + Чувствительный к комбинации + + + Присутствуют цитотоксические субстанции + + + Значимо повысилось + + + Неожиданный результат/значение + + + Критически патологический (критически вне референсного диапазона) + + + Ухудшилось + + + Слабая реакция + + + Присутствуют антикомплиментарные субстанции + + + Улучшилось + + + Носитель + + + Значимо понизилось + + + Обнаружено + + + +
+ + diff --git a/src/apps/users/v1/router.py b/src/apps/users/v1/router.py index cc1d422..a06bc6e 100644 --- a/src/apps/users/v1/router.py +++ b/src/apps/users/v1/router.py @@ -1,3 +1,5 @@ +import base64 +import io from datetime import UTC, datetime from json import dumps from logging import getLogger @@ -5,8 +7,10 @@ from secrets import token_urlsafe from typing import Annotated from fastapi import APIRouter, Body, Depends, UploadFile, status +from fastapi.responses import StreamingResponse from orjson import loads +from apps.remd.dependencies import convert_aemd_to_pdf, get_parsable_ids from apps.tdn.auth import token from apps.users.auth import login from apps.users.models import User @@ -28,13 +32,13 @@ router = APIRouter( ) -@cache_response(ttl=600, namespace='main') @router.get( '/getProfile', responses={ status.HTTP_200_OK: {'model': vs.ProfileModel}, }, ) +@cache_response(ttl=600, namespace='main') async def get_profile(user: Annotated[User, Depends(login)]): """ Get profile of user. @@ -42,13 +46,13 @@ async def get_profile(user: Annotated[User, Depends(login)]): return await c.vitacore_api.getProfile(user.vita_id) -@cache_response(ttl=3600, namespace='main') @router.get( '/getDepartments', responses={ status.HTTP_200_OK: {'model': vs.OrganizationsModel}, }, ) +@cache_response(ttl=3600, namespace='main') async def get_departments(): """ Get list of departments. @@ -56,10 +60,10 @@ async def get_departments(): return await c.vitacore_api.getDepartments() -@cache_response(ttl=3600, namespace='main') @router.get( '/getWorkers', responses={status.HTTP_200_OK: {'model': vs.WorkersModel}} ) +@cache_response(ttl=3600, namespace='main') async def get_workers( user: Annotated[User, Depends(login)], departmentId: str ): @@ -69,11 +73,11 @@ async def get_workers( return await c.vitacore_api.getWorkers(departmentId) -@cache_response(ttl=3600, namespace='main') @router.get( '/getSpecs', responses={status.HTTP_200_OK: {'model': vs.SpecsV021Model}}, ) +@cache_response(ttl=3600, namespace='main') async def get_specs(user: Annotated[User, Depends(login)]): """ Get list of specialties. @@ -198,7 +202,10 @@ async def queue(_: Annotated[User, Depends(login)]): @router.get('/aemd') -async def get_aemd(user: Annotated[User, Depends(login)]): +async def get_aemd( + user: Annotated[User, Depends(login)], + parsable_ids: Annotated[list[str], Depends(get_parsable_ids)], +): profile = await c.vitacore_api.getProfile(user.vita_id) snils = profile.SNILS.replace('-', '').replace(' ', '') docs = await c.aemd_api.searchRegistryItem(patient_snils=snils) @@ -206,6 +213,9 @@ async def get_aemd(user: Annotated[User, Depends(login)]): return_items: list[s.AEMDReturnFile] = [] for item in items: + if item['DocKind'] not in parsable_ids: + continue + is_cached = await cache.get(f'aemd:{user.vita_id}:{item["emdrId"]}') return_items.append( @@ -232,13 +242,25 @@ async def post_aemd(user: Annotated[User, Depends(login)], emdrId: str): @router.get('/aemd/{emdrId}') -async def get_aemd_file(user: Annotated[User, Depends(login)], emdrId: str): +async def get_aemd_file( + user: Annotated[User, Depends(login)], emdrId: str, docKind: str +): data = await cache.get(f'aemd:{user.vita_id}:{emdrId}') if not data: raise e.NotFoundException(status_code=404, detail='File not found') - return loads(data) + b64 = loads(data)['data'] + decoded = base64.b64decode(b64) + pdf = await convert_aemd_to_pdf(decoded, docKind) + + return StreamingResponse( + io.BytesIO(pdf), + media_type='application/pdf', + headers={ + 'Content-Disposition': f'attachment; filename="{emdrId}.pdf"' + }, + ) @router.post('/measurement', status_code=status.HTTP_202_ACCEPTED) diff --git a/src/core/log.py b/src/core/log.py index 4d80edb..89cccdc 100644 --- a/src/core/log.py +++ b/src/core/log.py @@ -26,9 +26,21 @@ class Config: def __init__(self): self.version = 1 self.disable_existing_loggers = False + self.formatters = self._get_formatters() self.handlers = self._get_handlers() self.loggers = self._get_loggers() + @staticmethod + def _get_formatters() -> dict[str, Any]: + # Common formatter that includes logger name + fmt = '%(asctime)s | %(levelname)-8s | %(message)s' + return { + 'default': { + 'format': fmt, + 'datefmt': '%Y-%m-%d %H:%M:%S', + } + } + @staticmethod def _get_handlers(): handlers: dict[str, Any] = { @@ -36,6 +48,7 @@ class Config: 'class': 'logging.StreamHandler', 'level': logging.INFO, 'stream': 'ext://sys.stderr', + 'formatter': 'default', } } @@ -53,12 +66,16 @@ class Config: }, } + loggers['fontTools'] = {'level': logging.CRITICAL, 'propagate': False} + loggers['weasyprint'] = {'level': logging.CRITICAL, 'propagate': False} + return loggers def render(self): return { 'version': self.version, 'disable_existing_loggers': self.disable_existing_loggers, + 'formatters': self.formatters, 'handlers': self.handlers, 'loggers': self.loggers, }