Compare commits

...

2 Commits

Author SHA1 Message Date
aed85d5201 Новые эндпоинты
All checks were successful
Build And Push / publish (push) Successful in 1m34s
2025-09-29 08:30:36 +03:00
d15666d0e8 Фикс 2025-09-26 16:54:21 +03:00
3 changed files with 181 additions and 31 deletions

View File

@ -1,12 +1,13 @@
from datetime import datetime
from json import dumps
from logging import getLogger
from typing import Annotated, Any
from typing import Annotated
from fastapi import APIRouter, Body, Depends, status
from apps.users.auth import login
from clients import clients as c
from clients.vitacore import schema as s
from shared.redis import client as cache
from . import mock
@ -20,6 +21,37 @@ router = APIRouter(
)
@router.get('/getProfile', response_model=s.ProfileModel)
async def get_profile():
"""
Get profile of user by id.
"""
return await c.vitacore_api.getProfile(
'b62e9f22-a871-4c52-96d6-559c707a716d'
)
@router.get('/getDepartments', response_model=list[s.DepartmentModel])
async def get_departments():
"""
Get list of departments.
"""
return await c.vitacore_api.getDepartments()
@router.get('/getWorkers', response_model=s.WorkersModel)
async def get_workers(departmentId: str):
"""
Get list of workers by department id.
"""
return await c.vitacore_api.getWorkers(departmentId)
@router.get('/getSpecs')
async def get_specs():
return mock.specs
@router.post('/measurement', status_code=status.HTTP_202_ACCEPTED)
async def measurement(
user: Annotated[str, Depends(login)],
@ -79,29 +111,11 @@ async def queue(user: Annotated[bool, Depends(login)]):
}
@router.get('/getDepartments')
async def get_departments():
data: dict[Any, Any] = {}
return data
@router.get('/getSpecs')
async def get_specs():
return mock.specs
@router.get('/findPat')
async def find_pat(user: Annotated[str, Depends(login)]):
return mock.findpat[0]
@router.get('/getProfile')
async def get_profile():
return await c.vitacore_api.getProfile(
'b62e9f22-a871-4c52-96d6-559c707a716d'
)
@router.get('/getHosps')
async def get_hosps():
return mock.hosps

View File

@ -26,3 +26,27 @@ class VITACORE_API(AsyncClient):
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getDepartments(self):
req = await self.get('/getDepartments')
match req.status_code:
case st.HTTP_200_OK:
return [
s.DepartmentModel.model_validate(i) for i in req.json()
]
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getWorkers(self, departmentId: str):
req = await self.get(
'/getWorkers', params={'departmentId': departmentId}
)
match req.status_code:
case st.HTTP_200_OK:
return s.WorkersModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException

View File

@ -1,3 +1,5 @@
from datetime import datetime
from pydantic import BaseModel, Field
@ -41,24 +43,134 @@ class ProfileModel(BaseModel):
)
docSer: str = Field(title='Серия документа', examples=['III-КБ'])
docNum: str = Field(title='Номер документа', examples=['999999'])
ENP: str = Field(
title='Единый номер полиса ОМС (16-ти значный)',
examples=['?'],
)
# 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'],
)
# 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]