Files
HospitalAssistantBackend/src/clients/vitacore/schema.py

383 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime
from pydantic import BaseModel, Field
class TrustedPersonModel(BaseModel):
parentSnils: str = Field(
title='СНИЛС представителя', examples=['156-125-394 57']
)
represType: str = Field(
title='Вид родства (Мать/Отец/Иной родственник/Не родственник)',
examples=['Мать'],
)
fullName: str = Field(
title='ФИО представителя', examples=['Тестова Тест Тестовна']
)
phone: str = Field(
title='Мобильный телефон представителя',
examples=['+7 (999) 112-33-21'],
)
IsGuardian: bool = Field(title='Флаг Опекун', examples=['true'])
IsTrustee: bool = Field(title='Флаг Попечитель', examples=['true'])
status: bool = Field(
title='Флаг Текущий представитель',
examples=['false'],
)
class ProfileModel(BaseModel):
id: str = Field(
title='Идентификатор пациента',
examples=['b62e9f22-a871-4c52-96d6-559c707a716d'],
)
SNILS: str = Field(title='СНИЛС', examples=['000-000-600 18'])
lastName: str = Field(title='Фамилия', examples=['Тестовый'])
firstName: str = Field(title='Имя', examples=['Пациент'])
middleName: str = Field(title='Отчество', examples=['Ребенок'])
birthDate: str = Field(title='Дата рождения', examples=['2024-10-16'])
gender: str = Field(title='Пол', examples=['М'])
docType: str = Field(
title='Тип документа',
examples=['Свидетельство о рождении, выданное в РФ'],
)
docSer: str = Field(title='Серия документа', examples=['III-КБ'])
docNum: str = Field(title='Номер документа', examples=['999999'])
# ENP: str = Field(
# title='Единый номер полиса ОМС (16-ти значный)', # noqa: RUF003
# examples=['?'],
# )
addressReal: str = Field(
title='Адрес проживания',
examples=[
'420000, Татарстан Респ, г.Казань, ул.Магистральная (Большие Клыки), д.1, кв.1' # noqa: E501
],
)
# attachBranchId: str = Field(
# title='Идентификатор СТП прикреплния',
# examples=['string'],
# )
# attachState: str = Field(
# title='Номер участка',
# examples=['99'],
# )
trustedPersons: list[TrustedPersonModel] = Field(
title='Информация о представителе',
)
class DepartmentAddressModel(BaseModel):
type: str = Field(
title='для МО: «Юридический», для филиалов «Фактический»',
examples=['«Юридический»'],
)
display: str = Field(
title='Адрес строкой',
examples=['420097, г.Казань, ул.Заслонова, д.5'],
)
latitude: float | None = Field(
title='Широта, при наличии', examples=[55.789], default=None
)
longitude: float | None = Field(
title='Долгота, при наличии', examples=[37.789], default=None
)
class DepartmentModel(BaseModel):
id: str = Field(
title='Идентификатор МО/Филиала',
examples=['a3677271-3385-4f27-a65d-c3430b7c61c2'],
)
OID: str = Field(
title='OID МО / Филиала', examples=['1.2.643.5.1.13.13.12.2.16.1084']
)
parentId: str | None = Field(
title='Идентификатор вышестоящего подразделения',
examples=['a3677271-3385-4f27-a65d-c3430b7c61c2'],
)
code: str = Field(
title='Региональный код или код ТФОМС',
examples=['0000000000'],
)
fullname: str = Field(
title='Полное наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
shortname: str = Field(
title='Краткое наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
type: str = Field(
title='Тип подразделения (для МО: «Юридический»'
', для филиалов: Стационар / Поликлиника / ФАП / Амбулатория)',
examples=['Юридическое лицо'],
)
inn: str = Field(title='ИНН', examples=['0000000000'])
kpp: str = Field(title='КПП', examples=['0000000000'])
ogrn: str = Field(title='ОГРН', examples=['1149204047816'])
address: list[DepartmentAddressModel]
class WorkersPositionModel(BaseModel):
id: str = Field(
title='Идентификатор сотрудника в связке с должностью',
examples=['41019'],
)
dateBegin: datetime = Field(
title='Дата приёма на работу', examples=['01.08.2022']
)
departmentId: str = Field(
title='ID ФИЛИАЛА',
examples=['10ea04ca-339a-4867-aab4-d9a83b7e9098'],
)
departmentName: str = Field(
title='Краткое наименование филиала',
examples=['Поликлиника'],
)
positionName: str = Field(
title='Тип должности.Наименование (POST_TYPE)',
examples=['Врач-онколог'],
)
positionFedCode: str = Field(
title='Тип должности.Код (POST_TYPE)',
examples=['3037'],
)
positionRegName: str | None = Field(
title='ФРМР. Должности медицинского персонала',
examples=['врач-онколог'],
)
positionSpecialityCode: str = Field(
title='Код специальности по V021',
examples=['41'],
)
positionSpecialityName: str = Field(
title='Наименование специальности по V021',
examples=['Онкология'],
)
rate: float = Field(
title='Ставка',
examples=[0.5],
)
class WorkersModel(BaseModel):
id: str = Field(
title='Идентификатор сотрудника',
examples=['dc911302-5044-46f4-b935-c6ffd85eb68f'],
)
SNILS: str = Field(
title='СНИЛС',
examples=['059-486-659 26'],
)
firstName: str = Field(title='Имя', examples=['Владимир'])
lastName: str = Field(title='Фамилия', examples=['Камашев'])
middleName: str = Field(title='Отчество', examples=['Михайлович'])
birthDate: datetime = Field(title='Дата рождения', examples=['30.05.1961'])
positions: list[WorkersPositionModel]
class SpecialityV021Model(BaseModel):
SpecialityID: str = Field(
title='Код спциальности по справочнику V021', examples=['1']
)
SpecialityName: str = Field(
title='Наимнование спциальности по справочнику V021',
examples=['Авиационная и космическая медицина'],
)
class SpecsV021Model(BaseModel):
SpecialitiesV021: list[SpecialityV021Model]
class EntryModel(BaseModel):
DateTime: datetime = Field(
title='Дата и время записи',
examples=['2022-08-01T00:00:00.000Z'],
)
TicketType: str = Field(title='Тип талона', examples=['Первичный'])
EntryPlace: str = Field(
title='Место записи',
examples=['Регистратура'],
)
EntryType: str = Field(
title='Тип записи', examples=['Запись на прием к врачу']
)
Place: str = Field(
title='Кабинет приёма',
examples=['6'],
)
ResourceName: str = Field(
title='ФИО врача или наимнование кабинета полностью',
examples=['Сиразетдинов Рамзис Халафутдинович'],
)
Speciality: str = Field(
title='Специальность',
examples=['Врач общей практики (семейный врач)'],
)
Branch: str = Field(
title='Подразделение',
examples=['Главное здание'],
)
LpuName: str = Field(
title='Наименование МО',
examples=['ГАУЗ Азнакаевская ЦРБ'],
)
class EntriesModel(BaseModel):
Entries: list[EntryModel]
class VaccsReportModel(BaseModel):
content: str = Field(
title='Содержимое документа в формате .doc '
'(сжатое методом кодирования Base64)'
)
class MedExamItemModel(BaseModel):
AgeGroupName: str = Field(
title='Наименование возрастной группы',
examples=['ДВН 1 этап. приказ 404н'],
)
# AgeGroupCriteria
Required: str = Field(
title='Обязательность',
examples=['Обязательный/Дополнительный'],
)
Type: str = Field(
title='Тип',
examples=['Специальность/Услуга'],
)
MedicalServiceCode: str = Field(
title='Код услуги',
examples=['B04.010.002'],
)
MedicalServiceName: str = Field(
title='Наименрование услуги',
examples=['Осмотр фельдшером (акушеркой) или врачом акушером'],
)
SpecialityName: str = Field(
title='Специальность',
examples=['Акушер-гинеколог'],
)
class MedExamTypeModel(BaseModel):
Name: str = Field(
title='Наименование медосмотра',
examples=['ДВН 1 этап. приказ 404н'],
)
Code: str = Field(
title='Код медосмотра',
examples=['024'],
)
MedExamItems: list[MedExamItemModel]
class MedExamDictModel(BaseModel):
MedExamTypes: list[MedExamTypeModel]
class ResultModel(BaseModel):
Resource: str = Field(title='Врач', examples=['Изотова Г.М.'])
ExaminationId: str = Field(
title='Идентификатор осмотра',
examples=['4d8550e6-7ad8-46f7-b874-9b20c673d168'],
)
DiagResultId: str = Field(
title='Идентификатор результата исследования',
examples=['77312a5f-0498-4656-8215-9cf151ec2a9b'],
)
class RouteModel(BaseModel):
Type: str = Field(
title='Тип',
examples=['ROUTE_TO_DOCTOR_INSPECTION', 'ROUTE_TO_DIAGNOSTICS'],
)
CreationDateTime: datetime = Field(
title='Дата и время создания', examples=['2025-03-24 14:49']
)
Name: str = Field(
title='Наименование услуги / специальности',
examples=['Кардиолог [1259]', 'Общий анализ крови [B03.016.002]'],
)
EntryPlace: str | None = Field(
title='Кабинет приёма',
examples=['Каб.№211 Шайдуллина Г.И. (Кардиолог)', None],
default=None,
)
EntryResName: str | None = Field(
title='ФИО врача или кабинета полностью',
examples=['Каб.№211 Шайдуллина Г.И. (Кардиолог)', None],
default=None,
)
ResultExits: str = Field(title='Исполнение', examples=['0', '1'])
Result: ResultModel | None = Field(
title='Связка осмотра/услуги с выполнением направления', default=None
)
LpuName: str | None = Field(
title='Наименование МО', examples=['ГАУЗ "ГКБ №7"'], default=None
)
class RoutesListModel(BaseModel):
EventID: str = Field(
title='Идентификатор случая госпитализации',
examples=['a268e6d7-618c-4b83-97ca-c9dc8b79b55b'],
)
EventDate: datetime = Field(
title='Дата обращения', examples=['2025-03-17']
)
LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"'])
Routes: list[RouteModel] = Field(title='Список направлений')
class SEMDModel(BaseModel):
SEMDContent: str = Field(
title='СЭМД (XML сжатый методом шифрования Base64)',
examples=['77u/PD94bWwgdmVyc2lvbj0iMS...'],
)
class ExaminationModel(BaseModel):
ExaminationId: str = Field(
title='Идентификатор осмотра',
examples=['f22be2c9-8e68-42d6-851e-fbf4a5e8f657'],
)
DateTime: str = Field(
title='Дата и время создания', examples=['01.08.2025 15:47:15']
)
Resource: str = Field(
title='Врач', examples=['Абдуллина Ирина Владимировна']
)
Speciality: str = Field(
title='Специальность врача', examples=['Акушер-гинеколог']
)
ExaminationText: str = Field(
title='Текст осмотра',
examples=[
'<TABLE id=e0f61ef0-8f5e-42c6-95b6-4074715902e6 class=Complaint '
'style="BORDER-TOP: #ffffff 1px..... </TABLE>'
],
)
Recommendation: str = Field(
title='Идентификатор результата исследования',
examples=['рекомендации 1 тест'],
)
SEMDs: list[SEMDModel] = Field(title='Список СЭМД')
class HospExaminationsModel(BaseModel):
EventID: str = Field(
title='Идентификатор случая госпитализации',
examples=['2f7d395d-f5fc-4a0e-af2d-855324f6e7f1'],
)
EventDate: datetime = Field(
title='Дата обращения', examples=['2025-08-01']
)
LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"'])
Examinations: list[ExaminationModel] = Field(title='Список осмотров')