healthdatalayer 1.0.1__py3-none-any.whl → 1.1.0__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.

Potentially problematic release.


This version of healthdatalayer might be problematic. Click here for more details.

Files changed (88) hide show
  1. {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/METADATA +2 -2
  2. healthdatalayer-1.1.0.dist-info/RECORD +93 -0
  3. models/bridge_area_floor_branch/__init__.py +0 -0
  4. models/bridge_area_floor_branch/area.py +8 -0
  5. models/bridge_area_floor_branch/branch.py +16 -0
  6. models/bridge_area_floor_branch/bridge_area_floor_branch.py +27 -0
  7. models/bridge_area_floor_branch/floor.py +8 -0
  8. models/bridge_area_floor_branch/room.py +8 -0
  9. models/bridge_area_floor_branch/system.py +8 -0
  10. models/client/__init__.py +0 -0
  11. models/client/address.py +13 -0
  12. models/client/client.py +25 -0
  13. models/client/client_type.py +9 -0
  14. models/client/education.py +9 -0
  15. models/client/emergency_contact.py +17 -0
  16. models/client/gender.py +9 -0
  17. models/client/marriage_status.py +9 -0
  18. models/client/nationality.py +10 -0
  19. models/client/pathological_history.py +29 -0
  20. models/client/pet.py +16 -0
  21. models/client/profession.py +9 -0
  22. models/client/px.py +28 -0
  23. models/collaborator/__init__.py +0 -0
  24. models/collaborator/collaborator.py +33 -0
  25. models/collaborator/collaborator_speciality.py +8 -0
  26. models/collaborator/collaborator_type.py +9 -0
  27. models/collaborator/speciality.py +23 -0
  28. models/lab/__init__.py +0 -0
  29. models/lab/client_lab.py +13 -0
  30. models/lab/measure_lab.py +11 -0
  31. models/lab/medical_lab.py +17 -0
  32. models/medical_visit/__init__.py +0 -0
  33. models/medical_visit/medical_diagnosis.py +12 -0
  34. models/medical_visit/medical_diagnosis_visit.py +25 -0
  35. models/medical_visit/medical_drug.py +27 -0
  36. models/medical_visit/medical_drug_recipe.py +18 -0
  37. models/medical_visit/medical_recipe_visit.py +28 -0
  38. models/medical_visit/medical_visit.py +51 -0
  39. models/medical_visit/organ_system_review.py +28 -0
  40. models/medical_visit/physical_exam.py +45 -0
  41. models/medical_visit/visit_triage.py +28 -0
  42. models/user/__init__.py +0 -0
  43. models/user/permission.py +27 -0
  44. models/user/permission_user.py +8 -0
  45. models/user/role.py +27 -0
  46. models/user/role_permission.py +8 -0
  47. models/user/role_user.py +8 -0
  48. models/user/user.py +30 -0
  49. repositories/client_repositories/__init__.py +0 -0
  50. repositories/client_repositories/address_repository.py +64 -0
  51. repositories/client_repositories/client_type_repository.py +69 -0
  52. repositories/client_repositories/education_repository.py +70 -0
  53. repositories/client_repositories/gender_repository.py +70 -0
  54. repositories/client_repositories/marriage_status_repository.py +70 -0
  55. repositories/client_repositories/pet_repository.py +126 -0
  56. repositories/client_repositories/profession_repository.py +70 -0
  57. repositories/client_repositories/px_repository.py +210 -0
  58. repositories/collaborator_repositories/__init__.py +0 -0
  59. repositories/collaborator_repositories/collaborator_repository.py +150 -0
  60. repositories/collaborator_repositories/collaborator_type_repository.py +69 -0
  61. repositories/collaborator_repositories/speciality_repository.py +75 -0
  62. repositories/infraestructure_repositories/__init__.py +0 -0
  63. repositories/infraestructure_repositories/area_repository.py +69 -0
  64. repositories/infraestructure_repositories/branch_repository.py +69 -0
  65. repositories/infraestructure_repositories/bridge_repository.py +80 -0
  66. repositories/infraestructure_repositories/floor_repository.py +69 -0
  67. repositories/infraestructure_repositories/room_repository.py +69 -0
  68. repositories/infraestructure_repositories/system_repository.py +69 -0
  69. repositories/lab_repositories/__init__.py +0 -0
  70. repositories/lab_repositories/measure_lab_repository.py +80 -0
  71. repositories/lab_repositories/medical_lab_repository.py +254 -0
  72. repositories/medical_visit_repositories/__init__.py +0 -0
  73. repositories/medical_visit_repositories/medical_diagnosis_repository.py +63 -0
  74. repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py +92 -0
  75. repositories/medical_visit_repositories/medical_drug_recipe_repository.py +70 -0
  76. repositories/medical_visit_repositories/medical_drug_repository.py +63 -0
  77. repositories/medical_visit_repositories/medical_recipe_visit_repository.py +93 -0
  78. repositories/medical_visit_repositories/medical_visit_repository.py +110 -0
  79. repositories/medical_visit_repositories/organ_system_review_repository.py +89 -0
  80. repositories/medical_visit_repositories/physical_exam_repository.py +89 -0
  81. repositories/medical_visit_repositories/visit_triage_repository.py +89 -0
  82. repositories/user_repositories/__init__.py +0 -0
  83. repositories/user_repositories/permission_repository.py +238 -0
  84. repositories/user_repositories/role_repository.py +174 -0
  85. repositories/user_repositories/user_repository.py +251 -0
  86. healthdatalayer-1.0.1.dist-info/RECORD +0 -10
  87. {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/WHEEL +0 -0
  88. {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: healthdatalayer
3
- Version: 1.0.1
3
+ Version: 1.1.0
4
4
  Summary: Health Datalayer to access data from different sources
5
5
  Author: Jesus Martinez
6
6
  Author-email: jesusmartinez@noosds.com
7
- Classifier: Programming Language :: Python :: 3.13
7
+ Classifier: Programming Language :: Python :: 3.10
8
8
  Classifier: License :: OSI Approved :: MIT License
9
9
  Classifier: Operating System :: OS Independent
10
10
  Requires-Python: >=3.10
@@ -0,0 +1,93 @@
1
+ config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ config/config.py,sha256=vyqrlHDgCGpYX7V9fDn4g671lUU1RuWlSYCIazI-SqQ,689
3
+ config/db.py,sha256=b_SWTINJSVUhR0uyD4h93jPLKUzRm6Ky0tmALWbjM18,342
4
+ config/vault.py,sha256=9yUMXjaTYSnqr0npcQXDsg6Z7G3DityqpmHl1x42zS0,748
5
+ models/__init__.py,sha256=aHts_4fmmSgAGlKe-qZ9aCXjeYPBVaB-VM4LqH-y4_4,1994
6
+ models/bridge_area_floor_branch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ models/bridge_area_floor_branch/area.py,sha256=g_u6RoorLJ7XUx7qcqXLavrHxpflHGi0p77f-3RPbVU,201
8
+ models/bridge_area_floor_branch/branch.py,sha256=QmLLXQZvqWJX6NgeA4e92Owxy8d6DemSI8trbqL7ZfQ,499
9
+ models/bridge_area_floor_branch/bridge_area_floor_branch.py,sha256=Oso6XAAxTjxsxszjgihPgNDWcXNJ2G_5L27xzJ5ulvs,933
10
+ models/bridge_area_floor_branch/floor.py,sha256=uKYLOfSe-SZ4qtG7Kr_DQ8AFzv9QJ9N2HR4qqSkqX1o,204
11
+ models/bridge_area_floor_branch/room.py,sha256=nub6QIFyl6ZxGENru5KFSOzeycszD0WFIN0S0AlBfhQ,201
12
+ models/bridge_area_floor_branch/system.py,sha256=10r59kLMsLEv9cKa4hEZJoFAicVPS0rw4UNiN5nhsnI,212
13
+ models/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ models/client/address.py,sha256=rc_Vw9qWECmGcf0GGTChZZj8m6whWSFFGA3xIcsYaBk,343
15
+ models/client/client.py,sha256=DjW64iOeGKPluKLqyWTTHVste0Y3pF0VL_FvHNLtvyM,786
16
+ models/client/client_type.py,sha256=ElTYCXLkVItIhEIj2ZhXqHV872kY4A7gUuhwpm-BKjQ,261
17
+ models/client/education.py,sha256=MQN-7Oh1PdneytDmm1DZuZ7wrXzXSTeu08SeKhZ0fi8,256
18
+ models/client/emergency_contact.py,sha256=EFkn54jjhKAWIONP5mqq_qWrGBnEJY9ChMpstnhOjlc,493
19
+ models/client/gender.py,sha256=rVS_DvUpP21NqdghZ9lB-aLkv8X9YJwzu4X6VyE7pwM,247
20
+ models/client/marriage_status.py,sha256=D0OH3nx4f_aH6p-12quLsEizjxikB3HFqc3810vUFkE,273
21
+ models/client/nationality.py,sha256=k1CKQTQIJAJP_qmeYB-AkRQ1Q5x9-AYOzBBftKT-cCg,275
22
+ models/client/pathological_history.py,sha256=93kMzYQKjD_EUM_LN0eR1m7QUXCrDsid7yM_25znnPY,1013
23
+ models/client/pet.py,sha256=LG3xFn7YEmbwKz7Anz8DxEloMOyKvPvi72ymUGU1hEU,500
24
+ models/client/profession.py,sha256=eKX6Gf93qwQg2NyJsXKKbmEwQTxHvJCnOwQ5pxCpM0I,259
25
+ models/client/px.py,sha256=fIpSDcWpn5oEi-sIxoTVSBJX9IyHxnRYveiUOhLxCy0,927
26
+ models/collaborator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ models/collaborator/collaborator.py,sha256=u8iCZd5oBGDXF62KEje0mC1FkQMkqJJiXufQr6vGHk0,1000
28
+ models/collaborator/collaborator_speciality.py,sha256=TQK8dbbM7LE14MpEpWjTmcYRJCOLlBGxQwrs7zkR5ao,346
29
+ models/collaborator/collaborator_type.py,sha256=Z80IHiuLjbMl9mrLqfs-2yKjUGKkuN56T6zf9XaL934,279
30
+ models/collaborator/speciality.py,sha256=qxpiYKopYdoClB0l9QjiL6be6njJgAUmXdLuTxEqWQk,618
31
+ models/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ models/lab/client_lab.py,sha256=up2nu3sSf9VDs7k3p1PpDlA5Kkn-qU5jHF6eHHlFcyY,456
33
+ models/lab/measure_lab.py,sha256=CCyYxnc7cFIW1ip4E2_6Hk7FdboIY2YakPMo8_en140,352
34
+ models/lab/medical_lab.py,sha256=aK2iR4IEu-wGLkvJXEKG5yqwBGqzz0a-vFVdMrokndc,689
35
+ models/medical_visit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ models/medical_visit/medical_diagnosis.py,sha256=Y8uUJbyAN_IfvJ1Iad8YJg4VTEnwCNiuKX1v_TYQXBE,335
37
+ models/medical_visit/medical_diagnosis_visit.py,sha256=FfDwedJrIJp2YLDLaKEwHSz9OGZabosYaJmKeVBzBAs,983
38
+ models/medical_visit/medical_drug.py,sha256=q6ML900EIoxbFIVNXGXfPxhaTZ_xx3NRPG8YgEOvBPg,797
39
+ models/medical_visit/medical_drug_recipe.py,sha256=DiygpjyX72sc5jD-h9hue5kU0T4YgZyLxD_qVacnxV0,657
40
+ models/medical_visit/medical_recipe_visit.py,sha256=6c9GOSHF6yJA0fyDiNDJ4gj1MsiRfHL8GhDD1TWIjro,994
41
+ models/medical_visit/medical_visit.py,sha256=rA6dGQZiDi-PePbEwLcelL7TfqDUK3z_mZXcQ0_ghLQ,2210
42
+ models/medical_visit/organ_system_review.py,sha256=mwMUUCmrU0CWdPD5PotBE9xtl-TyrPDFhxeqxwR2AqU,1152
43
+ models/medical_visit/physical_exam.py,sha256=FI080qD_xPmzAuuIjq1AArhqfQADINZTi23qqHcHrSI,1756
44
+ models/medical_visit/visit_triage.py,sha256=IvgjGJi4FR2o4DLAViHA2Jl76JoLw1bhdqVyrUTQSMk,1077
45
+ models/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ models/user/permission.py,sha256=Yw5l5P_KVMn0_UtdyLUb93SoPZeV04pKBFCnA4__1Hs,737
47
+ models/user/permission_user.py,sha256=bc8m5gV_C8QxbmZXfTRsBUG-HgCQHJxOYTBR8tLpiRQ,306
48
+ models/user/role.py,sha256=wIRRImqJKx6nwbazc9JWjqzVScYguG4deP0KIpcbgxU,713
49
+ models/user/role_permission.py,sha256=mRMXItgI97Zqu0q9JkhjEPbn6mJQjdosibeZtRBtmMA,306
50
+ models/user/role_user.py,sha256=HBLzwY5712DISqBTxrVOrNjnUOAHSYUfX4qcABinb2M,276
51
+ models/user/user.py,sha256=T52bNoJeG5pqIEjy2Ez6lLiJA-AN1LE4HWFm-87JqsY,911
52
+ repositories/__init__.py,sha256=b8ya7gJkFq0yzF3h8G0vIiakv_uOB9u859sdBLhEZHI,2504
53
+ repositories/client_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ repositories/client_repositories/address_repository.py,sha256=nl07z6Lt0hmthN2qUnjFkW8SihQzLbbKd07QoHK6fZw,2208
55
+ repositories/client_repositories/client_type_repository.py,sha256=9j8qundXbeMmnLiKLdd6LB7NA3LT5XDO_PKPR2juxmE,2605
56
+ repositories/client_repositories/education_repository.py,sha256=4ZS4XrcTmnBTU8iw-BFs0KortstCD2hf-nnk3knFYHI,2551
57
+ repositories/client_repositories/gender_repository.py,sha256=2V5yadB7fqdOgXwe8gk_qUKutoz--iE4hi98GemBYxE,2440
58
+ repositories/client_repositories/marriage_status_repository.py,sha256=wEuTxL5kqcapLwXImj1Mcy3eUPpsxZLTAP7kgRARDw0,2758
59
+ repositories/client_repositories/pet_repository.py,sha256=X6x7NLOuIErt7f8kq4MfsZovTU0hvQzIIsAX6KtzoMc,4770
60
+ repositories/client_repositories/profession_repository.py,sha256=IypDtVjNZXBLdeplBGoKKp4AAgs4QD_GKgYZUMFghmY,2588
61
+ repositories/client_repositories/px_repository.py,sha256=Lcn6SwfpieSDfOKt_-FlPcP1hN7OPQ0k0mIVq0rL7qY,9643
62
+ repositories/collaborator_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ repositories/collaborator_repositories/collaborator_repository.py,sha256=PVNaprxiybt5deOtNhLYH72s2SrAbBXnqdOCkAG3VPw,6786
64
+ repositories/collaborator_repositories/collaborator_type_repository.py,sha256=jDi5dcwj_S-Ah2YSZyH8ZmSUxihXdvC6iugATFhiwGQ,2826
65
+ repositories/collaborator_repositories/speciality_repository.py,sha256=-c116KOtA4pxo9VHErG4jVGELPodxCQkmfX12MYwgLI,2908
66
+ repositories/infraestructure_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ repositories/infraestructure_repositories/area_repository.py,sha256=kNsctqA5BS0rm56Mj8zoGLyb_v-JtSUG4FyjNPYr4Qw,2361
68
+ repositories/infraestructure_repositories/branch_repository.py,sha256=9bd6ksET2zVT6IXqVI3-8SuJ0MEOIEptW1YkAldPYDM,2435
69
+ repositories/infraestructure_repositories/bridge_repository.py,sha256=IIBtnAGxYF_h-CqNrejfG7L36_e6NxGMcVGumHY3Wv4,3486
70
+ repositories/infraestructure_repositories/floor_repository.py,sha256=AkTugFiB2QeQtLnM0ySR14qdYEk1PoKTD1ZNvDZSeRI,2398
71
+ repositories/infraestructure_repositories/room_repository.py,sha256=zPxpnx4cZiwHm-PvRd3wvDz12DrDTnsMqnpNXfX6vvk,2361
72
+ repositories/infraestructure_repositories/system_repository.py,sha256=dGigIKIOvMAYU1CbtyPh5pUmqyba4_cabGIAuFgIlRc,2435
73
+ repositories/lab_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ repositories/lab_repositories/measure_lab_repository.py,sha256=q5415O99DeM9NLR1rNQLC1dE7oYP86fX7C0LDNt35qY,3142
75
+ repositories/lab_repositories/medical_lab_repository.py,sha256=fVqsss8VwSGq89bAMlEQ3U5YKinC8-I_cjvSFpRDNoA,10669
76
+ repositories/medical_visit_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ repositories/medical_visit_repositories/medical_diagnosis_repository.py,sha256=eZjfKY5mgX2X8mhXyFAScQrO75VKGevCxwhPk39y1-Q,2535
78
+ repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py,sha256=71UekWQNH_U_IVh7157OYWkDeKW4zYtJgUbQE1yqQfI,4611
79
+ repositories/medical_visit_repositories/medical_drug_recipe_repository.py,sha256=BDHY5aXlBvU9vimXA8hj8t9rlc8VHpCEFUp0HgdbuhA,3109
80
+ repositories/medical_visit_repositories/medical_drug_repository.py,sha256=2_cMnCu_tXad-oavW0VuNDOGBa18Aj8eS4AvRT4RElA,2369
81
+ repositories/medical_visit_repositories/medical_recipe_visit_repository.py,sha256=wmotAltMe_GO_R_8EbtwXkH76oNqq30GTC49OjlkfyY,4519
82
+ repositories/medical_visit_repositories/medical_visit_repository.py,sha256=_HttHMMJQ606iuw6zbaFgV0TnNqCht2MmiBwqqVhntI,5119
83
+ repositories/medical_visit_repositories/organ_system_review_repository.py,sha256=cWZXBCbPFjxS-nnnTprYeJQPLnEFXxvzQys_nF-jT4Q,4144
84
+ repositories/medical_visit_repositories/physical_exam_repository.py,sha256=JPKQzF68zTJrjoKygG6yG8ZsVjfMsQHPLTbRuhjqrdY,3829
85
+ repositories/medical_visit_repositories/visit_triage_repository.py,sha256=Oh49zB9ZeSIs2M0o4_czziFIwHKCEGOk9D8ScQTGQW4,3773
86
+ repositories/user_repositories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ repositories/user_repositories/permission_repository.py,sha256=pGLUemxlHWMURewAt9l8zzRwO90UyhG66i8I6JtuS2o,9566
88
+ repositories/user_repositories/role_repository.py,sha256=KWh_FmF84dQ4HarYNFY8hSdqEDh5wyG2RMTjCV1KnvQ,6757
89
+ repositories/user_repositories/user_repository.py,sha256=PcHLKNHIE72ganaygHZh2z7zAQ6ZIdXbHEPBpI7rN4Q,9775
90
+ healthdatalayer-1.1.0.dist-info/METADATA,sha256=2w6JxiVKSb0Qy93h63zJO1j9tmC6bJqpsDMfHjjCIbY,827
91
+ healthdatalayer-1.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
92
+ healthdatalayer-1.1.0.dist-info/top_level.txt,sha256=S84RTy7EJk7BqzfUpsghy7n19iFi9FVqXgHKlv68GPI,27
93
+ healthdatalayer-1.1.0.dist-info/RECORD,,
File without changes
@@ -0,0 +1,8 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field
3
+
4
+ class Area(SQLModel, table=True):
5
+ __tablename__ = "area"
6
+
7
+ area_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
@@ -0,0 +1,16 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field, Relationship
3
+ from typing import Optional
4
+
5
+ from models import System
6
+
7
+ class Branch(SQLModel, table=True):
8
+ __tablename__ = "branch"
9
+
10
+ branch_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
11
+ name: str
12
+ location_x: Optional[float] = None
13
+ location_y: Optional[float] = None
14
+
15
+ system_id: Optional[uuid.UUID] = Field(default=None, foreign_key="system.system_id")
16
+ system: Optional[System] = Relationship()
@@ -0,0 +1,27 @@
1
+ import uuid
2
+ from typing import Optional
3
+ from sqlmodel import SQLModel, Field, Relationship
4
+
5
+ from .area import Area
6
+ from .branch import Branch
7
+ from .floor import Floor
8
+ from .room import Room
9
+
10
+ class BridgeAreaFloorBranch(SQLModel, table=True):
11
+ __tablename__ = "bridge_area_floor_branch"
12
+
13
+ bridge_area_floor_branch_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
14
+
15
+ area_id:Optional[uuid.UUID]=Field(default=None,foreign_key="area.area_id")
16
+ area: Optional[Area] = Relationship()
17
+
18
+ branch_id:Optional[uuid.UUID]=Field(default=None,foreign_key="branch.branch_id")
19
+ branch: Optional[Branch] = Relationship()
20
+
21
+ floor_id:Optional[uuid.UUID]=Field(default=None,foreign_key="floor.floor_id")
22
+ floor: Optional[Floor] = Relationship()
23
+
24
+ room_id:Optional[uuid.UUID]=Field(default=None,foreign_key="room.room_id")
25
+ room: Optional[Room] = Relationship()
26
+
27
+ is_active: bool = Field(default=True)
@@ -0,0 +1,8 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field
3
+
4
+ class Floor(SQLModel, table=True):
5
+ __tablename__ = "floor"
6
+
7
+ floor_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
@@ -0,0 +1,8 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field
3
+
4
+ class Room(SQLModel, table=True):
5
+ __tablename__ = "room"
6
+
7
+ room_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
@@ -0,0 +1,8 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field
3
+
4
+ class System(SQLModel, table=True):
5
+ __tablename__ = "system"
6
+
7
+ system_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
8
+ name: str
File without changes
@@ -0,0 +1,13 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class Address(SQLModel,table=True):
5
+ __tablename__ = "address"
6
+
7
+ address_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ postal_code:str = Field(default=None)
9
+ state:str
10
+ country:str
11
+ city:str
12
+ neighborhood:str
13
+ is_active: bool = Field(default=True)
@@ -0,0 +1,25 @@
1
+ import uuid
2
+ from datetime import datetime
3
+ from typing import Optional, TYPE_CHECKING
4
+ from sqlmodel import SQLModel, Field, Relationship
5
+
6
+ if TYPE_CHECKING:
7
+ from .address import Address
8
+ from .gender import Gender
9
+
10
+ class Client(SQLModel):
11
+ __abstract__ = True
12
+
13
+ client_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
14
+ first_name: str
15
+ birth_date: Optional[datetime] = Field(default=None)
16
+ identification: str
17
+
18
+ gender_id: Optional[uuid.UUID] = Field(default=None, foreign_key="gender.gender_id")
19
+ address_id: Optional[uuid.UUID] = Field(default=None, foreign_key="address.address_id")
20
+
21
+ blood_type: Optional[str] = None
22
+ is_active: bool = Field(default=True)
23
+
24
+ Client.gender = Relationship()
25
+ Client.address = Relationship()
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class ClientType(SQLModel,table=True):
5
+ __tablename__ = "client_type"
6
+
7
+ client_type_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class Education(SQLModel,table=True):
5
+ __tablename__ = "education"
6
+
7
+ education_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -0,0 +1,17 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field, Relationship
3
+ from typing import Optional
4
+
5
+ from models.client.px import Px
6
+
7
+ class EmergencyContact(SQLModel,table=True):
8
+ __tablename__ = "emergency_contact"
9
+
10
+ emergency_contact_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
11
+
12
+ client_id:Optional[uuid.UUID]=Field(default=None,foreign_key="px.client_id")
13
+ client: Optional[Px] = Relationship()
14
+
15
+ name:str
16
+ phone:str
17
+ is_active: bool = Field(default=True)
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class Gender(SQLModel,table=True):
5
+ __tablename__ = "gender"
6
+
7
+ gender_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class MarriageStatus(SQLModel,table=True):
5
+ __tablename__ = "marriage_status"
6
+
7
+ marriage_status_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -0,0 +1,10 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class Nationality(SQLModel,table=True):
5
+ __tablename__ = "nationality"
6
+
7
+ nationality_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ code:str
10
+ is_active: bool = Field(default=True)
@@ -0,0 +1,29 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field,Relationship
3
+ from typing import Optional
4
+
5
+ from models.client.px import Px
6
+
7
+ class PathologicalHistory(SQLModel,table=True):
8
+ __tablename__ = "pathological_history"
9
+
10
+ pathological_history_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
11
+
12
+ client_id:Optional[uuid.UUID]=Field(default=None,foreign_key="px.client_id")
13
+ client: Optional[Px] = Relationship()
14
+
15
+ type_name:str
16
+
17
+ heart_disease: Optional[bool] = Field(default=None)
18
+ hypertension: Optional[bool] = Field(default=None)
19
+ cardiovascular_disease: Optional[bool] = Field(default=None)
20
+ endocrine_metabolic: Optional[bool] = Field(default=None)
21
+ cancer: Optional[bool] = Field(default=None)
22
+ tuberculosis: Optional[bool] = Field(default=None)
23
+ mental_illness: Optional[bool] = Field(default=None)
24
+ malformation: Optional[bool] = Field(default=None)
25
+ other: Optional[bool] = Field(default=None)
26
+
27
+ comment:str
28
+
29
+ is_active: bool = Field(default=True)
models/client/pet.py ADDED
@@ -0,0 +1,16 @@
1
+ import uuid
2
+ from models import Client
3
+ from typing import Optional
4
+ from sqlmodel import Field, Relationship
5
+
6
+ from .client_type import ClientType
7
+ from .px import Px
8
+
9
+ class Pet(Client, table=True):
10
+ __tablename__ = "pet"
11
+
12
+ parent_id:Optional[uuid.UUID]=Field(default=None,foreign_key="px.client_id")
13
+ parent: Optional[Px] = Relationship()
14
+
15
+ client_type_id:Optional[uuid.UUID]=Field(default=None,foreign_key="client_type.client_type_id")
16
+ client_type: Optional[ClientType] = Relationship()
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class Profession(SQLModel,table=True):
5
+ __tablename__ = "profession"
6
+
7
+ profession_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
models/client/px.py ADDED
@@ -0,0 +1,28 @@
1
+ from typing import Optional, TYPE_CHECKING
2
+ from sqlmodel import Field, Relationship
3
+ import uuid
4
+
5
+ from models import Client
6
+
7
+
8
+ if TYPE_CHECKING:
9
+ from models import ClientLab
10
+
11
+
12
+ class Px(Client, table=True):
13
+ __tablename__ = "px"
14
+
15
+ last_name: str
16
+ phone: Optional[str] = None
17
+ email: Optional[str] = None
18
+
19
+ marriage_status_id: Optional[uuid.UUID] = Field(default=None, foreign_key="marriage_status.marriage_status_id")
20
+ profession_id: Optional[uuid.UUID] = Field(default=None, foreign_key="profession.profession_id")
21
+ education_id: Optional[uuid.UUID] = Field(default=None, foreign_key="education.education_id")
22
+ user_id: Optional[uuid.UUID] = Field(default=None, foreign_key="user.user_id")
23
+
24
+ Px.marriage_status = Relationship()
25
+ Px.profession = Relationship()
26
+ Px.education = Relationship()
27
+ Px.user = Relationship()
28
+ Px.medical_labs = Relationship(back_populates="pxs", link_model="ClientLab")
File without changes
@@ -0,0 +1,33 @@
1
+ import uuid
2
+ from typing import Optional, List, TYPE_CHECKING
3
+ from sqlmodel import SQLModel, Field, Relationship
4
+
5
+ from models import User
6
+ from models import CollaboratorSpeciality
7
+
8
+
9
+ if TYPE_CHECKING:
10
+ from models import Speciality
11
+ from models import CollaboratorType
12
+
13
+
14
+ class Collaborator(SQLModel, table=True):
15
+ __tablename__ = "collaborator"
16
+
17
+ collaborator_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
18
+ name: str
19
+ ruc: str
20
+ code: str
21
+
22
+ collaborator_type_id: Optional[uuid.UUID] = Field(default=None, foreign_key="collaborator_type.collaborator_type_id")
23
+ collaborator_type: Optional["CollaboratorType"] = Relationship()
24
+
25
+ user_id: Optional[uuid.UUID] = Field(default=None, foreign_key="user.user_id")
26
+ user: Optional[User] = Relationship()
27
+
28
+ is_active: bool = Field(default=True)
29
+
30
+ specialties: List["Speciality"] = Relationship(
31
+ back_populates="collaborators",
32
+ link_model=CollaboratorSpeciality
33
+ )
@@ -0,0 +1,8 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class CollaboratorSpeciality(SQLModel,table=True):
5
+ __tablename__ = "collaborator_speciality"
6
+
7
+ speciality_id: uuid.UUID = Field(foreign_key="speciality.speciality_id", primary_key=True)
8
+ collaborator_id: uuid.UUID = Field(foreign_key="collaborator.collaborator_id", primary_key=True)
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class CollaboratorType(SQLModel,table=True):
5
+ __tablename__ = "collaborator_type"
6
+
7
+ collaborator_type_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -0,0 +1,23 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+ from typing import List, TYPE_CHECKING
4
+ from sqlmodel import Relationship
5
+
6
+ from .collaborator_speciality import CollaboratorSpeciality
7
+
8
+ if TYPE_CHECKING:
9
+ from .collaborator import Collaborator
10
+
11
+ class Speciality(SQLModel,table=True):
12
+ __tablename__ = "speciality"
13
+
14
+ speciality_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
15
+ subspeciality:str
16
+ name:str
17
+
18
+ is_active: bool = Field(default=True)
19
+
20
+ collaborators: List["Collaborator"] = Relationship(
21
+ back_populates="specialties",
22
+ link_model=CollaboratorSpeciality
23
+ )
models/lab/__init__.py ADDED
File without changes
@@ -0,0 +1,13 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field,Relationship
3
+ from typing import Optional, TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from models.client.px import Px
7
+
8
+ class ClientLab(SQLModel,table=True):
9
+ __tablename__ = "client_lab"
10
+
11
+ client_id: uuid.UUID = Field(foreign_key="px.client_id", primary_key=True)
12
+ client: Optional["Px"] = Relationship()
13
+ medical_lab_id: uuid.UUID = Field(foreign_key="medical_lab.medical_lab_id", primary_key=True)
@@ -0,0 +1,11 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field, Relationship
3
+
4
+ class MeasureLab(SQLModel, table=True):
5
+ __tablename__ = "measure_lab"
6
+
7
+ measure_lab_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
8
+ name: str
9
+ is_active: bool = Field(default=True)
10
+
11
+ MeasureLab.medical_labs = Relationship(back_populates="measure_lab")
@@ -0,0 +1,17 @@
1
+ import uuid
2
+ from typing import Optional,List,TYPE_CHECKING
3
+ from sqlmodel import SQLModel, Field, Relationship
4
+ from .measure_lab import MeasureLab
5
+ if TYPE_CHECKING:
6
+ from .client_lab import ClientLab
7
+
8
+ class MedicalLab(SQLModel, table=True):
9
+ __tablename__ = "medical_lab"
10
+
11
+ medical_lab_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
12
+ parameter: str
13
+ measure_lab_id: Optional[uuid.UUID] = Field(default=None, foreign_key="measure_lab.measure_lab_id")
14
+ is_active: bool = Field(default=True)
15
+
16
+ MedicalLab.measure_lab = Relationship(back_populates="medical_labs")
17
+ MedicalLab.pxs = Relationship(back_populates="medical_labs", link_model="ClientLab")
File without changes
@@ -0,0 +1,12 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel, Field
3
+
4
+ class MedicalDiagnosis(SQLModel, table=True):
5
+ __tablename__ = "medical_diagnosis"
6
+
7
+ medical_diagnosis_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+
9
+ name:str
10
+ cie_10_code: str = Field(index=True, max_length=10)
11
+
12
+ is_active: bool = Field(default=True)
@@ -0,0 +1,25 @@
1
+ import uuid
2
+ from datetime import datetime
3
+ from typing import Optional, TYPE_CHECKING
4
+ from sqlmodel import SQLModel, Field, Relationship
5
+ from models import MedicalDiagnosis
6
+
7
+ if TYPE_CHECKING:
8
+ from models import MedicalVisit
9
+
10
+ class MedicalDiagnosisVisit(SQLModel, table=True):
11
+ __tablename__ = "medical_diagnosis_visit"
12
+
13
+ medical_diagnosis_visit_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
14
+ diagnosis_date: Optional[datetime] = Field(default=None)
15
+ comments: str
16
+
17
+ medical_diagnosis_id: Optional[uuid.UUID] = Field(default=None, foreign_key="medical_diagnosis.medical_diagnosis_id")
18
+ medical_diagnosis: Optional[MedicalDiagnosis] = Relationship()
19
+
20
+ medical_visit_id: Optional[uuid.UUID] = Field(default=None, foreign_key="medical_visit.medical_visit_id")
21
+ medical_visit: Optional["MedicalVisit"] = Relationship(back_populates="medical_diagnosis_visits")
22
+
23
+ type_diagnosis: str
24
+
25
+ is_active: bool = Field(default=True)
@@ -0,0 +1,27 @@
1
+ import uuid
2
+ from datetime import datetime
3
+ from typing import Optional, List, TYPE_CHECKING
4
+ from sqlmodel import SQLModel, Field, Relationship
5
+
6
+ from models.medical_visit.medical_drug_recipe import MedicalDrugRecipe
7
+
8
+ if TYPE_CHECKING:
9
+ from models.medical_visit.medical_recipe_visit import MedicalRecipeVisit
10
+
11
+ class MedicalDrug(SQLModel, table=True):
12
+ __tablename__ = "medical_drug"
13
+
14
+ medical_drug_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
15
+
16
+ drug_name:str
17
+ stock:int
18
+ drug_code:str
19
+ supply_date: Optional[datetime] = Field(default=None)
20
+ public_price:float
21
+
22
+ is_active: bool = Field(default=True)
23
+
24
+ medical_recipe_visits: List["MedicalRecipeVisit"] = Relationship(
25
+ back_populates="medical_drugs",
26
+ link_model=MedicalDrugRecipe
27
+ )
@@ -0,0 +1,18 @@
1
+ import uuid
2
+ from datetime import datetime
3
+ from typing import Optional
4
+ from sqlmodel import SQLModel, Field
5
+
6
+ class MedicalDrugRecipe(SQLModel, table=True):
7
+ __tablename__ = "medical_drug_recipe"
8
+
9
+ medical_drug_recipe_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
10
+
11
+ medical_drug_id: uuid.UUID = Field(foreign_key="medical_drug.medical_drug_id", primary_key=True)
12
+ medical_recipe_visit_id: uuid.UUID = Field(foreign_key="medical_recipe_visit.medical_recipe_visit_id", primary_key=True)
13
+
14
+ quantity:int
15
+ suplied:bool
16
+ suplied_date: Optional[datetime] = Field(default=None)
17
+
18
+ is_active: bool = Field(default=True)
@@ -0,0 +1,28 @@
1
+ import uuid
2
+ from datetime import datetime
3
+ from typing import Optional, List, TYPE_CHECKING
4
+ from sqlmodel import SQLModel, Field, Relationship
5
+
6
+
7
+ from models import MedicalDrugRecipe
8
+
9
+ if TYPE_CHECKING:
10
+ from models.medical_visit.medical_drug import MedicalDrug
11
+ from models import MedicalVisit
12
+
13
+ class MedicalRecipeVisit(SQLModel, table=True):
14
+ __tablename__ = "medical_recipe_visit"
15
+
16
+ medical_recipe_visit_id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
17
+ completed_supplied: bool
18
+ completed_supplied_date: Optional[datetime] = Field(default=None)
19
+
20
+ medical_visit_id: Optional[uuid.UUID] = Field(default=None, foreign_key="medical_visit.medical_visit_id")
21
+ medical_visit: Optional["MedicalVisit"] = Relationship(back_populates="medical_recipe_visits")
22
+
23
+ is_active: bool = Field(default=True)
24
+
25
+ medical_drugs: List["MedicalDrug"] = Relationship(
26
+ back_populates="medical_recipe_visits",
27
+ link_model=MedicalDrugRecipe
28
+ )