list medical card base

This commit is contained in:
dderbentsov
2023-07-22 01:03:10 +03:00
parent e69aab6573
commit 86a618cc57
18 changed files with 526 additions and 39 deletions

View File

View File

@@ -0,0 +1,53 @@
import uuid
from typing import Any
import datetime
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import UUID, ARRAY, JSONB
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, DeclarativeBase
from sqlalchemy.sql.schema import ForeignKey
class Base(DeclarativeBase):
pass
class BaseModel(Base):
__abstract__ = True
id = sa.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
created_at = sa.Column(sa.TIMESTAMP, nullable=False, default=datetime.datetime.now())
updated_at = sa.Column(sa.TIMESTAMP, nullable=False, default=datetime.datetime.now(), onupdate=datetime.datetime.now())
class MedicalCard(BaseModel):
__tablename__ = 'medical_cards'
number = sa.Column(sa.String(100), nullable=False)
checkups = relationship('Checkup', back_populates='medical_card')
health_maps = relationship('HealthMap', back_populates='medical_card')
confidant_persons = sa.Column(ARRAY(UUID(as_uuid=True)))
person_id = sa.Column(UUID(as_uuid=True), nullable=False)
class Checkup(BaseModel):
__tablename__ = 'checkups'
medical_card_id = sa.Column(UUID(as_uuid=True), sa.ForeignKey("medical_cards.id"), nullable=False)
medical_card = relationship('MedicalCard', back_populates='checkups')
medic_id = sa.Column(UUID(as_uuid=True))
claims = sa.Column(ARRAY(sa.String)) # жалобы
allergies = sa.Column(ARRAY(sa.String)) # аллергологический анамнез
diseases = sa.Column(ARRAY(sa.String)) # перенесенные и сопутствующие заболевания
medicines = sa.Column(ARRAY(sa.String)) # принимаемые лекарственные препараты
disease_process = sa.Column(sa.Text) # Развитие настоящего заболевания
visual_inspection = sa.Column(ARRAY(sa.String)) # внешний осмотр
dental_formula = sa.Column(JSONB)
dental_formula_ext = sa.Column(JSONB)
class HealthMap(BaseModel):
__tablename__ = 'health_maps'
comment = sa.Column(sa.Text)
attachments = sa.Column(ARRAY(sa.String))
medical_card_id = sa.Column(UUID(as_uuid=True), sa.ForeignKey("medical_cards.id"), nullable=False)
medical_card = relationship('MedicalCard', back_populates='health_maps')

View File

@@ -0,0 +1 @@
from .medical_card import *

View File

@@ -0,0 +1,11 @@
from pydantic import BaseModel
class MedicalCard(BaseModel):
number: str
person_id: str
class Config:
orm_mode = True
class MedicalCardCreate(BaseModel):
person_id: str

View File

@@ -0,0 +1,23 @@
from functools import lru_cache
from typing import Generator
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from medical_info.config import get_settings
engine = create_engine(get_settings().database_url, pool_pre_ping=True)
@lru_cache
def create_session() -> scoped_session:
Session = scoped_session(
sessionmaker(autocommit=False, autoflush=False, bind=engine)
)
return Session
def get_session() -> Generator[scoped_session, None, None]:
Session = create_session()
try:
yield Session
finally:
Session.remove()