58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime, date
|
|
|
|
|
|
class MedicineBase(BaseModel):
|
|
name: str = Field(..., min_length=1, max_length=200)
|
|
generic_name: Optional[str] = None
|
|
brand_name: Optional[str] = None
|
|
manufacturer: Optional[str] = None
|
|
specification: Optional[str] = None
|
|
category_id: Optional[int] = None
|
|
description: Optional[str] = None
|
|
indications: Optional[str] = None
|
|
adult_dose: Optional[str] = None
|
|
child_dose: Optional[str] = None
|
|
contraindications: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
expiry_grace_days: int = Field(default=0, ge=0, le=60)
|
|
|
|
|
|
class MedicineCreate(MedicineBase):
|
|
pass
|
|
|
|
|
|
class MedicineUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
generic_name: Optional[str] = None
|
|
brand_name: Optional[str] = None
|
|
manufacturer: Optional[str] = None
|
|
specification: Optional[str] = None
|
|
category_id: Optional[int] = None
|
|
description: Optional[str] = None
|
|
indications: Optional[str] = None
|
|
adult_dose: Optional[str] = None
|
|
child_dose: Optional[str] = None
|
|
contraindications: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
expiry_grace_days: Optional[int] = None
|
|
|
|
|
|
class MedicineResponse(MedicineBase):
|
|
id: int
|
|
image_front_path: Optional[str] = None
|
|
image_expiry_path: Optional[str] = None
|
|
image_leaflet_paths: Optional[List[str]] = None
|
|
created_by: Optional[int] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class MedicineWithStock(MedicineResponse):
|
|
total_quantity: int = 0
|
|
nearest_expiry_date: Optional[date] = None
|
|
batch_count: int = 0 |