diff --git a/src/apps/users/v1/router.py b/src/apps/users/v1/router.py index fd49aa3..5b4dc63 100644 --- a/src/apps/users/v1/router.py +++ b/src/apps/users/v1/router.py @@ -104,6 +104,16 @@ async def get_hosp_examinations(): ) +@router.get('/getCurrHosp') +async def get_curr_hosp(): + """ + Get current hospitalization. + """ + return await c.vitacore_api.getCurrHosp( + 'b708e782-4f83-4f3b-8639-512c0c9637bf' + ) + + @router.post('/measurement', status_code=status.HTTP_202_ACCEPTED) async def measurement( user: Annotated[str, Depends(login)], @@ -183,11 +193,6 @@ async def get_diagnostic_results(user: Annotated[str, Depends(login)]): return mock.diagnosticResults -@router.get('/getCurrHosp') -async def get_curr_hosp(user: Annotated[str, Depends(login)]): - return mock.currHosp[0] - - @router.get('/getPatFLG') async def get_pat_flg(user: Annotated[str, Depends(login)]): return mock.patFLG[0] diff --git a/src/clients/vitacore/api.py b/src/clients/vitacore/api.py index a2355d1..ec3ee77 100644 --- a/src/clients/vitacore/api.py +++ b/src/clients/vitacore/api.py @@ -113,3 +113,13 @@ class VITACORE_API(AsyncClient): case _: self.logger.error(req.json()) raise e.UnknownException + + async def getCurrHosp(self, patId: str): + req = await self.get('/getCurrHosp', params={'patId': patId}) + + match req.status_code: + case st.HTTP_200_OK: + return s.HospitalizationsModel.model_validate(req.json()) + case _: + self.logger.error(req.json()) + raise e.UnknownException diff --git a/src/clients/vitacore/schema.py b/src/clients/vitacore/schema.py index 206f117..5d71cf9 100644 --- a/src/clients/vitacore/schema.py +++ b/src/clients/vitacore/schema.py @@ -380,3 +380,100 @@ class HospExaminationsModel(BaseModel): ) LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"']) Examinations: list[ExaminationModel] = Field(title='Список осмотров') + + +class RouteToDoctorModel(BaseModel): + RouteDate: datetime = Field( + title='Дата направления', examples=['2025-07-17'] + ) + SpecialityCode: str = Field(title='Код специальности', examples=['013']) + SpecialityName: str = Field( + title='Наименование специальности', examples=['Кардиолог'] + ) + + +class RouteToDiagnosticModel(BaseModel): + RouteDate: datetime = 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: datetime = 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 HospitalizationModel(BaseModel): + EventID: str = Field( + title='Идентификатор случая госпитализации', + examples=['ddfa23ea-b0de-4d88-8abe-7d6a7a241df1'], + ) + CreationDateTime: str = Field( + title='Дата и время регистрации', examples=['2025-07-10 17:29'] + ) + ReceptionDiagnosis: str = Field( + title='Диагноз при поступлении', + examples=[ + 'I11.9 | Гипертензивная [гипертоническая] болезнь с ' + 'преимущественным поражением сердца без (застойной) ' + 'сердечной недостаточности' + ], + ) + Diagnosis: str = Field( + title='Текущий диагноз', + examples=[ + 'I11.9 | Гипертензивная [гипертоническая] болезнь с ' + 'преимущественным поражением сердца без (застойной) ' + 'сердечной недостаточности' + ], + ) + HospitalizationType: str = Field( + title='Тип госпитализации', examples=['экстренная'] + ) + HospitalizationReason: str = Field( + title='Причина госпитализации', examples=['заболевание'] + ) + Division: str = Field(title='Отделение', examples=['Кардиология №1']) + LpuName: str = Field(title='Наименование МО', examples=['ГАУЗ "ГКБ №7"']) + Exams: list[ExamModel] = Field(title='Список осмотров') + + +class HospitalizationsModel(BaseModel): + Hospitalizations: list[HospitalizationModel] = Field( + title='Список госпитализаций' + )