healthdatalayer 1.6.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.
Files changed (105) hide show
  1. healthdatalayer/__init__.py +0 -0
  2. healthdatalayer/config/__init__.py +0 -0
  3. healthdatalayer/config/config.py +24 -0
  4. healthdatalayer/config/db.py +12 -0
  5. healthdatalayer/config/vault.py +20 -0
  6. healthdatalayer/dtos/__init__.py +2 -0
  7. healthdatalayer/dtos/collaborator/__init__.py +0 -0
  8. healthdatalayer/dtos/collaborator/schedule_collaborator.py +13 -0
  9. healthdatalayer/dtos/medical_visit/__init__.py +0 -0
  10. healthdatalayer/dtos/medical_visit/medical_certificate.py +62 -0
  11. healthdatalayer/models/__init__.py +75 -0
  12. healthdatalayer/models/bridge_area_floor_branch/__init__.py +0 -0
  13. healthdatalayer/models/bridge_area_floor_branch/area.py +8 -0
  14. healthdatalayer/models/bridge_area_floor_branch/branch.py +16 -0
  15. healthdatalayer/models/bridge_area_floor_branch/bridge_area_floor_branch.py +27 -0
  16. healthdatalayer/models/bridge_area_floor_branch/floor.py +8 -0
  17. healthdatalayer/models/bridge_area_floor_branch/room.py +8 -0
  18. healthdatalayer/models/bridge_area_floor_branch/system.py +8 -0
  19. healthdatalayer/models/client/__init__.py +0 -0
  20. healthdatalayer/models/client/address.py +13 -0
  21. healthdatalayer/models/client/city.py +11 -0
  22. healthdatalayer/models/client/client.py +25 -0
  23. healthdatalayer/models/client/client_type.py +9 -0
  24. healthdatalayer/models/client/education.py +9 -0
  25. healthdatalayer/models/client/emergency_contact.py +17 -0
  26. healthdatalayer/models/client/gender.py +9 -0
  27. healthdatalayer/models/client/marriage_status.py +9 -0
  28. healthdatalayer/models/client/nationality.py +10 -0
  29. healthdatalayer/models/client/pathological_history.py +29 -0
  30. healthdatalayer/models/client/pet.py +16 -0
  31. healthdatalayer/models/client/profession.py +9 -0
  32. healthdatalayer/models/client/px.py +35 -0
  33. healthdatalayer/models/client/state.py +9 -0
  34. healthdatalayer/models/collaborator/__init__.py +0 -0
  35. healthdatalayer/models/collaborator/collaborator.py +33 -0
  36. healthdatalayer/models/collaborator/collaborator_speciality.py +8 -0
  37. healthdatalayer/models/collaborator/collaborator_type.py +9 -0
  38. healthdatalayer/models/collaborator/speciality.py +23 -0
  39. healthdatalayer/models/lab/__init__.py +0 -0
  40. healthdatalayer/models/lab/client_lab.py +13 -0
  41. healthdatalayer/models/lab/measure_lab.py +11 -0
  42. healthdatalayer/models/lab/medical_lab.py +17 -0
  43. healthdatalayer/models/medical_visit/__init__.py +0 -0
  44. healthdatalayer/models/medical_visit/medical_diagnosis.py +12 -0
  45. healthdatalayer/models/medical_visit/medical_diagnosis_visit.py +25 -0
  46. healthdatalayer/models/medical_visit/medical_drug.py +27 -0
  47. healthdatalayer/models/medical_visit/medical_drug_recipe.py +19 -0
  48. healthdatalayer/models/medical_visit/medical_recipe_visit.py +28 -0
  49. healthdatalayer/models/medical_visit/medical_visit.py +53 -0
  50. healthdatalayer/models/medical_visit/organ_system_review.py +28 -0
  51. healthdatalayer/models/medical_visit/physical_exam.py +45 -0
  52. healthdatalayer/models/medical_visit/status_visit_enum.py +8 -0
  53. healthdatalayer/models/medical_visit/visit_triage.py +28 -0
  54. healthdatalayer/models/user/__init__.py +0 -0
  55. healthdatalayer/models/user/permission.py +27 -0
  56. healthdatalayer/models/user/permission_user.py +8 -0
  57. healthdatalayer/models/user/role.py +27 -0
  58. healthdatalayer/models/user/role_permission.py +8 -0
  59. healthdatalayer/models/user/role_user.py +8 -0
  60. healthdatalayer/models/user/user.py +30 -0
  61. healthdatalayer/repositories/__init__.py +40 -0
  62. healthdatalayer/repositories/client_repositories/__init__.py +0 -0
  63. healthdatalayer/repositories/client_repositories/address_repository.py +94 -0
  64. healthdatalayer/repositories/client_repositories/client_type_repository.py +69 -0
  65. healthdatalayer/repositories/client_repositories/education_repository.py +70 -0
  66. healthdatalayer/repositories/client_repositories/emergency_contact_repository.py +78 -0
  67. healthdatalayer/repositories/client_repositories/gender_repository.py +70 -0
  68. healthdatalayer/repositories/client_repositories/marriage_status_repository.py +70 -0
  69. healthdatalayer/repositories/client_repositories/nationality_repository.py +69 -0
  70. healthdatalayer/repositories/client_repositories/pathological_history_repository.py +73 -0
  71. healthdatalayer/repositories/client_repositories/pet_repository.py +126 -0
  72. healthdatalayer/repositories/client_repositories/profession_repository.py +70 -0
  73. healthdatalayer/repositories/client_repositories/px_repository.py +239 -0
  74. healthdatalayer/repositories/collaborator_repositories/__init__.py +0 -0
  75. healthdatalayer/repositories/collaborator_repositories/collaborator_repository.py +197 -0
  76. healthdatalayer/repositories/collaborator_repositories/collaborator_type_repository.py +69 -0
  77. healthdatalayer/repositories/collaborator_repositories/speciality_repository.py +75 -0
  78. healthdatalayer/repositories/infraestructure_repositories/__init__.py +0 -0
  79. healthdatalayer/repositories/infraestructure_repositories/area_repository.py +69 -0
  80. healthdatalayer/repositories/infraestructure_repositories/branch_repository.py +69 -0
  81. healthdatalayer/repositories/infraestructure_repositories/bridge_repository.py +82 -0
  82. healthdatalayer/repositories/infraestructure_repositories/floor_repository.py +69 -0
  83. healthdatalayer/repositories/infraestructure_repositories/room_repository.py +69 -0
  84. healthdatalayer/repositories/infraestructure_repositories/system_repository.py +69 -0
  85. healthdatalayer/repositories/lab_repositories/__init__.py +0 -0
  86. healthdatalayer/repositories/lab_repositories/measure_lab_repository.py +80 -0
  87. healthdatalayer/repositories/lab_repositories/medical_lab_repository.py +254 -0
  88. healthdatalayer/repositories/medical_visit_repositories/__init__.py +0 -0
  89. healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_repository.py +98 -0
  90. healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py +109 -0
  91. healthdatalayer/repositories/medical_visit_repositories/medical_drug_recipe_repository.py +71 -0
  92. healthdatalayer/repositories/medical_visit_repositories/medical_drug_repository.py +78 -0
  93. healthdatalayer/repositories/medical_visit_repositories/medical_recipe_visit_repository.py +93 -0
  94. healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py +509 -0
  95. healthdatalayer/repositories/medical_visit_repositories/organ_system_review_repository.py +89 -0
  96. healthdatalayer/repositories/medical_visit_repositories/physical_exam_repository.py +89 -0
  97. healthdatalayer/repositories/medical_visit_repositories/visit_triage_repository.py +95 -0
  98. healthdatalayer/repositories/user_repositories/__init__.py +0 -0
  99. healthdatalayer/repositories/user_repositories/permission_repository.py +238 -0
  100. healthdatalayer/repositories/user_repositories/role_repository.py +174 -0
  101. healthdatalayer/repositories/user_repositories/user_repository.py +251 -0
  102. healthdatalayer-1.6.6.dist-info/METADATA +30 -0
  103. healthdatalayer-1.6.6.dist-info/RECORD +105 -0
  104. healthdatalayer-1.6.6.dist-info/WHEEL +5 -0
  105. healthdatalayer-1.6.6.dist-info/top_level.txt +1 -0
@@ -0,0 +1,251 @@
1
+ from typing import Optional, List
2
+ from uuid import UUID
3
+ from sqlmodel import select
4
+ from sqlalchemy.orm import selectinload
5
+
6
+ from healthdatalayer.models import User
7
+ from healthdatalayer.models import Role
8
+ from healthdatalayer.models import Permission
9
+ from healthdatalayer.config.db import engines, get_session
10
+
11
+ class UserRepository:
12
+ def __init__(self, tenant: str):
13
+ self.tenant = tenant
14
+ if tenant not in engines:
15
+ raise ValueError(f"Tenant {tenant} is not configured")
16
+
17
+ def create_command(self, user: User) -> User:
18
+ with get_session(self.tenant) as session:
19
+ session.add(user)
20
+ session.commit()
21
+ session.refresh(user)
22
+ return user
23
+
24
+ def get_by_id_command(self, user_id: UUID, load_relations: bool = False) -> Optional[User]:
25
+ with get_session(self.tenant) as session:
26
+ if load_relations:
27
+ statement = select(User).where(User.user_id == user_id).options(
28
+ selectinload(User.roles),
29
+ selectinload(User.permissions)
30
+ )
31
+ return session.exec(statement).first()
32
+ else:
33
+ return session.get(User, user_id)
34
+
35
+ def get_by_username_command(self, username: str, load_relations: bool = False) -> Optional[User]:
36
+ with get_session(self.tenant) as session:
37
+ statement = select(User).where(User.username == username)
38
+
39
+ if load_relations:
40
+ statement = statement.options(
41
+ selectinload(User.roles),
42
+ selectinload(User.permissions)
43
+ )
44
+
45
+ return session.exec(statement).first()
46
+
47
+ def get_by_email_command(self, email: str, load_relations: bool = False) -> Optional[User]:
48
+ with get_session(self.tenant) as session:
49
+ statement = select(User).where(User.email == email)
50
+
51
+ if load_relations:
52
+ statement = statement.options(
53
+ selectinload(User.roles),
54
+ selectinload(User.permissions)
55
+ )
56
+
57
+ return session.exec(statement).first()
58
+
59
+ def search_by_username_command(self, username: str, load_relations: bool = False) -> List[User]:
60
+ with get_session(self.tenant) as session:
61
+ statement = select(User).where(User.username.ilike(f"%{username}%"))
62
+
63
+ if load_relations:
64
+ statement = statement.options(
65
+ selectinload(User.roles),
66
+ selectinload(User.permissions)
67
+ )
68
+
69
+ results = session.exec(statement)
70
+ return results.all()
71
+
72
+ def list_all_command(self, active_only: bool = True, load_relations: bool = False) -> List[User]:
73
+ with get_session(self.tenant) as session:
74
+ statement = select(User)
75
+
76
+ if active_only:
77
+ statement = statement.where(User.is_active == True)
78
+
79
+ if load_relations:
80
+ statement = statement.options(
81
+ selectinload(User.roles),
82
+ selectinload(User.permissions)
83
+ )
84
+
85
+ results = session.exec(statement)
86
+ return results.all()
87
+
88
+ def update_command(self, user: User) -> User:
89
+ with get_session(self.tenant) as session:
90
+ db_user = session.merge(user)
91
+ session.commit()
92
+ session.refresh(db_user)
93
+ return db_user
94
+
95
+ def delete_command(self, user_id: UUID, soft_delete: bool = True) -> bool:
96
+ with get_session(self.tenant) as session:
97
+ db_user = session.get(User, user_id)
98
+ if not db_user:
99
+ return False
100
+
101
+ if soft_delete:
102
+ db_user.is_active = False
103
+ session.add(db_user)
104
+ else:
105
+ session.delete(db_user)
106
+
107
+ session.commit()
108
+ return True
109
+
110
+ def count_command(self, active_only: bool = True) -> int:
111
+ with get_session(self.tenant) as session:
112
+ statement = select(User)
113
+ if active_only:
114
+ statement = statement.where(User.is_active == True)
115
+ results = session.exec(statement)
116
+ return len(results.all())
117
+
118
+ def exists_by_username_command(self, username: str) -> bool:
119
+ with get_session(self.tenant) as session:
120
+ statement = select(User).where(User.username == username)
121
+ result = session.exec(statement).first()
122
+ return result is not None
123
+
124
+ def exists_by_email_command(self, email: str) -> bool:
125
+ with get_session(self.tenant) as session:
126
+ statement = select(User).where(User.email == email)
127
+ result = session.exec(statement).first()
128
+ return result is not None
129
+
130
+ def change_password_command(self, user_id: UUID, new_password: str) -> Optional[User]:
131
+ with get_session(self.tenant) as session:
132
+ user = session.get(User, user_id)
133
+ if not user:
134
+ return None
135
+ user.password = new_password
136
+ session.add(user)
137
+ session.commit()
138
+ session.refresh(user)
139
+ return user
140
+
141
+ # ROLES COMANDS
142
+
143
+ def get_user_roles_command(self, user_id: UUID) -> List[Role]:
144
+ with get_session(self.tenant) as session:
145
+ statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
146
+ user = session.exec(statement).first()
147
+ if not user:
148
+ return []
149
+ return user.roles
150
+
151
+ def has_role_command(self, user_id: UUID, role_name: str) -> bool:
152
+ with get_session(self.tenant) as session:
153
+ statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
154
+ user = session.exec(statement).first()
155
+ if not user:
156
+ return False
157
+ return any(role.name == role_name for role in user.roles)
158
+
159
+ def assign_role_command(self, user_id: UUID, role_id: UUID) -> Optional[User]:
160
+ with get_session(self.tenant) as session:
161
+ user_statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
162
+ user = session.exec(user_statement).first()
163
+ if not user:
164
+ return None
165
+
166
+ role = session.get(Role, role_id)
167
+ if not role:
168
+ return None
169
+
170
+ if role not in user.roles:
171
+ user.roles.append(role)
172
+ session.add(user)
173
+ session.commit()
174
+ session.refresh(user)
175
+
176
+ return user
177
+
178
+ def remove_role_command(self, user_id: UUID, role_id: UUID) -> Optional[User]:
179
+ with get_session(self.tenant) as session:
180
+ user_statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
181
+ user = session.exec(user_statement).first()
182
+ if not user:
183
+ return None
184
+
185
+ role = session.get(Role, role_id)
186
+ if not role:
187
+ return None
188
+
189
+ if role in user.roles:
190
+ user.roles.remove(role)
191
+ session.add(user)
192
+ session.commit()
193
+ session.refresh(user)
194
+
195
+ return user
196
+
197
+ # PERMISSIONS COMANDS
198
+
199
+ def get_user_permissions_command(self, user_id: UUID) -> List[Permission]:
200
+ with get_session(self.tenant) as session:
201
+ statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
202
+ user = session.exec(statement).first()
203
+ if not user:
204
+ return []
205
+ return user.permissions
206
+
207
+ def has_permission_command(self, user_id: UUID, permission_name: str) -> bool:
208
+ with get_session(self.tenant) as session:
209
+ statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
210
+ user = session.exec(statement).first()
211
+ if not user:
212
+ return False
213
+ return any(perm.name == permission_name for perm in user.permissions)
214
+
215
+ def assign_permission_command(self, user_id: UUID, permission_id: UUID) -> Optional[User]:
216
+ with get_session(self.tenant) as session:
217
+ user_statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
218
+ user = session.exec(user_statement).first()
219
+ if not user:
220
+ return None
221
+
222
+ permission = session.get(Permission, permission_id)
223
+ if not permission:
224
+ return None
225
+
226
+ if permission not in user.permissions:
227
+ user.permissions.append(permission)
228
+ session.add(user)
229
+ session.commit()
230
+ session.refresh(user)
231
+
232
+ return user
233
+
234
+ def remove_permission_command(self, user_id: UUID, permission_id: UUID) -> Optional[User]:
235
+ with get_session(self.tenant) as session:
236
+ user_statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
237
+ user = session.exec(user_statement).first()
238
+ if not user:
239
+ return None
240
+
241
+ permission = session.get(Permission, permission_id)
242
+ if not permission:
243
+ return None
244
+
245
+ if permission in user.permissions:
246
+ user.permissions.remove(permission)
247
+ session.add(user)
248
+ session.commit()
249
+ session.refresh(user)
250
+
251
+ return user
@@ -0,0 +1,30 @@
1
+ Metadata-Version: 2.4
2
+ Name: healthdatalayer
3
+ Version: 1.6.6
4
+ Summary: Health Datalayer to access data from different sources
5
+ Author: Jesus Martinez
6
+ Author-email: jesusmartinez@noosds.com
7
+ Classifier: Programming Language :: Python :: 3.10
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.10
11
+ Description-Content-Type: text/markdown
12
+ Requires-Dist: setuptools
13
+ Requires-Dist: wheel
14
+ Requires-Dist: twine
15
+ Requires-Dist: sqlmodel
16
+ Requires-Dist: psycopg2-binary
17
+ Requires-Dist: python-dotenv
18
+ Requires-Dist: azure-keyvault-secrets
19
+ Requires-Dist: azure-identity
20
+ Dynamic: author
21
+ Dynamic: author-email
22
+ Dynamic: classifier
23
+ Dynamic: description
24
+ Dynamic: description-content-type
25
+ Dynamic: requires-dist
26
+ Dynamic: requires-python
27
+ Dynamic: summary
28
+
29
+ # health-data-layer
30
+ ## Resume
@@ -0,0 +1,105 @@
1
+ healthdatalayer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ healthdatalayer/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ healthdatalayer/config/config.py,sha256=vyqrlHDgCGpYX7V9fDn4g671lUU1RuWlSYCIazI-SqQ,689
4
+ healthdatalayer/config/db.py,sha256=b_SWTINJSVUhR0uyD4h93jPLKUzRm6Ky0tmALWbjM18,342
5
+ healthdatalayer/config/vault.py,sha256=9yUMXjaTYSnqr0npcQXDsg6Z7G3DityqpmHl1x42zS0,748
6
+ healthdatalayer/dtos/__init__.py,sha256=AVQURjKBjhSm5d4av-_K__gJWPbSKaKxLbZFu6H-dIM,175
7
+ healthdatalayer/dtos/collaborator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ healthdatalayer/dtos/collaborator/schedule_collaborator.py,sha256=SUD7BIMownZuW9h9GUaFy2U9jaDjZ1tB_9-KCv4H0mk,369
9
+ healthdatalayer/dtos/medical_visit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ healthdatalayer/dtos/medical_visit/medical_certificate.py,sha256=xMROlxFe7o8RMPzVbTTDeJCmy4jyd6b79A5VP2IXrhM,1622
11
+ healthdatalayer/models/__init__.py,sha256=Hz31SDpnjtFZZcf_uLt0MuGqE-_P2ZIsZlPQ_YYaetk,2117
12
+ healthdatalayer/models/bridge_area_floor_branch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ healthdatalayer/models/bridge_area_floor_branch/area.py,sha256=g_u6RoorLJ7XUx7qcqXLavrHxpflHGi0p77f-3RPbVU,201
14
+ healthdatalayer/models/bridge_area_floor_branch/branch.py,sha256=lW2pbZVKkQeEWuShOLKFiNJAKt01mBswczk1hRELInw,515
15
+ healthdatalayer/models/bridge_area_floor_branch/bridge_area_floor_branch.py,sha256=Oso6XAAxTjxsxszjgihPgNDWcXNJ2G_5L27xzJ5ulvs,933
16
+ healthdatalayer/models/bridge_area_floor_branch/floor.py,sha256=uKYLOfSe-SZ4qtG7Kr_DQ8AFzv9QJ9N2HR4qqSkqX1o,204
17
+ healthdatalayer/models/bridge_area_floor_branch/room.py,sha256=nub6QIFyl6ZxGENru5KFSOzeycszD0WFIN0S0AlBfhQ,201
18
+ healthdatalayer/models/bridge_area_floor_branch/system.py,sha256=10r59kLMsLEv9cKa4hEZJoFAicVPS0rw4UNiN5nhsnI,212
19
+ healthdatalayer/models/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ healthdatalayer/models/client/address.py,sha256=rc_Vw9qWECmGcf0GGTChZZj8m6whWSFFGA3xIcsYaBk,343
21
+ healthdatalayer/models/client/city.py,sha256=TYSthPrhdb9iTzDSUC9ZGmx7ZZ0PacxNS2S3ajMhnJU,355
22
+ healthdatalayer/models/client/client.py,sha256=DjW64iOeGKPluKLqyWTTHVste0Y3pF0VL_FvHNLtvyM,786
23
+ healthdatalayer/models/client/client_type.py,sha256=ElTYCXLkVItIhEIj2ZhXqHV872kY4A7gUuhwpm-BKjQ,261
24
+ healthdatalayer/models/client/education.py,sha256=MQN-7Oh1PdneytDmm1DZuZ7wrXzXSTeu08SeKhZ0fi8,256
25
+ healthdatalayer/models/client/emergency_contact.py,sha256=E-H0RiOp4jrKe6K_kOC5ZtdPsyu5InMWucj0tMd6OnU,509
26
+ healthdatalayer/models/client/gender.py,sha256=rVS_DvUpP21NqdghZ9lB-aLkv8X9YJwzu4X6VyE7pwM,247
27
+ healthdatalayer/models/client/marriage_status.py,sha256=D0OH3nx4f_aH6p-12quLsEizjxikB3HFqc3810vUFkE,273
28
+ healthdatalayer/models/client/nationality.py,sha256=k1CKQTQIJAJP_qmeYB-AkRQ1Q5x9-AYOzBBftKT-cCg,275
29
+ healthdatalayer/models/client/pathological_history.py,sha256=8jsOAaSGqk1M-60sLhoJuuz9MeUKbk693dARXgBriTY,1029
30
+ healthdatalayer/models/client/pet.py,sha256=y7jiNF_9Jri0_55geo2hweEj4zdsHKu9ZCelBwfVWeA,516
31
+ healthdatalayer/models/client/profession.py,sha256=eKX6Gf93qwQg2NyJsXKKbmEwQTxHvJCnOwQ5pxCpM0I,259
32
+ healthdatalayer/models/client/px.py,sha256=6F3XUiHDny5B9BT0X_KSdq4i23sjgDkp3CpQIYt6wTs,1319
33
+ healthdatalayer/models/client/state.py,sha256=G_AJOKKfkufZw_axfwSrcL3ZVtKY1FOm0AmCcHfn9Ao,244
34
+ healthdatalayer/models/collaborator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ healthdatalayer/models/collaborator/collaborator.py,sha256=Hju_VTUEgA22KJ5-lr-8dl8UsgeSEj2c5OxuGjU71oM,1064
36
+ healthdatalayer/models/collaborator/collaborator_speciality.py,sha256=TQK8dbbM7LE14MpEpWjTmcYRJCOLlBGxQwrs7zkR5ao,346
37
+ healthdatalayer/models/collaborator/collaborator_type.py,sha256=Z80IHiuLjbMl9mrLqfs-2yKjUGKkuN56T6zf9XaL934,279
38
+ healthdatalayer/models/collaborator/speciality.py,sha256=qxpiYKopYdoClB0l9QjiL6be6njJgAUmXdLuTxEqWQk,618
39
+ healthdatalayer/models/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ healthdatalayer/models/lab/client_lab.py,sha256=5SztcOi5iNc2s5FD9hTHUPgGq77yebe6244DsLyJBnc,472
41
+ healthdatalayer/models/lab/measure_lab.py,sha256=CCyYxnc7cFIW1ip4E2_6Hk7FdboIY2YakPMo8_en140,352
42
+ healthdatalayer/models/lab/medical_lab.py,sha256=aK2iR4IEu-wGLkvJXEKG5yqwBGqzz0a-vFVdMrokndc,689
43
+ healthdatalayer/models/medical_visit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ healthdatalayer/models/medical_visit/medical_diagnosis.py,sha256=Y8uUJbyAN_IfvJ1Iad8YJg4VTEnwCNiuKX1v_TYQXBE,335
45
+ healthdatalayer/models/medical_visit/medical_diagnosis_visit.py,sha256=3ZoWxhqlnjvP4ZjQFPdFoy8uUAOTa0rKDQIBLlNs0-Q,1015
46
+ healthdatalayer/models/medical_visit/medical_drug.py,sha256=zG3oqzq0fGZQNkY7AmFZQaHTG7BVQ3kGJ-tgLgfwNdc,829
47
+ healthdatalayer/models/medical_visit/medical_drug_recipe.py,sha256=Ow91-dWeWatjz4hAnoXbdsk-4BUPCh52kBT9bjHZYKU,701
48
+ healthdatalayer/models/medical_visit/medical_recipe_visit.py,sha256=W8E8RAOtow_-NbEr8SBHnoq_huJlx-6zDrJL98vzNQ4,1042
49
+ healthdatalayer/models/medical_visit/medical_visit.py,sha256=l0DmP1NAdyt3uzpvmuI3BQlynptYZGQ-f12MDYi9Nic,2652
50
+ healthdatalayer/models/medical_visit/organ_system_review.py,sha256=fXWbuDfdy6QBBl-c5X14XBHpyCqLqqZdPNbzdq5H58U,1168
51
+ healthdatalayer/models/medical_visit/physical_exam.py,sha256=VaezGMp4eptJH-mco-SCumATkcpp2xSA6zBtw9LrMFM,1772
52
+ healthdatalayer/models/medical_visit/status_visit_enum.py,sha256=p4krEZXsXpeAtedCwlj1vcPMPM9y-LHWHfkOVEgZtBY,199
53
+ healthdatalayer/models/medical_visit/visit_triage.py,sha256=RrTQ_ckAkOTdNfHXetqKt3a1VmvHSkMZ_5VkGvJQheE,1093
54
+ healthdatalayer/models/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ healthdatalayer/models/user/permission.py,sha256=U4sU_l68X7lMIooaxJN3aZ7eVJT-DDCTI_ApKyvPo-E,801
56
+ healthdatalayer/models/user/permission_user.py,sha256=bc8m5gV_C8QxbmZXfTRsBUG-HgCQHJxOYTBR8tLpiRQ,306
57
+ healthdatalayer/models/user/role.py,sha256=A67jOXEcDMki_bibZMk3IKsLX8JptcP1tjuHxN44AbQ,777
58
+ healthdatalayer/models/user/role_permission.py,sha256=mRMXItgI97Zqu0q9JkhjEPbn6mJQjdosibeZtRBtmMA,306
59
+ healthdatalayer/models/user/role_user.py,sha256=HBLzwY5712DISqBTxrVOrNjnUOAHSYUfX4qcABinb2M,276
60
+ healthdatalayer/models/user/user.py,sha256=Fc1m5xluZMZPHe_TIsRu43dOXdjk3TNU4drrMLcfb9g,975
61
+ healthdatalayer/repositories/__init__.py,sha256=mu3VrCXi7GBJqwjsJHWDuyFFTX0wqBZzmJ7CyAypP6U,2766
62
+ healthdatalayer/repositories/client_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ healthdatalayer/repositories/client_repositories/address_repository.py,sha256=Ae2rHG0zXyqoovcfyGh1hMPBQKLoBVKR5SlytnPO5iA,3436
64
+ healthdatalayer/repositories/client_repositories/client_type_repository.py,sha256=RddxYRoBpktXqbLZy2JC2MDWaXCq9_Auhk1peqe9hSw,2637
65
+ healthdatalayer/repositories/client_repositories/education_repository.py,sha256=T-coaux5h35nkvOr9VPi7Ri_ETtlPdziJAhF2pCFNDo,2583
66
+ healthdatalayer/repositories/client_repositories/emergency_contact_repository.py,sha256=kCPrVY1thMJ1tcybaRupw9L8RB4GhnYbYPincH8bRFI,3259
67
+ healthdatalayer/repositories/client_repositories/gender_repository.py,sha256=KCDg8uiHmpF8L6nNt1OhwZWvQ527ccU3G1ntSP9lYK0,2472
68
+ healthdatalayer/repositories/client_repositories/marriage_status_repository.py,sha256=0GN-nijvB0GDbCYV4KC2SUt0G442UNngbndfA2wRcTo,2790
69
+ healthdatalayer/repositories/client_repositories/nationality_repository.py,sha256=tFrxodxhJgY-f6esq9gGZr7sr5l7qFwgRwnVQ6DOdrw,2694
70
+ healthdatalayer/repositories/client_repositories/pathological_history_repository.py,sha256=RabXI8VCWHUHlHwtrYm2vQE_eyep2wrzOsemgYa5NPY,3082
71
+ healthdatalayer/repositories/client_repositories/pet_repository.py,sha256=aUjti4bUniQbbUz5-bjgvUgDrSpPyggy9k5e-RAoYgc,4802
72
+ healthdatalayer/repositories/client_repositories/profession_repository.py,sha256=ALnx_y_z9Jfx9rBDvOdnK1P1_lkqKmFBeR1GVXj3m3Q,2620
73
+ healthdatalayer/repositories/client_repositories/px_repository.py,sha256=hm-Tn1iHjhqUmjYc1Zf3O98wciHb1z4wb5cUmjDzmxs,11740
74
+ healthdatalayer/repositories/collaborator_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ healthdatalayer/repositories/collaborator_repositories/collaborator_repository.py,sha256=jSKoM46Rp4MDjI1cotr2setidP9su8GKZBC5EsIr6Po,8329
76
+ healthdatalayer/repositories/collaborator_repositories/collaborator_type_repository.py,sha256=7-bJqbxgsJtyRU7nV_YCZhKufYLlighWBWjglw70nUw,2858
77
+ healthdatalayer/repositories/collaborator_repositories/speciality_repository.py,sha256=tcAjp2OzFAnHpRKNdmw2Zsqvs7XdsO51h7cIJHt105s,2940
78
+ healthdatalayer/repositories/infraestructure_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ healthdatalayer/repositories/infraestructure_repositories/area_repository.py,sha256=Ubnir4Vc-ViglmE1KclOnLb_4ZkYPhwALmgWJ76Tr0Y,2393
80
+ healthdatalayer/repositories/infraestructure_repositories/branch_repository.py,sha256=iW0483qD0AXK0cSZ5qHvF-aFnkI8oYLUVfPdFyNBIOQ,2467
81
+ healthdatalayer/repositories/infraestructure_repositories/bridge_repository.py,sha256=dHqWVTxOON3jF-4XZqLmb2unlIlAg-vkU9TPI4kChTo,3658
82
+ healthdatalayer/repositories/infraestructure_repositories/floor_repository.py,sha256=03GuTBI9X1u2zdASEv7t9O2CO7fz6-86Qdj0s11SqhU,2430
83
+ healthdatalayer/repositories/infraestructure_repositories/room_repository.py,sha256=QBN5xSKGj9I2Is1NE6eKpUBkSgTj0yB2Y8y_tZfWQVU,2393
84
+ healthdatalayer/repositories/infraestructure_repositories/system_repository.py,sha256=msEN6VuoCJL2zBQ2FaB7mZjKZJcAcle4lGVy3Sn83QE,2467
85
+ healthdatalayer/repositories/lab_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
+ healthdatalayer/repositories/lab_repositories/measure_lab_repository.py,sha256=AAwgGjaLWTqyH3YHTD_eisunn6I0E0GmYLEseuLgZ0Q,3174
87
+ healthdatalayer/repositories/lab_repositories/medical_lab_repository.py,sha256=owZQe3cXKkXsRuGXpqPBXjZvA-DEb7yD1OKPMOCqF1o,10909
88
+ healthdatalayer/repositories/medical_visit_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_repository.py,sha256=hwb5vh64ze72tFMSIUPNitC5t6pUCcO6pnI0gk-7LZU,4157
90
+ healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py,sha256=5-QSverT7FN5nay2j_EevCqNAnuD--FTDVQnj0_WRhs,5508
91
+ healthdatalayer/repositories/medical_visit_repositories/medical_drug_recipe_repository.py,sha256=fZViKSu21mYihn3C4p7f7wqZkePoHi-Mm5ZI38XpSvw,3330
92
+ healthdatalayer/repositories/medical_visit_repositories/medical_drug_repository.py,sha256=woyrx4vuV7hpxS9WOZNmCTsfWrZiXoMV2__x9lTqPJY,3011
93
+ healthdatalayer/repositories/medical_visit_repositories/medical_recipe_visit_repository.py,sha256=j4cJ4zURKILN3lkqfpXya29MQYFIMiTmJukOADBj5_c,4551
94
+ healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py,sha256=H79OdfjFnw2BtHvI0GwTMT0y8bu5-K5cvORnMa-JvZw,25004
95
+ healthdatalayer/repositories/medical_visit_repositories/organ_system_review_repository.py,sha256=7QNxpQIFcD6B8CX5fua8Qck75j24Y4uEkR_Lans1_0A,4197
96
+ healthdatalayer/repositories/medical_visit_repositories/physical_exam_repository.py,sha256=eCdokx60LB5hLfloqFhvsDj8UxFYXEDi6nqXO0TB18w,3877
97
+ healthdatalayer/repositories/medical_visit_repositories/visit_triage_repository.py,sha256=9Up5M7wWo5GnaYdl6QvTamYaIG4dG_ALM0Su66rlj44,4140
98
+ healthdatalayer/repositories/user_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
+ healthdatalayer/repositories/user_repositories/permission_repository.py,sha256=3L4y-zCkI2PIRo-L3FJRSk4g3nZnu6q35lEY4ACJyq4,9630
100
+ healthdatalayer/repositories/user_repositories/role_repository.py,sha256=jIsbeAFFQQ_CZJqBMcOskuMXtT1Il6eiN0Y2BpVO1JE,6821
101
+ healthdatalayer/repositories/user_repositories/user_repository.py,sha256=FUCNdRRGc12dq5XuwDT3btvDETt6HGXh_xQIPTLCAvk,9839
102
+ healthdatalayer-1.6.6.dist-info/METADATA,sha256=SgmtMLqqsH3tfv6-FiULtb45b1T9O1H2zMOeSvj-5po,827
103
+ healthdatalayer-1.6.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
+ healthdatalayer-1.6.6.dist-info/top_level.txt,sha256=6f1-gvpg533UEVuYsRJCDhdSDQUBwijyAHylyS4nG_4,16
105
+ healthdatalayer-1.6.6.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ healthdatalayer