healthdatalayer 1.4.4__py3-none-any.whl → 1.4.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,10 @@ import uuid
2
2
  from datetime import datetime
3
3
  from typing import Optional, List, TYPE_CHECKING
4
4
  from sqlmodel import SQLModel, Field, Relationship
5
+ from sqlalchemy import Column, Enum as SqlEnum
5
6
 
6
7
  from healthdatalayer.models import Collaborator
7
-
8
+ from healthdatalayer.models.medical_visit.status_visit_enum import StatusVisitEnum
8
9
  from healthdatalayer.models import Speciality
9
10
  from healthdatalayer.models import BridgeAreaFloorBranch
10
11
  if TYPE_CHECKING:
@@ -28,7 +29,7 @@ class MedicalVisit(SQLModel, table=True):
28
29
  speciality_id:Optional[uuid.UUID]=Field(default=None,foreign_key="speciality.speciality_id")
29
30
  speciality: Optional[Speciality] = Relationship()
30
31
 
31
- status_visit:str
32
+ status_visit: StatusVisitEnum = Field(sa_column=Column(SqlEnum(StatusVisitEnum, native_enum=False), nullable=False))
32
33
 
33
34
  next_followup_visit_id:Optional[uuid.UUID]=Field(default=None,foreign_key="medical_visit.medical_visit_id")
34
35
 
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+ class StatusVisitEnum(str, Enum):
4
+ AGENDADO = "AGENDADO"
5
+ REAGENDADO = "REAGENDADO"
6
+ CANCELADO = "CANCELADO"
7
+ ATENDIDO = "ATENDIDO"
8
+ NO_ATENDIDO = "NO_ATENDIDO"
@@ -21,6 +21,36 @@ class MedicalDiagnosisRepository:
21
21
  def get_by_id_command(self, medical_diagnosis_id: UUID) -> Optional[MedicalDiagnosis]:
22
22
  with get_session(self.tenant) as session:
23
23
  return session.get(MedicalDiagnosis, medical_diagnosis_id)
24
+
25
+ def get_by_name_command(self, name:str, active_only: bool = True) -> Optional[MedicalDiagnosis]:
26
+ with get_session(self.tenant) as session:
27
+ statement = select(MedicalDiagnosis).where(MedicalDiagnosis.name == name)
28
+
29
+ if active_only:
30
+ statement = statement.where(MedicalDiagnosis.is_active == True)
31
+
32
+ medical_diagnosis = session.exec(statement).first()
33
+ return medical_diagnosis
34
+
35
+ def get_by_name_ilike_command(self, name:str, active_only: bool = True) -> List[MedicalDiagnosis]:
36
+ with get_session(self.tenant) as session:
37
+ statement = select(MedicalDiagnosis).where(MedicalDiagnosis.name.ilike(f"%{name}%"))
38
+
39
+ if active_only:
40
+ statement = statement.where(MedicalDiagnosis.is_active == True)
41
+
42
+ medical_diagnosis = session.exec(statement).all()
43
+ return medical_diagnosis
44
+
45
+ def get_by_code_command(self, code:str, active_only: bool = True) -> Optional[MedicalDiagnosis]:
46
+ with get_session(self.tenant) as session:
47
+ statement = select(MedicalDiagnosis).where(MedicalDiagnosis.cie_10_code == code)
48
+
49
+ if active_only:
50
+ statement = statement.where(MedicalDiagnosis.is_active == True)
51
+
52
+ medical_diagnosis = session.exec(statement).first()
53
+ return medical_diagnosis
24
54
 
25
55
  def list_all_command(self, active_only: bool = True) -> List[MedicalDiagnosis]:
26
56
  with get_session(self.tenant) as session:
@@ -33,10 +33,27 @@ class MedicalDiagnosisVisitRepository:
33
33
  else:
34
34
  return session.get(MedicalDiagnosisVisit, medical_diagnosis_visit_id)
35
35
 
36
- def get_by_medical_visit_id_command(self, medical_visit_id: UUID, load_relations: bool = False) ->Optional[MedicalDiagnosisVisit]:
36
+ def get_by_medical_visit_id_command(self, medical_visit_id: UUID, load_relations: bool = False) ->List[MedicalDiagnosisVisit]:
37
37
  with get_session(self.tenant) as session:
38
38
 
39
39
  statement = select(MedicalDiagnosisVisit).where(MedicalDiagnosisVisit.medical_visit_id == medical_visit_id)
40
+ if load_relations:
41
+ statement = statement.options(
42
+ joinedload(MedicalDiagnosisVisit.medical_visit),
43
+ joinedload(MedicalDiagnosisVisit.medical_diagnosis)
44
+ )
45
+ medical_diagnosis_visits = session.exec(statement).all()
46
+
47
+ return medical_diagnosis_visits
48
+
49
+ def get_by_medicalvisitid_and_diagnosisid_command(self, medical_visit_id: UUID, medical_diagnosis_id: UUID, load_relations: bool = False) ->Optional[MedicalDiagnosisVisit]:
50
+ with get_session(self.tenant) as session:
51
+
52
+ statement = select(MedicalDiagnosisVisit).where(
53
+ MedicalDiagnosisVisit.medical_visit_id == medical_visit_id,
54
+ MedicalDiagnosisVisit.medical_diagnosis_id == medical_diagnosis_id
55
+ )
56
+
40
57
  if load_relations:
41
58
  statement = statement.options(
42
59
  joinedload(MedicalDiagnosisVisit.medical_visit),
@@ -46,7 +63,7 @@ class MedicalDiagnosisVisitRepository:
46
63
 
47
64
  return medical_diagnosis_visit
48
65
 
49
- def get_all_command(self, active_only: bool = True,load_related: bool = False) -> List[MedicalDiagnosisVisit]:
66
+ def list_all_command(self, active_only: bool = True,load_related: bool = False) -> List[MedicalDiagnosisVisit]:
50
67
  with get_session(self.tenant) as session:
51
68
 
52
69
  statement = select(MedicalDiagnosisVisit)
@@ -1,6 +1,7 @@
1
1
  from typing import Optional, List
2
+ from datetime import datetime
2
3
  from uuid import UUID
3
- from sqlmodel import select, or_
4
+ from sqlmodel import select
4
5
  from sqlalchemy.orm import selectinload,joinedload
5
6
  from healthdatalayer.models import MedicalVisit
6
7
  from healthdatalayer.config.db import engines, get_session
@@ -79,6 +80,123 @@ class MedicalVisitRepository:
79
80
 
80
81
  medical_visits = session.exec(statement).all()
81
82
  return medical_visits
83
+
84
+ def get_by_collaborator_id_command(self, collaborator_id: UUID, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
85
+ with get_session(self.tenant) as session:
86
+ statement = select(MedicalVisit).where(MedicalVisit.collaborator_id == collaborator_id)
87
+
88
+ if active_only:
89
+ statement = statement.where(MedicalVisit.is_active == True)
90
+ if load_relations:
91
+ statement = statement.options(
92
+ joinedload(MedicalVisit.client),
93
+ joinedload(MedicalVisit.collaborator),
94
+ joinedload(MedicalVisit.speciality),
95
+ selectinload(MedicalVisit.medical_diagnosis_visits),
96
+ selectinload(MedicalVisit.medical_recipe_visits),
97
+ selectinload(MedicalVisit.organ_system_reviews),
98
+ selectinload(MedicalVisit.physical_exams)
99
+ )
100
+
101
+ medical_visits = session.exec(statement).all()
102
+ return medical_visits
103
+
104
+ def get_by_next_followup_id_command(self, next_followup_id: UUID, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
105
+ with get_session(self.tenant) as session:
106
+ statement = select(MedicalVisit).where(MedicalVisit.next_followup_visit_id == next_followup_id)
107
+
108
+ if active_only:
109
+ statement = statement.where(MedicalVisit.is_active == True)
110
+ if load_relations:
111
+ statement = statement.options(
112
+ joinedload(MedicalVisit.client),
113
+ joinedload(MedicalVisit.collaborator),
114
+ joinedload(MedicalVisit.speciality),
115
+ selectinload(MedicalVisit.medical_diagnosis_visits),
116
+ selectinload(MedicalVisit.medical_recipe_visits),
117
+ selectinload(MedicalVisit.organ_system_reviews),
118
+ selectinload(MedicalVisit.physical_exams)
119
+ )
120
+
121
+ medical_visits = session.exec(statement).all()
122
+ return medical_visits
123
+
124
+ def get_by_collaboratorid_and_daterange_command(self, collaborator_id: UUID, start_date: datetime, end_date: datetime, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
125
+ with get_session(self.tenant) as session:
126
+ statement = select(MedicalVisit).where(
127
+ MedicalVisit.collaborator_id == collaborator_id,
128
+ MedicalVisit.visit_date >= start_date
129
+ )
130
+
131
+ if end_date is not None:
132
+ statement = statement.where(MedicalVisit.visit_date <= end_date)
133
+ if active_only:
134
+ statement = statement.where(MedicalVisit.is_active == True)
135
+ if load_relations:
136
+ statement = statement.options(
137
+ joinedload(MedicalVisit.client),
138
+ joinedload(MedicalVisit.collaborator),
139
+ joinedload(MedicalVisit.speciality),
140
+ selectinload(MedicalVisit.medical_diagnosis_visits),
141
+ selectinload(MedicalVisit.medical_recipe_visits),
142
+ selectinload(MedicalVisit.organ_system_reviews),
143
+ selectinload(MedicalVisit.physical_exams)
144
+ )
145
+
146
+ medical_visits = session.exec(statement).all()
147
+ return medical_visits
148
+
149
+ def get_by_collaboratorid_and_targetdate_command(self, collaborator_id: UUID, target_date: datetime, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
150
+ with get_session(self.tenant) as session:
151
+
152
+ start_of_day = datetime.combine(target_date.date(), datetime.min.time())
153
+ end_of_day = datetime.combine(target_date.date(), datetime.max.time())
154
+
155
+ statement = select(MedicalVisit).where(
156
+ MedicalVisit.collaborator_id == collaborator_id,
157
+ MedicalVisit.visit_date >= start_of_day,
158
+ MedicalVisit.visit_date <= end_of_day
159
+ )
160
+
161
+ if active_only:
162
+ statement = statement.where(MedicalVisit.is_active == True)
163
+ if load_relations:
164
+ statement = statement.options(
165
+ joinedload(MedicalVisit.client),
166
+ joinedload(MedicalVisit.collaborator),
167
+ joinedload(MedicalVisit.speciality),
168
+ selectinload(MedicalVisit.medical_diagnosis_visits),
169
+ selectinload(MedicalVisit.medical_recipe_visits),
170
+ selectinload(MedicalVisit.organ_system_reviews),
171
+ selectinload(MedicalVisit.physical_exams)
172
+ )
173
+
174
+ medical_visits = session.exec(statement).all()
175
+ return medical_visits
176
+
177
+ def get_by_collaboratorid_and_specificdatetime_command(self, collaborator_id: UUID, specific_datetime: datetime, active_only: bool = True, load_relations: bool = False) -> Optional[MedicalVisit]:
178
+ with get_session(self.tenant) as session:
179
+
180
+ statement = select(MedicalVisit).where(
181
+ MedicalVisit.collaborator_id == collaborator_id,
182
+ MedicalVisit.visit_date == specific_datetime
183
+ )
184
+
185
+ if active_only:
186
+ statement = statement.where(MedicalVisit.is_active == True)
187
+ if load_relations:
188
+ statement = statement.options(
189
+ joinedload(MedicalVisit.client),
190
+ joinedload(MedicalVisit.collaborator),
191
+ joinedload(MedicalVisit.speciality),
192
+ selectinload(MedicalVisit.medical_diagnosis_visits),
193
+ selectinload(MedicalVisit.medical_recipe_visits),
194
+ selectinload(MedicalVisit.organ_system_reviews),
195
+ selectinload(MedicalVisit.physical_exams)
196
+ )
197
+
198
+ medical_visit = session.exec(statement).first()
199
+ return medical_visit
82
200
 
83
201
  def update_command(self, medical_visit: MedicalVisit) -> MedicalVisit:
84
202
  with get_session(self.tenant) as session:
@@ -107,4 +225,10 @@ class MedicalVisitRepository:
107
225
  session.delete(existing_bridge)
108
226
 
109
227
  session.commit()
228
+
229
+ def exists_by_collaboratoid_and_targetdate_command(self, collaborator_id: UUID, target_date: datetime) -> bool:
230
+ with get_session(self.tenant) as session:
231
+ statement = select(MedicalVisit).where(MedicalVisit.collaborator_id == collaborator_id, MedicalVisit.visit_date == target_date)
232
+ result = session.exec(statement).first()
233
+ return result is not None
110
234
 
@@ -1,6 +1,6 @@
1
1
  from typing import Optional, List
2
2
  from uuid import UUID
3
- from sqlmodel import select, or_
3
+ from sqlmodel import select
4
4
  from sqlalchemy.orm import selectinload,joinedload
5
5
  from healthdatalayer.models import VisitTriage
6
6
  from healthdatalayer.models import MedicalVisit
@@ -86,4 +86,10 @@ class VisitTriageRepository:
86
86
  else:
87
87
  session.delete(existing_visit_triage)
88
88
 
89
- session.commit()
89
+ session.commit()
90
+
91
+ def exists_by_medical_visit_id_command(self, medical_visit_id: UUID) -> bool:
92
+ with get_session(self.tenant) as session:
93
+ statement = select(VisitTriage).where(VisitTriage.medical_visit_id == medical_visit_id)
94
+ result = session.exec(statement).first()
95
+ return result is not None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: healthdatalayer
3
- Version: 1.4.4
3
+ Version: 1.4.6
4
4
  Summary: Health Datalayer to access data from different sources
5
5
  Author: Jesus Martinez
6
6
  Author-email: jesusmartinez@noosds.com
@@ -41,9 +41,10 @@ healthdatalayer/models/medical_visit/medical_diagnosis_visit.py,sha256=3ZoWxhqln
41
41
  healthdatalayer/models/medical_visit/medical_drug.py,sha256=zG3oqzq0fGZQNkY7AmFZQaHTG7BVQ3kGJ-tgLgfwNdc,829
42
42
  healthdatalayer/models/medical_visit/medical_drug_recipe.py,sha256=DiygpjyX72sc5jD-h9hue5kU0T4YgZyLxD_qVacnxV0,657
43
43
  healthdatalayer/models/medical_visit/medical_recipe_visit.py,sha256=W8E8RAOtow_-NbEr8SBHnoq_huJlx-6zDrJL98vzNQ4,1042
44
- healthdatalayer/models/medical_visit/medical_visit.py,sha256=ow5KTmRCaTj5RBKeQ-gfTms-L3kBgqZl90elSbImsVc,2338
44
+ healthdatalayer/models/medical_visit/medical_visit.py,sha256=3CtXkXiFasuYEXGGHVfAKYu4VSsv8Xj8tTcR-dzqqmI,2567
45
45
  healthdatalayer/models/medical_visit/organ_system_review.py,sha256=fXWbuDfdy6QBBl-c5X14XBHpyCqLqqZdPNbzdq5H58U,1168
46
46
  healthdatalayer/models/medical_visit/physical_exam.py,sha256=VaezGMp4eptJH-mco-SCumATkcpp2xSA6zBtw9LrMFM,1772
47
+ healthdatalayer/models/medical_visit/status_visit_enum.py,sha256=p4krEZXsXpeAtedCwlj1vcPMPM9y-LHWHfkOVEgZtBY,199
47
48
  healthdatalayer/models/medical_visit/visit_triage.py,sha256=RrTQ_ckAkOTdNfHXetqKt3a1VmvHSkMZ_5VkGvJQheE,1093
48
49
  healthdatalayer/models/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  healthdatalayer/models/user/permission.py,sha256=U4sU_l68X7lMIooaxJN3aZ7eVJT-DDCTI_ApKyvPo-E,801
@@ -80,20 +81,20 @@ healthdatalayer/repositories/lab_repositories/__init__.py,sha256=47DEQpj8HBSa-_T
80
81
  healthdatalayer/repositories/lab_repositories/measure_lab_repository.py,sha256=AAwgGjaLWTqyH3YHTD_eisunn6I0E0GmYLEseuLgZ0Q,3174
81
82
  healthdatalayer/repositories/lab_repositories/medical_lab_repository.py,sha256=owZQe3cXKkXsRuGXpqPBXjZvA-DEb7yD1OKPMOCqF1o,10909
82
83
  healthdatalayer/repositories/medical_visit_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_repository.py,sha256=mRrNGt6Z4vsZBhvhlOSXlED289WelBJbTn5EetMmQJ8,2567
84
- healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py,sha256=GKgjRvddcaw82WMXDO9R7S8HuaJPYTvRT0ev2trKaa8,4659
84
+ healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_repository.py,sha256=dnVW3hMUqrVGctBSNKVU2_j0ITH46aXN31XduELO8wg,4012
85
+ healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py,sha256=BHhglV8CBw4xpcLsFjRJPglg2D0ASnYD2k4RmbP80tU,5499
85
86
  healthdatalayer/repositories/medical_visit_repositories/medical_drug_recipe_repository.py,sha256=6rubP_KtheyJSvLmpBJwYuPKNsjhSvKi-_HM2QoP1hM,3141
86
87
  healthdatalayer/repositories/medical_visit_repositories/medical_drug_repository.py,sha256=mJNN6_aAK3eY9IpFc16nT3IshObGcFE5fi27SK-Sjio,2401
87
88
  healthdatalayer/repositories/medical_visit_repositories/medical_recipe_visit_repository.py,sha256=j4cJ4zURKILN3lkqfpXya29MQYFIMiTmJukOADBj5_c,4551
88
- healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py,sha256=r6l4L2AuStV_9NO208_GG8REJRnFtHBU2zx0BjnYuCI,5151
89
+ healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py,sha256=BmPLxuB22QOPukAAduIKwWq5lQkhKdILF4AuCF7Bj-s,11693
89
90
  healthdatalayer/repositories/medical_visit_repositories/organ_system_review_repository.py,sha256=-BTfgzvt8VlE2FsBHX3snzRl2VDrRClqz-dJL3bLheE,4192
90
91
  healthdatalayer/repositories/medical_visit_repositories/physical_exam_repository.py,sha256=Q4R2-6fv57jqZrGUMFQw4YZgZGQbn8UmSRS3UhUSZQg,3877
91
- healthdatalayer/repositories/medical_visit_repositories/visit_triage_repository.py,sha256=0xVnhXV2CSNi2FcW2tG_BGsqlm_oA9jvXP5qz5Aqj_c,3821
92
+ healthdatalayer/repositories/medical_visit_repositories/visit_triage_repository.py,sha256=9Up5M7wWo5GnaYdl6QvTamYaIG4dG_ALM0Su66rlj44,4140
92
93
  healthdatalayer/repositories/user_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
94
  healthdatalayer/repositories/user_repositories/permission_repository.py,sha256=3L4y-zCkI2PIRo-L3FJRSk4g3nZnu6q35lEY4ACJyq4,9630
94
95
  healthdatalayer/repositories/user_repositories/role_repository.py,sha256=jIsbeAFFQQ_CZJqBMcOskuMXtT1Il6eiN0Y2BpVO1JE,6821
95
96
  healthdatalayer/repositories/user_repositories/user_repository.py,sha256=FUCNdRRGc12dq5XuwDT3btvDETt6HGXh_xQIPTLCAvk,9839
96
- healthdatalayer-1.4.4.dist-info/METADATA,sha256=Bve8ZfDL4fPSh3MDTlCtYY0HSC-t2mCTT2y2x1Iskx4,827
97
- healthdatalayer-1.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
- healthdatalayer-1.4.4.dist-info/top_level.txt,sha256=6f1-gvpg533UEVuYsRJCDhdSDQUBwijyAHylyS4nG_4,16
99
- healthdatalayer-1.4.4.dist-info/RECORD,,
97
+ healthdatalayer-1.4.6.dist-info/METADATA,sha256=T7QzPWNWK4gtfco36C-ZFyfMT95eNS_vbU3EYjybbWM,827
98
+ healthdatalayer-1.4.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
+ healthdatalayer-1.4.6.dist-info/top_level.txt,sha256=6f1-gvpg533UEVuYsRJCDhdSDQUBwijyAHylyS4nG_4,16
100
+ healthdatalayer-1.4.6.dist-info/RECORD,,