healthdatalayer 1.4.3__tar.gz → 1.4.5__tar.gz

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 (106) hide show
  1. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/PKG-INFO +1 -1
  2. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/__init__.py +2 -0
  3. healthdatalayer-1.4.5/healthdatalayer/models/client/city.py +11 -0
  4. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/px.py +2 -0
  5. healthdatalayer-1.4.5/healthdatalayer/models/client/state.py +9 -0
  6. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_visit.py +3 -2
  7. healthdatalayer-1.4.5/healthdatalayer/models/medical_visit/status_visit_enum.py +8 -0
  8. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/address_repository.py +32 -2
  9. healthdatalayer-1.4.5/healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py +234 -0
  10. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer.egg-info/PKG-INFO +1 -1
  11. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer.egg-info/SOURCES.txt +3 -0
  12. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/setup.py +1 -1
  13. healthdatalayer-1.4.3/healthdatalayer/repositories/medical_visit_repositories/medical_visit_repository.py +0 -110
  14. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/README.md +0 -0
  15. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/__init__.py +0 -0
  16. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/config/__init__.py +0 -0
  17. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/config/config.py +0 -0
  18. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/config/db.py +0 -0
  19. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/config/vault.py +0 -0
  20. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/__init__.py +0 -0
  21. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/area.py +0 -0
  22. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/branch.py +0 -0
  23. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/bridge_area_floor_branch.py +0 -0
  24. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/floor.py +0 -0
  25. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/room.py +0 -0
  26. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/bridge_area_floor_branch/system.py +0 -0
  27. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/__init__.py +0 -0
  28. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/address.py +0 -0
  29. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/client.py +0 -0
  30. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/client_type.py +0 -0
  31. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/education.py +0 -0
  32. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/emergency_contact.py +0 -0
  33. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/gender.py +0 -0
  34. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/marriage_status.py +0 -0
  35. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/nationality.py +0 -0
  36. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/pathological_history.py +0 -0
  37. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/pet.py +0 -0
  38. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/client/profession.py +0 -0
  39. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/collaborator/__init__.py +0 -0
  40. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/collaborator/collaborator.py +0 -0
  41. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/collaborator/collaborator_speciality.py +0 -0
  42. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/collaborator/collaborator_type.py +0 -0
  43. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/collaborator/speciality.py +0 -0
  44. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/lab/__init__.py +0 -0
  45. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/lab/client_lab.py +0 -0
  46. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/lab/measure_lab.py +0 -0
  47. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/lab/medical_lab.py +0 -0
  48. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/__init__.py +0 -0
  49. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_diagnosis.py +0 -0
  50. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_diagnosis_visit.py +0 -0
  51. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_drug.py +0 -0
  52. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_drug_recipe.py +0 -0
  53. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/medical_recipe_visit.py +0 -0
  54. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/organ_system_review.py +0 -0
  55. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/physical_exam.py +0 -0
  56. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/medical_visit/visit_triage.py +0 -0
  57. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/__init__.py +0 -0
  58. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/permission.py +0 -0
  59. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/permission_user.py +0 -0
  60. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/role.py +0 -0
  61. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/role_permission.py +0 -0
  62. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/role_user.py +0 -0
  63. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/models/user/user.py +0 -0
  64. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/__init__.py +0 -0
  65. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/__init__.py +0 -0
  66. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/client_type_repository.py +0 -0
  67. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/education_repository.py +0 -0
  68. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/emergency_contact_repository.py +0 -0
  69. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/gender_repository.py +0 -0
  70. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/marriage_status_repository.py +0 -0
  71. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/nationality_repository.py +0 -0
  72. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/pathological_history_repository.py +0 -0
  73. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/pet_repository.py +0 -0
  74. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/profession_repository.py +0 -0
  75. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/client_repositories/px_repository.py +0 -0
  76. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/collaborator_repositories/__init__.py +0 -0
  77. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/collaborator_repositories/collaborator_repository.py +0 -0
  78. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/collaborator_repositories/collaborator_type_repository.py +0 -0
  79. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/collaborator_repositories/speciality_repository.py +0 -0
  80. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/__init__.py +0 -0
  81. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/area_repository.py +0 -0
  82. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/branch_repository.py +0 -0
  83. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/bridge_repository.py +0 -0
  84. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/floor_repository.py +0 -0
  85. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/room_repository.py +0 -0
  86. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/infraestructure_repositories/system_repository.py +0 -0
  87. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/lab_repositories/__init__.py +0 -0
  88. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/lab_repositories/measure_lab_repository.py +0 -0
  89. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/lab_repositories/medical_lab_repository.py +0 -0
  90. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/__init__.py +0 -0
  91. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_repository.py +0 -0
  92. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py +0 -0
  93. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/medical_drug_recipe_repository.py +0 -0
  94. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/medical_drug_repository.py +0 -0
  95. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/medical_recipe_visit_repository.py +0 -0
  96. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/organ_system_review_repository.py +0 -0
  97. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/physical_exam_repository.py +0 -0
  98. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/medical_visit_repositories/visit_triage_repository.py +0 -0
  99. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/user_repositories/__init__.py +0 -0
  100. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/user_repositories/permission_repository.py +0 -0
  101. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/user_repositories/role_repository.py +0 -0
  102. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer/repositories/user_repositories/user_repository.py +0 -0
  103. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer.egg-info/dependency_links.txt +0 -0
  104. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer.egg-info/requires.txt +0 -0
  105. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/healthdatalayer.egg-info/top_level.txt +0 -0
  106. {healthdatalayer-1.4.3 → healthdatalayer-1.4.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: healthdatalayer
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Health Datalayer to access data from different sources
5
5
  Author: Jesus Martinez
6
6
  Author-email: jesusmartinez@noosds.com
@@ -24,6 +24,8 @@ from .client.pathological_history import PathologicalHistory
24
24
  from .client.pet import Pet
25
25
  from .client.profession import Profession
26
26
  from .client.px import Px
27
+ from .client.state import State
28
+ from .client.city import City
27
29
 
28
30
  from .collaborator.collaborator_speciality import CollaboratorSpeciality
29
31
  from .collaborator.collaborator import Collaborator
@@ -0,0 +1,11 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+ from typing import Optional
4
+
5
+ class City(SQLModel,table=True):
6
+ __tablename__ = "city"
7
+
8
+ city_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
9
+ name:str
10
+ state_id: Optional[uuid.UUID] = Field(default=None, foreign_key="state.state_id")
11
+ is_active: bool = Field(default=True)
@@ -20,9 +20,11 @@ class Px(Client, table=True):
20
20
  profession_id: Optional[uuid.UUID] = Field(default=None, foreign_key="profession.profession_id")
21
21
  education_id: Optional[uuid.UUID] = Field(default=None, foreign_key="education.education_id")
22
22
  user_id: Optional[uuid.UUID] = Field(default=None, foreign_key="user.user_id")
23
+ nationality_id: Optional[uuid.UUID] = Field(default=None, foreign_key="nationality.nationality_id")
23
24
 
24
25
  Px.marriage_status = Relationship()
25
26
  Px.profession = Relationship()
26
27
  Px.education = Relationship()
27
28
  Px.user = Relationship()
29
+ Px.nationality = Relationship()
28
30
  Px.medical_labs = Relationship(back_populates="pxs", link_model="ClientLab")
@@ -0,0 +1,9 @@
1
+ import uuid
2
+ from sqlmodel import SQLModel,Field
3
+
4
+ class State(SQLModel,table=True):
5
+ __tablename__ = "state"
6
+
7
+ state_id:uuid.UUID=Field(default_factory=uuid.uuid4,primary_key=True)
8
+ name:str
9
+ is_active: bool = Field(default=True)
@@ -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"
@@ -2,7 +2,7 @@ from typing import Optional, List
2
2
  from uuid import UUID
3
3
  from sqlmodel import select
4
4
 
5
- from healthdatalayer.models import Address
5
+ from healthdatalayer.models import Address, City, State
6
6
  from healthdatalayer.config.db import engines, get_session
7
7
 
8
8
  class AddressRepository:
@@ -61,4 +61,34 @@ class AddressRepository:
61
61
  session.delete(db_address)
62
62
 
63
63
  session.commit()
64
- return True
64
+ return True
65
+
66
+ def list_all_state_command(self, active_only: bool = True) -> List[Address]:
67
+ with get_session(self.tenant) as session:
68
+ statement = select(State)
69
+
70
+ if active_only:
71
+ statement = statement.where(State.is_active == True)
72
+
73
+ results = session.exec(statement)
74
+ return results.all()
75
+
76
+ def list_all_city_command(self, active_only: bool = True) -> List[Address]:
77
+ with get_session(self.tenant) as session:
78
+ statement = select(City)
79
+
80
+ if active_only:
81
+ statement = statement.where(City.is_active == True)
82
+
83
+ results = session.exec(statement)
84
+ return results.all()
85
+
86
+ def list_city_by_state_id_command(self,state_id: UUID, active_only: bool = True) -> List[Address]:
87
+ with get_session(self.tenant) as session:
88
+ statement = select(City).where(City.state_id == state_id)
89
+
90
+ if active_only:
91
+ statement = statement.where(State.is_active == True)
92
+
93
+ results = session.exec(statement)
94
+ return results.all()
@@ -0,0 +1,234 @@
1
+ from typing import Optional, List
2
+ from datetime import datetime
3
+ from uuid import UUID
4
+ from sqlmodel import select
5
+ from sqlalchemy.orm import selectinload,joinedload
6
+ from healthdatalayer.models import MedicalVisit
7
+ from healthdatalayer.config.db import engines, get_session
8
+
9
+ class MedicalVisitRepository:
10
+ def __init__(self, tenant: str):
11
+ self.tenant = tenant
12
+ if tenant not in engines:
13
+ raise ValueError(f"Tenant {tenant} is not configured")
14
+
15
+ def create_command(self, medical_visit: MedicalVisit) -> MedicalVisit:
16
+ with get_session(self.tenant) as session:
17
+ session.add(medical_visit)
18
+ session.commit()
19
+ session.refresh(medical_visit)
20
+ return medical_visit
21
+
22
+ def get_by_id_command(self, medical_visit_id: UUID, load_relations: bool = False) -> Optional[MedicalVisit]:
23
+ with get_session(self.tenant) as session:
24
+
25
+ if load_relations:
26
+ statement = select(MedicalVisit).where(MedicalVisit.medical_visit_id == medical_visit_id).options(
27
+ joinedload(MedicalVisit.client),
28
+ joinedload(MedicalVisit.collaborator),
29
+ joinedload(MedicalVisit.speciality),
30
+ selectinload(MedicalVisit.medical_diagnosis_visits),
31
+ selectinload(MedicalVisit.medical_recipe_visits),
32
+ selectinload(MedicalVisit.organ_system_reviews),
33
+ selectinload(MedicalVisit.physical_exams)
34
+ )
35
+ medical_visit = session.exec(statement).first()
36
+
37
+ return medical_visit
38
+ else:
39
+ return session.get(MedicalVisit, medical_visit_id)
40
+
41
+ def list_all_command(self, active_only: bool = True, load_relations: bool = False)->List[MedicalVisit]:
42
+ with get_session(self.tenant) as session:
43
+ statement = select(MedicalVisit)
44
+
45
+ if load_relations:
46
+
47
+ statement = select(MedicalVisit).options(
48
+ joinedload(MedicalVisit.client),
49
+ joinedload(MedicalVisit.collaborator),
50
+ joinedload(MedicalVisit.speciality),
51
+ selectinload(MedicalVisit.medical_diagnosis_visits),
52
+ selectinload(MedicalVisit.medical_recipe_visits),
53
+ selectinload(MedicalVisit.organ_system_reviews),
54
+ selectinload(MedicalVisit.physical_exams)
55
+ )
56
+ if active_only:
57
+ statement = statement.where(MedicalVisit.is_active == True)
58
+ medical_visits = session.exec(statement).all()
59
+
60
+ return medical_visits
61
+
62
+ statement = select(MedicalVisit)
63
+ return session.exec(statement).all()
64
+
65
+ def get_by_client_id_command(self, client_id: UUID, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
66
+ with get_session(self.tenant) as session:
67
+ statement = select(MedicalVisit).where(MedicalVisit.client_id == client_id)
68
+ if active_only:
69
+ statement = statement.where(MedicalVisit.is_active == True)
70
+ if load_relations:
71
+ statement = statement.options(
72
+ joinedload(MedicalVisit.client),
73
+ joinedload(MedicalVisit.collaborator),
74
+ joinedload(MedicalVisit.speciality),
75
+ selectinload(MedicalVisit.medical_diagnosis_visits),
76
+ selectinload(MedicalVisit.medical_recipe_visits),
77
+ selectinload(MedicalVisit.organ_system_reviews),
78
+ selectinload(MedicalVisit.physical_exams)
79
+ )
80
+
81
+ medical_visits = session.exec(statement).all()
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
200
+
201
+ def update_command(self, medical_visit: MedicalVisit) -> MedicalVisit:
202
+ with get_session(self.tenant) as session:
203
+ existing_medical_visit = session.get(MedicalVisit, medical_visit.medical_visit_id)
204
+ if not existing_medical_visit:
205
+ raise ValueError(f"medical_visit with id {medical_visit.medical_visit_id} does not exist")
206
+
207
+ for key, value in medical_visit.dict(exclude_unset=True).items():
208
+ setattr(existing_medical_visit, key, value)
209
+
210
+ bd_medical_visit = session.merge(existing_medical_visit)
211
+ session.commit()
212
+ session.refresh(bd_medical_visit)
213
+ return bd_medical_visit
214
+
215
+ def delete_command(self, medical_visit_id: UUID, soft_delete: bool = False)->None:
216
+ with get_session(self.tenant) as session:
217
+ existing_bridge = session.get(MedicalVisit, medical_visit_id)
218
+ if not existing_bridge:
219
+ raise ValueError(f"MedicalVisit with id {medical_visit_id} does not exist")
220
+
221
+ if soft_delete:
222
+ existing_bridge.is_active = False
223
+ session.add(existing_bridge)
224
+ else:
225
+ session.delete(existing_bridge)
226
+
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
234
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: healthdatalayer
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Health Datalayer to access data from different sources
5
5
  Author: Jesus Martinez
6
6
  Author-email: jesusmartinez@noosds.com
@@ -20,6 +20,7 @@ healthdatalayer/models/bridge_area_floor_branch/room.py
20
20
  healthdatalayer/models/bridge_area_floor_branch/system.py
21
21
  healthdatalayer/models/client/__init__.py
22
22
  healthdatalayer/models/client/address.py
23
+ healthdatalayer/models/client/city.py
23
24
  healthdatalayer/models/client/client.py
24
25
  healthdatalayer/models/client/client_type.py
25
26
  healthdatalayer/models/client/education.py
@@ -31,6 +32,7 @@ healthdatalayer/models/client/pathological_history.py
31
32
  healthdatalayer/models/client/pet.py
32
33
  healthdatalayer/models/client/profession.py
33
34
  healthdatalayer/models/client/px.py
35
+ healthdatalayer/models/client/state.py
34
36
  healthdatalayer/models/collaborator/__init__.py
35
37
  healthdatalayer/models/collaborator/collaborator.py
36
38
  healthdatalayer/models/collaborator/collaborator_speciality.py
@@ -49,6 +51,7 @@ healthdatalayer/models/medical_visit/medical_recipe_visit.py
49
51
  healthdatalayer/models/medical_visit/medical_visit.py
50
52
  healthdatalayer/models/medical_visit/organ_system_review.py
51
53
  healthdatalayer/models/medical_visit/physical_exam.py
54
+ healthdatalayer/models/medical_visit/status_visit_enum.py
52
55
  healthdatalayer/models/medical_visit/visit_triage.py
53
56
  healthdatalayer/models/user/__init__.py
54
57
  healthdatalayer/models/user/permission.py
@@ -5,7 +5,7 @@ with open('requirements.txt') as f:
5
5
 
6
6
  setup(
7
7
  name="healthdatalayer",
8
- version="1.4.3",
8
+ version="1.4.5",
9
9
  include_package_data=True,
10
10
  python_requires='>=3.10',
11
11
  packages=find_packages(),
@@ -1,110 +0,0 @@
1
- from typing import Optional, List
2
- from uuid import UUID
3
- from sqlmodel import select, or_
4
- from sqlalchemy.orm import selectinload,joinedload
5
- from healthdatalayer.models import MedicalVisit
6
- from healthdatalayer.config.db import engines, get_session
7
-
8
- class MedicalVisitRepository:
9
- def __init__(self, tenant: str):
10
- self.tenant = tenant
11
- if tenant not in engines:
12
- raise ValueError(f"Tenant {tenant} is not configured")
13
-
14
- def create_command(self, medical_visit: MedicalVisit) -> MedicalVisit:
15
- with get_session(self.tenant) as session:
16
- session.add(medical_visit)
17
- session.commit()
18
- session.refresh(medical_visit)
19
- return medical_visit
20
-
21
- def get_by_id_command(self, medical_visit_id: UUID, load_relations: bool = False) -> Optional[MedicalVisit]:
22
- with get_session(self.tenant) as session:
23
-
24
- if load_relations:
25
- statement = select(MedicalVisit).where(MedicalVisit.medical_visit_id == medical_visit_id).options(
26
- joinedload(MedicalVisit.client),
27
- joinedload(MedicalVisit.collaborator),
28
- joinedload(MedicalVisit.speciality),
29
- selectinload(MedicalVisit.medical_diagnosis_visits),
30
- selectinload(MedicalVisit.medical_recipe_visits),
31
- selectinload(MedicalVisit.organ_system_reviews),
32
- selectinload(MedicalVisit.physical_exams)
33
- )
34
- medical_visit = session.exec(statement).first()
35
-
36
- return medical_visit
37
- else:
38
- return session.get(MedicalVisit, medical_visit_id)
39
-
40
- def list_all_command(self, active_only: bool = True, load_relations: bool = False)->List[MedicalVisit]:
41
- with get_session(self.tenant) as session:
42
- statement = select(MedicalVisit)
43
-
44
- if load_relations:
45
-
46
- statement = select(MedicalVisit).options(
47
- joinedload(MedicalVisit.client),
48
- joinedload(MedicalVisit.collaborator),
49
- joinedload(MedicalVisit.speciality),
50
- selectinload(MedicalVisit.medical_diagnosis_visits),
51
- selectinload(MedicalVisit.medical_recipe_visits),
52
- selectinload(MedicalVisit.organ_system_reviews),
53
- selectinload(MedicalVisit.physical_exams)
54
- )
55
- if active_only:
56
- statement = statement.where(MedicalVisit.is_active == True)
57
- medical_visits = session.exec(statement).all()
58
-
59
- return medical_visits
60
-
61
- statement = select(MedicalVisit)
62
- return session.exec(statement).all()
63
-
64
- def get_by_client_id_command(self, client_id: UUID, active_only: bool = True, load_relations: bool = False) -> List[MedicalVisit]:
65
- with get_session(self.tenant) as session:
66
- statement = select(MedicalVisit).where(MedicalVisit.client_id == client_id)
67
- if active_only:
68
- statement = statement.where(MedicalVisit.is_active == True)
69
- if load_relations:
70
- statement = statement.options(
71
- joinedload(MedicalVisit.client),
72
- joinedload(MedicalVisit.collaborator),
73
- joinedload(MedicalVisit.speciality),
74
- selectinload(MedicalVisit.medical_diagnosis_visits),
75
- selectinload(MedicalVisit.medical_recipe_visits),
76
- selectinload(MedicalVisit.organ_system_reviews),
77
- selectinload(MedicalVisit.physical_exams)
78
- )
79
-
80
- medical_visits = session.exec(statement).all()
81
- return medical_visits
82
-
83
- def update_command(self, medical_visit: MedicalVisit) -> MedicalVisit:
84
- with get_session(self.tenant) as session:
85
- existing_medical_visit = session.get(MedicalVisit, medical_visit.medical_visit_id)
86
- if not existing_medical_visit:
87
- raise ValueError(f"medical_visit with id {medical_visit.medical_visit_id} does not exist")
88
-
89
- for key, value in medical_visit.dict(exclude_unset=True).items():
90
- setattr(existing_medical_visit, key, value)
91
-
92
- bd_medical_visit = session.merge(existing_medical_visit)
93
- session.commit()
94
- session.refresh(bd_medical_visit)
95
- return bd_medical_visit
96
-
97
- def delete_command(self, medical_visit_id: UUID, soft_delete: bool = False)->None:
98
- with get_session(self.tenant) as session:
99
- existing_bridge = session.get(MedicalVisit, medical_visit_id)
100
- if not existing_bridge:
101
- raise ValueError(f"MedicalVisit with id {medical_visit_id} does not exist")
102
-
103
- if soft_delete:
104
- existing_bridge.is_active = False
105
- session.add(existing_bridge)
106
- else:
107
- session.delete(existing_bridge)
108
-
109
- session.commit()
110
-