Files
HospitalAssistantBackend/src/clients/vitacore/schema.py
Miwory 848d314718
All checks were successful
Build And Push / publish (push) Successful in 2m25s
фикс
2025-10-02 10:59:16 +03:00

650 lines
25 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 ErrorModel(BaseModel):
error: str = Field(title='Текст ошибки')
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'],
)
fullname: str = Field(
title='Полное наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
shortname: str = Field(
title='Краткое наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
type: str = Field(
title='Тип подразделения (для МО: «Юридический»'
', для филиалов: Стационар / Поликлиника / ФАП / Амбулатория)',
examples=['Юридическое лицо'],
)
inn: str = Field(title='ИНН', examples=['0000000000'])
ogrn: str = Field(title='ОГРН', examples=['1149204047816'])
kpp: str | None = Field(title='КПП', examples=['0000000000'], default=None)
address: list[DepartmentAddressModel]
# code: str = Field(
# title='Региональный код или код ТФОМС',
# examples=['0000000000'],
# )
class OrganizationsModel(BaseModel):
Organizations: list[DepartmentModel]
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 | None = Field(
title='Идентификатор осмотра',
examples=['4d8550e6-7ad8-46f7-b874-9b20c673d168'],
default=None,
)
DiagResultId: str | None = Field(
title='Идентификатор результата исследования',
examples=['77312a5f-0498-4656-8215-9cf151ec2a9b'],
default=None,
)
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='Список осмотров')
class RouteToDoctorModel(BaseModel):
RouteDate: str = Field(title='Дата направления', examples=['2025-07-17'])
SpecialityCode: str = Field(title='Код специальности', examples=['013'])
SpecialityName: str = Field(
title='Наименование специальности', examples=['Кардиолог']
)
class RouteToDiagnosticModel(BaseModel):
RouteDate: str = Field(title='Дата направления', examples=['2025-08-06'])
ResearchCode: str = Field(title='Код услуги', examples=['B03.016.003'])
ResearchName: str = Field(
title='Наименование услуги',
examples=['Общий (клинический) анализ крови'],
)
class HospDestinationModel(BaseModel):
Signa: str = Field(
title='Сигнатура назначения',
examples=[
'Diphenhydraminum+Oleum foliorum Menthae piperitae+'
'Tinctura Leonuri+Ethylbromisovalerinatum капли для приема внутрь'
' 25 мл x 1 доза. \nВнутрь (перорально) (утром) 3 раза через день'
'(08:00, 13:00, 18:00). Повторять 2 раза. Назначил:Изотова Г.М.'
' (Сердечно-сосудистый хирург)'
],
)
class ExamModel(BaseModel):
ExaminationDate: str = Field(title='Дата осмотра', examples=['2025-08-04'])
ExaminationTime: str = Field(title='Время осмотра', examples=['09:21'])
Status: str = Field(title='Состояние при осмотре', examples=[''])
Post: str = Field(title='Врач', examples=['Шайдуллина Г.И. (Кардиолог)'])
MedicalExaminationType: str = Field(
title='Тип медицинского осмотра',
examples=['Осмотр врача-консультанта'],
)
RoutesToDoctor: list[RouteToDoctorModel] | None = Field(
title='Направления ко врачу', default=None
)
RoutesToDiagnostic: list[RouteToDiagnosticModel] | None = Field(
title='Направления на услугу', default=None
)
HospDestinations: list[HospDestinationModel] | None = Field(
title='Лекарственные назначения', default=None
)
class BaseHospitalizationModel(BaseModel):
EventID: str = Field(
title='Идентификатор случая госпитализации',
examples=['ddfa23ea-b0de-4d88-8abe-7d6a7a241df1'],
)
CreationDateTime: datetime = Field(
title='Дата и время регистрации', examples=['2025-07-10 17:29']
)
ReceptionDiagnosis: str | None = Field(
title='Диагноз при поступлении',
examples=[
'I11.9 | Гипертензивная [гипертоническая] болезнь с '
'преимущественным поражением сердца без (застойной) '
'сердечной недостаточности'
],
default=None,
)
HospitalizationType: str = Field(
title='Тип госпитализации', examples=['экстренная']
)
HospitalizationReason: str = Field(
title='Причина госпитализации', examples=['заболевание']
)
Division: str = Field(title='Отделение', examples=['Кардиология №1'])
LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"'])
class HospitalizationModel(BaseHospitalizationModel):
Diagnosis: str = Field(
title='Текущий диагноз',
examples=[
'I11.9 | Гипертензивная [гипертоническая] болезнь с '
'преимущественным поражением сердца без (застойной) '
'сердечной недостаточности'
],
)
Exams: list[ExamModel] = Field(title='Список осмотров')
class CurHospitalizationsModel(BaseModel):
Hospitalizations: list[HospitalizationModel] = Field(
title='Список госпитализаций'
)
class HospitalizationsModel(BaseModel):
Hospitalizations: list[BaseHospitalizationModel] = Field(
title='Список госпитализаций'
)
class RecommendationModel(BaseModel):
Type: str = Field(title='Тип осмотра', examples=['Осмотр', 'Эпикриз'])
DateTime: str = Field(
title='Дата и время создания',
examples=['18.07.2025 8:30:43'],
)
Recommendation: str = Field(
title='Текст рекомендации', examples=['рекомендации тест']
)
class HospRecommendationsModel(BaseModel):
EventID: str = Field(
title='Идентификатор случая госпитализации',
examples=['ddfa23ea-b0de-4d88-8abe-7d6a7a241df1'],
)
EventDate: datetime = Field(
title='Дата обращения', examples=['2025-07-10']
)
Recommendations: list[RecommendationModel] = Field(
title='Список рекомендаций'
)
class HospRoutesModel(BaseModel):
EventID: str = Field(
title='Идентификатор случая госпитализации',
examples=['b8227793-0f40-40f0-b8aa-9fc00cc13b96'],
)
EventDate: datetime = Field(
title='Дата обращения', examples=['2025-07-21']
)
RoutesToDoctor: list[RouteToDoctorModel] = Field(
title='Направления ко врачу'
)
RoutesToDiagnostic: list[RouteToDiagnosticModel] = Field(
title='Направления на услугу'
)
class DiagnosticResultModel(BaseModel):
DiagResultID: str = Field(
title='Идентификатор результата исследования',
examples=['1407910a-1901-4b21-be2d-0ef89041f4fe'],
)
ContainsFile: int = Field(
title='Признак наличия файла исследования (из ЛИС)', examples=['0']
)
PostingDate: datetime = Field(
title='Дата направления', examples=['2025-05-06']
)
MedServiceCode: str = Field(
title='Код исследования', examples=['A12.05.004.002']
)
MedServiceName: str = Field(
title='Наименование исследования',
examples=[
'Проба на совместимость перед переливанием эритроцитов по '
'неполным антителам (IgG)'
],
)
PostName: str = Field(title='Врач', examples=['Сиразиева Г.Р.'])
PostSpec: str = Field(title='Специальность', examples=['Терапевт'])
LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"'])
EventID: str = Field(
title='Идентификатор случая',
examples=['36cf2c90-fdad-4961-899c-652c5e0817a9'],
)
class DiagnosticResultsModel(BaseModel):
DainosticsResults: list[DiagnosticResultModel] = Field(
title='Список результатов исследований'
)
class ProlongationModel(BaseModel):
StartDate: datetime = Field(
title='Дата продления с', examples=['2020-10-21']
)
ProlongationDate: str = Field(
title='Дата продления до', examples=['2020-10-25']
)
Post: str = Field(
title='Врач',
examples=['Ахсанова Р.М. (Врач общей практики (семейный врач))'],
)
class PatientELNModel(BaseModel):
PatientSNILS: str = Field(
title='СНИЛС болеющего', examples=['000-000-600 01']
)
Number: str = Field(
title='Номер листа нетрудоспособности', examples=['910040906829']
)
OpenDate: datetime | None = Field(
title='Дата открытия', examples=['2020-10-21'], default=None
)
DateClose: datetime | None = Field(
title='Дата закрытия', examples=['2020-10-25'], default=None
)
WorkDate: datetime | None = Field(
title='Дата выхода на работу', examples=['2020-10-26'], default=None
)
DaysCount: int = Field(
title='Количество дней нетрудоспособности', examples=[5]
)
Cause: str = Field(
title='Причина нетрудоспособности',
examples=[
'Заболевание (в том числе профессиональное заболевание и его '
'обострение)'
],
)
Prolongations: list[ProlongationModel] = Field(title='Продления')
LpuName: str = Field(
title='Наименование МО', examples=['ГАУЗ Новошешминская ЦРБ']
)
BranchAddress: str = Field(
title='Адрес подразделения выдачи',
examples=['Республика Татарстан,с.Новошешминск, ул.Майская, д.8'],
)
FssLnStatus: str = Field(title='Статус ЭЛН в ФСС', examples=['30'])
SentSNILS: str = Field(
title='СНИЛС получателя ЭЛН (отправленный в ФСС)',
examples=['00000060001'],
)
class ELNsModel(BaseModel):
PatientELNs: list[PatientELNModel] = Field(
title='Список электронных листов нетрудоспособности'
)
class PatientFLGModel(BaseModel):
id: str = Field(
title='Идентификатор пациента',
examples=['0bf2e271-e565-42a8-924e-0017bcdedecd'],
)
SNILS: str = Field(title='СНИЛС', examples=['127-192-834 66'])
LastFgDate: str = Field(
title='Дата последнего флюрографического осмотра',
examples=['2020-09-24'],
)
NextPrgDate: str = Field(
title='Дата следующего флюорографического осмотра',
examples=['2021-09-24'],
)
PrgContingent: str = Field(
title='Контингент (флюорография)',
examples=['Неорганизованное население'],
)