diff --git a/src/apps/users/v1/router.py b/src/apps/users/v1/router.py index deabd46..161ad5c 100644 --- a/src/apps/users/v1/router.py +++ b/src/apps/users/v1/router.py @@ -10,8 +10,6 @@ from clients import clients as c from clients.vitacore import schema as s from shared.redis import client as cache -from . import mock - logger = getLogger(__name__) router = APIRouter( prefix='/user', @@ -229,8 +227,3 @@ async def queue(user: Annotated[bool, Depends(login)]): 'vks_patient_link': None, 'doctor_spec_name': 'врач-терапевт', } - - -@router.get('/findPat') -async def find_pat(user: Annotated[str, Depends(login)]): - return mock.findpat[0] diff --git a/src/clients/vitacore/api.py b/src/clients/vitacore/api.py index 6938bd4..019d3e5 100644 --- a/src/clients/vitacore/api.py +++ b/src/clients/vitacore/api.py @@ -46,7 +46,7 @@ class VITACORE_API(AsyncClient): match req.status_code: case st.HTTP_200_OK: - return s.WorkersModel.model_validate(req.json()) + return s.WorkersModel.model_validate(req.json()['workers']) case _: self.logger.error(req.json()) raise e.UnknownException @@ -67,6 +67,12 @@ class VITACORE_API(AsyncClient): match req.status_code: case st.HTTP_200_OK: return s.EntriesModel.model_validate(req.json()) + case st.HTTP_206_PARTIAL_CONTENT: + error = s.ErrorModel.model_validate(req.json()) + + if error.error == 'Не найдены записи по указанному patId': + return s.EntriesModel(Entries=[]) + case _: self.logger.error(req.json()) raise e.UnknownException diff --git a/src/clients/vitacore/schema.py b/src/clients/vitacore/schema.py index 25912e4..a72de6d 100644 --- a/src/clients/vitacore/schema.py +++ b/src/clients/vitacore/schema.py @@ -1,8 +1,12 @@ -from datetime import datetime +from datetime import date, 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'] @@ -282,13 +286,15 @@ class MedExamDictModel(BaseModel): class ResultModel(BaseModel): Resource: str = Field(title='Врач', examples=['Изотова Г.М.']) - ExaminationId: str = Field( + ExaminationId: str | None = Field( title='Идентификатор осмотра', examples=['4d8550e6-7ad8-46f7-b874-9b20c673d168'], + default=None, ) - DiagResultId: str = Field( + DiagResultId: str | None = Field( title='Идентификатор результата исследования', examples=['77312a5f-0498-4656-8215-9cf151ec2a9b'], + default=None, ) @@ -383,9 +389,7 @@ class HospExaminationsModel(BaseModel): class RouteToDoctorModel(BaseModel): - RouteDate: datetime = Field( - title='Дата направления', examples=['2025-07-17'] - ) + RouteDate: date = Field(title='Дата направления', examples=['2025-07-17']) SpecialityCode: str = Field(title='Код специальности', examples=['013']) SpecialityName: str = Field( title='Наименование специальности', examples=['Кардиолог'] @@ -393,9 +397,7 @@ class RouteToDoctorModel(BaseModel): class RouteToDiagnosticModel(BaseModel): - RouteDate: datetime = Field( - title='Дата направления', examples=['2025-08-06'] - ) + RouteDate: date = Field(title='Дата направления', examples=['2025-08-06']) ResearchCode: str = Field(title='Код услуги', examples=['B03.016.003']) ResearchName: str = Field( title='Наименование услуги', @@ -417,7 +419,7 @@ class HospDestinationModel(BaseModel): class ExamModel(BaseModel): - ExaminationDate: datetime = Field( + ExaminationDate: date = Field( title='Дата осмотра', examples=['2025-08-04'] ) ExaminationTime: str = Field(title='Время осмотра', examples=['09:21']) @@ -438,7 +440,7 @@ class ExamModel(BaseModel): ) -class HospitalizationModel(BaseModel): +class BaseHospitalizationModel(BaseModel): EventID: str = Field( title='Идентификатор случая госпитализации', examples=['ddfa23ea-b0de-4d88-8abe-7d6a7a241df1'], @@ -454,14 +456,6 @@ class HospitalizationModel(BaseModel): 'сердечной недостаточности' ], ) - Diagnosis: str = Field( - title='Текущий диагноз', - examples=[ - 'I11.9 | Гипертензивная [гипертоническая] болезнь с ' - 'преимущественным поражением сердца без (застойной) ' - 'сердечной недостаточности' - ], - ) HospitalizationType: str = Field( title='Тип госпитализации', examples=['экстренная'] ) @@ -470,19 +464,31 @@ class HospitalizationModel(BaseModel): ) 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 HospitalizationsModel(BaseModel): - Hospitalizations: list[HospitalizationModel] = Field( - title='Список госпитализаций' + Hospitalizations: list[HospitalizationModel | BaseHospitalizationModel] = ( + Field(title='Список госпитализаций') ) class RecommendationModel(BaseModel): Type: str = Field(title='Тип осмотра', examples=['Осмотр', 'Эпикриз']) - DateTime: datetime = Field( - title='Дата и время создания', examples=['18.07.2025 8:30:43'] + DateTime: str = Field( + title='Дата и время создания', + examples=['18.07.2025 8:30:43'], ) Recommendation: str = Field( title='Текст рекомендации', examples=['рекомендации тест'] @@ -523,7 +529,7 @@ class DiagnosticResultModel(BaseModel): title='Идентификатор результата исследования', examples=['1407910a-1901-4b21-be2d-0ef89041f4fe'], ) - ContainsFile: str = Field( + ContainsFile: int = Field( title='Признак наличия файла исследования (из ЛИС)', examples=['0'] ) PostingDate: datetime = Field(