Ali2206 commited on
Commit
a895713
·
verified ·
1 Parent(s): 343d0a3

Update models/schemas.py

Browse files
Files changed (1) hide show
  1. models/schemas.py +85 -27
models/schemas.py CHANGED
@@ -1,6 +1,6 @@
1
  from pydantic import BaseModel, EmailStr
2
- from typing import Optional, List, Literal
3
- from datetime import date, time
4
 
5
  # --- USER SCHEMAS ---
6
  class SignupForm(BaseModel):
@@ -13,42 +13,100 @@ class TokenResponse(BaseModel):
13
  access_token: str
14
  token_type: str
15
 
16
- # --- DOCTOR CREATION SCHEMA (Admin use only) ---
17
  class DoctorCreate(BaseModel):
18
  matricule: str
19
  email: EmailStr
20
  password: str
21
  full_name: str
22
- specialty: str # ✅ added field
23
-
24
 
25
  # --- CONTACT INFO ---
26
  class ContactInfo(BaseModel):
27
  email: Optional[EmailStr] = None
28
  phone: Optional[str] = None
29
 
30
- # --- PATIENT SCHEMA ---
31
- class PatientCreate(BaseModel):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  full_name: str
33
- date_of_birth: date
34
  gender: str
35
- notes: Optional[str] = ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  address: Optional[str] = None
37
- national_id: Optional[str] = None
38
- blood_type: Optional[str] = None
39
- allergies: Optional[List[str]] = []
40
- chronic_conditions: Optional[List[str]] = []
41
- medications: Optional[List[str]] = []
42
- emergency_contact_name: Optional[str] = None
43
- emergency_contact_phone: Optional[str] = None
44
- insurance_provider: Optional[str] = None
45
- insurance_policy_number: Optional[str] = None
46
- contact: Optional[ContactInfo] = None
47
-
48
- # --- APPOINTMENT SCHEMA ---
49
- class AppointmentCreate(BaseModel):
50
- patient_id: str # MongoDB ObjectId as string
51
- doctor_id: str # MongoDB ObjectId as string
52
- date: date
53
- time: time
54
- reason: Optional[str] = None
 
1
  from pydantic import BaseModel, EmailStr
2
+ from typing import Optional, List, Literal, Dict, Any
3
+ from datetime import date, time, datetime
4
 
5
  # --- USER SCHEMAS ---
6
  class SignupForm(BaseModel):
 
13
  access_token: str
14
  token_type: str
15
 
16
+ # --- DOCTOR CREATION SCHEMA ---
17
  class DoctorCreate(BaseModel):
18
  matricule: str
19
  email: EmailStr
20
  password: str
21
  full_name: str
22
+ specialty: str
 
23
 
24
  # --- CONTACT INFO ---
25
  class ContactInfo(BaseModel):
26
  email: Optional[EmailStr] = None
27
  phone: Optional[str] = None
28
 
29
+ # --- CONDITION SCHEMA ---
30
+ class Condition(BaseModel):
31
+ id: str
32
+ code: str
33
+ status: Optional[str] = ""
34
+ onset_date: Optional[str] = None
35
+ recorded_date: Optional[str] = None
36
+ verification_status: Optional[str] = ""
37
+
38
+ # --- MEDICATION SCHEMA ---
39
+ class Medication(BaseModel):
40
+ id: str
41
+ name: str
42
+ status: str
43
+ prescribed_date: Optional[str] = None
44
+ requester: Optional[str] = ""
45
+ dosage: Optional[str] = ""
46
+
47
+ # --- ENCOUNTER SCHEMA ---
48
+ class Encounter(BaseModel):
49
+ id: str
50
+ type: str
51
+ status: str
52
+ period: Dict[str, str]
53
+ service_provider: Optional[str] = ""
54
+
55
+ # --- NOTE SCHEMA ---
56
+ class Note(BaseModel):
57
+ id: str
58
+ date: str
59
+ type: str
60
+ text: str
61
+ context: Optional[str] = ""
62
+ author: Optional[str] = "System"
63
+
64
+ # --- PATIENT BASE SCHEMA ---
65
+ class PatientBase(BaseModel):
66
  full_name: str
 
67
  gender: str
68
+ date_of_birth: str
69
+ address: Optional[str] = ""
70
+ city: Optional[str] = ""
71
+ state: Optional[str] = ""
72
+ postal_code: Optional[str] = ""
73
+ country: Optional[str] = "US"
74
+ marital_status: Optional[str] = "Never Married"
75
+ language: Optional[str] = "en"
76
+
77
+ # --- PATIENT CREATE SCHEMA ---
78
+ class PatientCreate(PatientBase):
79
+ conditions: Optional[List[Condition]] = []
80
+ medications: Optional[List[Medication]] = []
81
+ encounters: Optional[List[Encounter]] = []
82
+ notes: Optional[List[Note]] = []
83
+
84
+ # --- PATIENT RESPONSE SCHEMA ---
85
+ class Patient(PatientBase):
86
+ id: str
87
+ fhir_id: Optional[str] = None
88
+ source: Optional[str] = None
89
+ conditions: List[Condition] = []
90
+ medications: List[Medication] = []
91
+ encounters: List[Encounter] = []
92
+ notes: List[Note] = []
93
+
94
+ class Config:
95
+ orm_mode = True
96
+
97
+ # --- PATIENT UPDATE SCHEMA ---
98
+ class PatientUpdate(BaseModel):
99
+ full_name: Optional[str] = None
100
+ gender: Optional[str] = None
101
+ date_of_birth: Optional[str] = None
102
  address: Optional[str] = None
103
+ city: Optional[str] = None
104
+ state: Optional[str] = None
105
+ postal_code: Optional[str] = None
106
+ country: Optional[str] = None
107
+ marital_status: Optional[str] = None
108
+ language: Optional[str] = None
109
+ conditions: Optional[List[Condition]] = None
110
+ medications: Optional[List[Medication]] = None
111
+ encounters: Optional[List[Encounter]] = None
112
+ notes: Optional[List[Note]] = None