2021-07-19 23:02:31 +03:00
|
|
|
from fastapi.security import OAuth2PasswordBearer
|
|
|
|
|
from passlib.context import CryptContext
|
2022-08-08 10:18:10 +07:00
|
|
|
import json
|
|
|
|
|
import datetime
|
|
|
|
|
from json import JSONEncoder
|
2021-07-21 08:05:29 +03:00
|
|
|
import os
|
2021-07-19 23:02:31 +03:00
|
|
|
import motor.motor_asyncio
|
2022-08-15 10:53:27 +07:00
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
dotenv_path = Path('../../.env')
|
|
|
|
|
load_dotenv(dotenv_path=dotenv_path)
|
2021-07-19 23:02:31 +03:00
|
|
|
|
|
|
|
|
# ================= Creating necessary variables ========================
|
2022-08-02 14:25:51 +07:00
|
|
|
# ------------------ Token, authentication variables ---------------------
|
2021-07-19 23:02:31 +03:00
|
|
|
SECRET_KEY = "4ab5be85c8c56eecdd547f7831979be83de58a6768d10a314f54cda4e4d67ffe"
|
|
|
|
|
ALGORITHM = "HS256"
|
|
|
|
|
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
|
|
|
|
|
|
|
|
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
2022-08-15 10:53:27 +07:00
|
|
|
URL_SERVER = os.getenv('URL_SERVER')
|
2021-07-19 23:02:31 +03:00
|
|
|
|
2022-08-08 10:18:10 +07:00
|
|
|
|
|
|
|
|
class DateTimeEncoder(JSONEncoder):
|
|
|
|
|
# Override the default method
|
|
|
|
|
def default(self, obj):
|
|
|
|
|
if isinstance(obj, (datetime.date, datetime.datetime)):
|
2022-08-15 10:53:27 +07:00
|
|
|
return obj.isofort()
|
2022-08-08 10:18:10 +07:00
|
|
|
|
|
|
|
|
|
2022-08-02 14:25:51 +07:00
|
|
|
oauth2_scheme = OAuth2PasswordBearer(
|
|
|
|
|
tokenUrl="https://sandboxapi.ebacsi.com.vn/auth/oauth/token")
|
2022-08-04 14:48:50 +07:00
|
|
|
ROLE_PUBLIC = "PUBLIC"
|
2022-08-02 14:25:51 +07:00
|
|
|
ROLE_ORG = [
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_USER",
|
|
|
|
|
"comment": "Bệnh nhân",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_OPERATOR",
|
|
|
|
|
"comment": "CSKH hệ thống",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "DOCTOR",
|
|
|
|
|
"comment": "Bác sĩ",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_EXTERNAL",
|
|
|
|
|
"comment": "Tích hợp",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "SITE_CASHIER",
|
|
|
|
|
"comment": "Thu ngân, thẩm định",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "SITE_RECEIPTION",
|
|
|
|
|
"comment": "Lễ tân",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_UTILS",
|
|
|
|
|
"comment": "SYSTEM",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "SITE_ADMIN",
|
|
|
|
|
"comment": "Quản trị viên tại CSYT",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "SITE_OPERATOR",
|
|
|
|
|
"comment": "CSKH tại CSYT",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "SITE_INTEGRATION",
|
|
|
|
|
"comment": "Tài khoản tích hợp",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_ADMIN",
|
|
|
|
|
"comment": "Quản trị hệ thống",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "ORG_DICTIONARY",
|
|
|
|
|
"comment": "For Medihome Dictionary",
|
|
|
|
|
}
|
|
|
|
|
]
|
2021-07-19 23:02:31 +03:00
|
|
|
|
2022-08-15 10:53:27 +07:00
|
|
|
KHOA = [
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Khám bệnh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K01',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Hồi sức cấp cứu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K02',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội tổng hợp',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K03',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội tim mạch',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K04',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội tiêu hoá',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K05',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội cơ - xương - khớp',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K06',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội thận - tiết niệu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K07',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội tiết',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K08',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Dị ứng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K09',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Huyết học lâm sàng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K10',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội thận - tiết niệu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K11',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Truyền nhiễm',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K12',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Lao',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K13',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Da liễu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K14',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Thần kinh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K15',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Tâm thần',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K16',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Y học cổ truyền',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K17',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Lão học',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K18',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nhi',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K19',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ngoại tổng hợp',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K20',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ngoại thần kinh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K21',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ngoại lồng ngực',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K22',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ngoại tiêu hoá',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K23',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ngoại thận - tiết niệu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K24',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Chấn thương chỉnh hình',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K25',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Bỏng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K26',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Phụ sản',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K27',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Tai - Mũi - Họng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K28',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Răng - Hàm - Mặt',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K29',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Mắt',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K30',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Vật lý trị liệu - Phục hồi chức năng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K31',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Y học hạt nhân',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K32',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Ung bướu (điều trị tia xạ)',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K33',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Truyền máu',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K34',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Lọc máu nhân tạo',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K35',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Huyết học',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K36',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Sinh hoá',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K37',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Vi sinh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K38',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Chẩn đoán hình ảnh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K39',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Thăm dò chức năng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K40',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội soi',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K41',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Giải phẫu bệnh',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K42',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Chống nhiễm khuẩn',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K43',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Dược',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K44',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Dinh dưỡng',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K45',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Sinh học phân tử',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K46',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Xét nghiệm',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K47',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa hồi sức tích cực',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K48',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Chống độc',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K49',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": 'Khoa Nội hô hấp',
|
|
|
|
|
"count": 0,
|
|
|
|
|
"id": 'K50',
|
|
|
|
|
},
|
|
|
|
|
]
|
2022-08-02 14:25:51 +07:00
|
|
|
# ----------------- Database variables (MongoDB) --------------------------
|
2021-07-21 08:05:29 +03:00
|
|
|
client = motor.motor_asyncio.AsyncIOMotorClient(os.environ["DB_URL"])
|
2022-08-02 14:25:51 +07:00
|
|
|
db = client.myTestDB
|