Compare commits

...

13 Commits

3 changed files with 711 additions and 57 deletions

View File

@ -47,9 +47,129 @@ async def get_workers(departmentId: str):
return await c.vitacore_api.getWorkers(departmentId) return await c.vitacore_api.getWorkers(departmentId)
@router.get('/getSpecs') @router.get('/getSpecs', response_model=s.SpecsV021Model)
async def get_specs(): async def get_specs():
return mock.specs """
Get list of specialties.
"""
return await c.vitacore_api.getSpecsV021()
@router.get('/getEntries', response_model=s.EntriesModel)
async def get_entries():
"""
Get list of entries for user by id.
"""
return await c.vitacore_api.getEntries(
'b172ddc1-bd94-407f-885f-725193dcc502'
)
@router.get('/getVaccsReport')
async def get_vaccs_report():
"""
Get report of vaccinations for user by id.
"""
return await c.vitacore_api.getVaccsReport(
'6fe66cae-409a-4f56-8ae9-d55d3c38569b'
)
@router.get('/getMedExamDict')
async def get_med_exam_dict():
"""
Get medical examination dictionary.
"""
return await c.vitacore_api.getMedExamDict()
@router.get('/getRoutesList')
async def get_routes_list():
"""
Get list of routes.
"""
return await c.vitacore_api.getRoutesList(
'4e6de5f7-4dc9-451b-bf0d-7a64a9b8c279'
)
@router.get('/getHospExaminations')
async def get_hosp_examinations():
"""
Get list of hospital examinations.
"""
return await c.vitacore_api.getHospExaminations(
'7bbdac30-9a33-4f13-9458-2c229c0c20f5',
'f22be2c9-8e68-42d6-851e-fbf4a5e8f657',
)
@router.get('/getCurrHosp')
async def get_curr_hosp():
"""
Get current hospitalization.
"""
return await c.vitacore_api.getCurrHosp(
'b708e782-4f83-4f3b-8639-512c0c9637bf'
)
@router.get('/getHosps')
async def get_hosps():
"""
Get list of hospitals.
"""
return await c.vitacore_api.getHosps(
'b708e782-4f83-4f3b-8639-512c0c9637bf'
)
@router.get('/getHospRecommendations')
async def get_hosp_recommendations():
"""
Get list of recommended hospitals.
"""
return await c.vitacore_api.getHospRecommendations(
'b708e782-4f83-4f3b-8639-512c0c9637bf'
)
@router.get('/getHospRoutes')
async def get_hosp_routes():
"""
Get list of recommended hospitals.
"""
return await c.vitacore_api.getHospRoutes(
'3092e1c5-e08b-4654-a027-82be90fe8a49'
)
@router.get('/getDiagnosticResults')
async def get_diagnostic_results():
"""
Get list of diagnostic results.
"""
return await c.vitacore_api.getDiagnosticResults(
'4867cc79-9805-4ae2-98d3-2f822848635e'
)
@router.get('/getELNs')
async def get_eln():
"""
Get list of ELNs.
"""
return await c.vitacore_api.getELNs('d4493f1c-fcbb-4242-99e6-32328bed53b9')
@router.get('/getPatFLG')
async def get_pat_flg():
"""
Get list of ELNs.
"""
return await c.vitacore_api.getPatFLG(
'0bf2e271-e565-42a8-924e-0017bcdedecd'
)
@router.post('/measurement', status_code=status.HTTP_202_ACCEPTED) @router.post('/measurement', status_code=status.HTTP_202_ACCEPTED)
@ -114,58 +234,3 @@ async def queue(user: Annotated[bool, Depends(login)]):
@router.get('/findPat') @router.get('/findPat')
async def find_pat(user: Annotated[str, Depends(login)]): async def find_pat(user: Annotated[str, Depends(login)]):
return mock.findpat[0] return mock.findpat[0]
@router.get('/getHosps')
async def get_hosps():
return mock.hosps
@router.get('/getELNS')
async def get_elns(user: Annotated[str, Depends(login)]):
return mock.elns[0]
@router.get('/getVaccsReport')
async def get_vaccs_report(user: Annotated[str, Depends(login)]):
return mock.vacs[0]
@router.get('/getDiagnosticResults')
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]
@router.get('/getEntries')
async def get_entries(user: Annotated[str, Depends(login)]):
return mock.entries[0]
@router.get('/getRoutesList')
async def get_routes_list(user: Annotated[str, Depends(login)]):
return mock.routesList[0]
@router.get('/getMedExamDict')
async def get_med_exam_dict(user: Annotated[str, Depends(login)]):
return mock.medexamDict
@router.get('/getHospRecommendations')
async def get_hosp_recommendations(user: Annotated[str, Depends(login)]):
return mock.hospRecommendations
@router.get('/getHospRoutes')
async def get_hosp_routes(user: Annotated[str, Depends(login)]):
return mock.hospRoutes

View File

@ -50,3 +50,138 @@ class VITACORE_API(AsyncClient):
case _: case _:
self.logger.error(req.json()) self.logger.error(req.json())
raise e.UnknownException raise e.UnknownException
async def getSpecsV021(self):
req = await self.get('/getSpecsV021')
match req.status_code:
case st.HTTP_200_OK:
return s.SpecsV021Model.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getEntries(self, patId: str):
req = await self.get('/getEntries', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.EntriesModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getVaccsReport(self, patId: str):
req = await self.get('/getVaccsReport', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.VaccsReportModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getMedExamDict(self):
req = await self.get('/getMedExamDict')
match req.status_code:
case st.HTTP_200_OK:
return s.MedExamDictModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getRoutesList(self, patId: str):
req = await self.get('/getRoutesList', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.RoutesListModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getHospExaminations(self, patId: str, examId: str):
req = await self.get(
'/getHospExaminations',
params={'patId': patId, 'examId': examId},
)
match req.status_code:
case st.HTTP_200_OK:
return s.HospExaminationsModel.model_validate(req.json())
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
async def getHosps(self, patId: str):
req = await self.get('/getHosps', 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
async def getHospRecommendations(self, patId: str):
req = await self.get(
'/getHospRecommendations', params={'patId': patId}
)
match req.status_code:
case st.HTTP_200_OK:
return s.HospRecommendationsModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getHospRoutes(self, patId: str):
req = await self.get('/getHospRoutes', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.HospRoutesModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getDiagnosticResults(self, patId: str):
req = await self.get('/getDiagnosticResults', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.DiagnosticResultsModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getELNs(self, patId: str):
req = await self.get('/getELNs', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.ELNsModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getPatFLG(self, patId: str):
req = await self.get('/getPatFLG', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.PatientFLGModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException

View File

@ -174,3 +174,457 @@ class WorkersModel(BaseModel):
middleName: str = Field(title='Отчество', examples=['Михайлович']) middleName: str = Field(title='Отчество', examples=['Михайлович'])
birthDate: datetime = Field(title='Дата рождения', examples=['30.05.1961']) birthDate: datetime = Field(title='Дата рождения', examples=['30.05.1961'])
positions: list[WorkersPositionModel] 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='Список осмотров')
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: datetime = 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='Список госпитализаций'
)
class RecommendationModel(BaseModel):
Type: str = Field(title='Тип осмотра', examples=['Осмотр', 'Эпикриз'])
DateTime: datetime = 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: str = 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 = Field(title='Дата открытия', examples=['2020-10-21'])
DateClose: datetime = Field(title='Дата закрытия', examples=['2020-10-25'])
WorkDate: datetime = Field(
title='Дата выхода на работу', examples=['2020-10-26']
)
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=['Неорганизованное население'],
)