You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

mm-sdk

Package Overview
Dependencies
Maintainers
1
Versions
114
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mm-sdk - pypi Package Compare versions

Comparing version
0.1.440
to
0.1.450
+1
-1
PKG-INFO
Metadata-Version: 2.1
Name: mm-sdk
Version: 0.1.440
Version: 0.1.450
Summary:

@@ -5,0 +5,0 @@ Author: dyus

[tool.poetry]
name = "mm-sdk"
version = "0.1.440"
version = "0.1.450"
description = ""

@@ -5,0 +5,0 @@ authors = ["dyus <dyuuus@gmail.com>"]

@@ -5,3 +5,3 @@ from datetime import date as datetime_date

from pydantic import BaseModel, Field, HttpUrl
from pydantic import BaseModel, Field, HttpUrl, root_validator

@@ -33,2 +33,17 @@ from .client import Empty, SDKClient, SDKResponse

class GenderType(IntEnum):
any = 0
male = 1
female = 2
class SyncStatus(str, Enum):
awaiting_signs = "awaiting_signs" # "Ждет подписания"
pending = "pending" # "Ожидает отправки"
in_process = "in_process" # "В процессе"
on_check = "on_check" # "На проверке"
succeeded = "succeeded" # "Отправлено"
failed = "failed" # "Ошибка"
class ActivityResponse(BaseModel):

@@ -253,2 +268,117 @@ id: int = Field(description="id")

# СЭМД - ПЕРЕДАЧА В РЭМД
class SignCaseRequest(BaseModel):
sign: str = Field(description="Подпись в base64")
class DocumentInfo(BaseModel):
local_num: str = Field(description="Уникальный номер документа")
gigtest_num: Optional[str] = Field(
description="Уникальный номер документа в Гигтест"
)
created_at: str = Field(
description="Дата и время создания СЭМДа (Y-m-d H:M:S)"
)
kind: int = Field(description="Тип СЭМДа")
description: str = Field(description="Произвольное краткое описание")
content: str = Field(description="СЭМД в base64")
class OrganizationInfo(BaseModel):
oid: str = Field(description="Согласно ФРМО")
name: str = Field(description="Согласно ФРМО")
class PatientInfo(BaseModel):
firstname: str = Field(description="Имя пациента")
lastname: str = Field(description="Фамилия пациента")
patrname: str = Field(description="Отчество пациента")
birthdate: str = Field(description="Дата рождения (YYYY-MM-DD)")
gender: GenderType = Field(description="Пол")
snils: str = Field(description="СНИЛС")
class DoctorInfo(BaseModel):
firstname: str = Field(description="Имя врача")
lastname: str = Field(description="Фамилия врача")
patrname: str = Field(description="Отчество врача")
snils: str = Field(description="СНИЛС врача")
position_id: int = Field(description="ID должности согласно справочнику")
speciality_id: int = Field(description="ID специальности согласно справочнику")
class CreateCaseRequest(BaseModel):
document: DocumentInfo = Field(description="Информация о документе")
organization: OrganizationInfo = Field(description="Информация об организации")
patient: PatientInfo = Field(description="Информация о пациенте")
doctor: DoctorInfo = Field(description="Информация о враче")
class CaseError(BaseModel):
message: str = Field(description="Сообщение об ошибке")
description: str = Field(description="Описание ошибки")
class CaseResponse(BaseModel):
id: int = Field(description="ID случая")
status: SyncStatus = Field(description="Статус")
remd_regnumber: Optional[str] = Field(description="Номер ЭМД в РЭМД")
error: Optional[CaseError] = Field(description="Список ошибок при отправке СЭМДа")
# в доке и примере разный ключ, `status` вместо `sync_status`
@root_validator(pre=True)
def accept_status_or_sync_status(cls, values):
if 'status' not in values and 'sync_status' in values:
values['status'] = values['sync_status']
return values
# СОЗДАНИЕ ПАЦИЕНТА В ИЭМК
class PatientIEMK(BaseModel):
id: int = Field(description="Внутренний идентификатор пациента")
first_name: str = Field(description="Имя пациента")
last_name: str = Field(description="Фамилия пациента")
patronymic: Optional[str] = Field(None, description="Отчество пациента")
birthday: str = Field(description="Дата рождения пациента (YYYY-MM-DD)")
gender: GenderType = Field(description="Пол пациента")
phone: Optional[str] = Field(None, description="Телефон пациента")
email: Optional[str] = Field(None, description="Email пациента")
class AddressInfo(BaseModel):
street_address_line: str = Field(description="Улица, дом и квартира")
class RegionInfo(BaseModel):
name: str = Field(description="Название региона")
class CountryInfo(BaseModel):
name: str = Field(description="Название страны")
class SnilsInfo(BaseModel):
number: str = Field(description="Номер СНИЛС")
class PassportInfo(BaseModel):
series: Optional[str] = Field(None, description="Серия паспорта")
number: Optional[str] = Field(None, description="Номер паспорта")
issue_org_name: Optional[str] = Field(None, description="Орган, выдавший паспорт")
class EditPatientRequest(BaseModel):
patient: PatientIEMK = Field(description="Информация о пациенте")
address: AddressInfo = Field(description="Адрес проживания пациента")
region: RegionInfo = Field(description="Регион проживания пациента")
country: CountryInfo = Field(description="Страна проживания пациента")
snils: SnilsInfo = Field(description="СНИЛС пациента")
passport: Optional[PassportInfo] = Field(description="Паспортные данные пациента")
organization: OrganizationInfo = Field(description="Медицинская организация, направившая пациента")
class EditPatientResponse(BaseModel):
message: str
class GigtestService:

@@ -274,2 +404,6 @@ def __init__(self, client: SDKClient, url: HttpUrl):

self._additional_medicine_results_url = "/api/v2/medical-research-results"
# СЭМД
self._cases_url = "/api/v2/cases"
self._create_patient_url = "/api/v2/cases/create-patient"
self._update_patient_url = "/api/v2/cases/update-patient"

@@ -525,3 +659,58 @@ # СПРАВОЧНИКИ

# СЭМД
def create_case(
self, query: CreateCaseRequest, token: str
) -> SDKResponse[List[CaseResponse]]:
return self._client.post(
self._full_url(self._cases_url, token),
CaseResponse,
data=query.json(exclude_none=True),
timeout=LONG_GIGTEST_TIMEOUT,
headers={"Content-Type": "application/json"},
)
def sign_case(
self, case_id: int, query: SignCaseRequest, token: str
) -> SDKResponse[List[CaseResponse]]:
return self._client.post(
self._full_url(f"{self._cases_url}/{case_id}/sign", token),
CaseResponse,
data=query.json(exclude_none=True),
timeout=LONG_GIGTEST_TIMEOUT,
headers={"Content-Type": "application/json"},
)
def get_case(
self, case_id: int, token: str
) -> SDKResponse[List[CaseResponse]]:
return self._client.get(
self._full_url(f"{self._cases_url}/{case_id}", token),
CaseResponse,
timeout=LONG_GIGTEST_TIMEOUT,
)
def create_patient(
self, query: EditPatientRequest, token: str
) -> SDKResponse[EditPatientResponse]:
return self._client.post(
self._full_url(self._create_patient_url, token),
EditPatientResponse,
data=query.json(exclude_none=True),
timeout=LONG_GIGTEST_TIMEOUT,
headers={"Content-Type": "application/json"},
)
def update_patient(
self, query: EditPatientRequest, token: str
) -> SDKResponse[EditPatientResponse]:
return self._client.post(
self._full_url(self._update_patient_url, token),
EditPatientResponse,
data=query.json(exclude_none=True),
timeout=LONG_GIGTEST_TIMEOUT,
headers={"Content-Type": "application/json"},
)
def _full_url(self, url, token):
return f"{self._url}{url}?access-token={token}"

@@ -15,3 +15,3 @@ # -*- coding: utf-8 -*-

'name': 'mm-sdk',
'version': '0.1.440',
'version': '0.1.450',
'description': '',

@@ -18,0 +18,0 @@ 'long_description': 'None',