Skip to content

Commit 67e35ed

Browse files
committed
[IMP] medical_clinical_impression: Remove dependancy on encounters
1 parent 9e9c49d commit 67e35ed

19 files changed

+47
-647
lines changed

medical_clinical_impression/__manifest__.py

-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
"security/ir.model.access.csv",
2020
"data/ir_sequence_data.xml",
2121
"wizards/create_impression_from_patient.xml",
22-
"wizards/create_impression_from_encounter.xml",
2322
"views/medical_clinical_impression.xml",
24-
"views/medical_encounter.xml",
2523
"views/medical_patient.xml",
2624
"views/medical_clinical_finding.xml",
2725
"views/medical_family_member_history.xml",

medical_clinical_impression/demo/medical_demo.xml

-8
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,13 @@
3636
<field name="name">Gynecology</field>
3737
<field name="description">Gynecology</field>
3838
</record>
39-
<record id="encounter_01_patient_01" model="medical.encounter">
40-
<field name="patient_id" ref="medical_base.patient_01" />
41-
<!-- <field name="center_id" ref="medical_administration_center.partner_center_1" /> -->
42-
</record>
4339
<record id="impression_01_patient_01" model="medical.clinical.impression">
4440
<field name="fhir_state">completed</field>
4541
<field
4642
name="specialty_id"
4743
ref="medical_clinical_impression.specialty_gynecology"
4844
/>
4945
<field name="patient_id" ref="medical_base.patient_01" />
50-
<field
51-
name="encounter_id"
52-
ref="medical_clinical_impression.encounter_01_patient_01"
53-
/>
5446
<field name="validation_date" eval="datetime.now()" />
5547
<field name="validation_user_id" ref="base.user_demo" />
5648
<field

medical_clinical_impression/models/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from . import medical_clinical_impression
22
from . import medical_patient
3-
from . import medical_encounter
43
from . import medical_clinical_finding
54
from . import medical_specialty
65
from . import medical_family_member_history

medical_clinical_impression/models/medical_clinical_impression.py

+4-20
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ def _get_states(self):
3434
)
3535
# FHIR: description
3636

37-
encounter_id = fields.Many2one("medical.encounter", required=True, readonly=True)
38-
# FHIR: encounter
39-
4037
patient_id = fields.Many2one(
41-
related="encounter_id.patient_id", readonly=True, states={}
38+
"medical.patient",
39+
required=True,
40+
readonly=True,
41+
states={"draft": [("readonly", False)]},
4242
)
4343
# FHIR: patient
4444

@@ -80,12 +80,6 @@ def _get_states(self):
8080
note = fields.Text(readonly=True, states={"draft": [("readonly", False)]})
8181
# FHIR: Note
8282

83-
current_encounter = fields.Boolean(
84-
help="This field is only used to stand out the impressions "
85-
"of the current encounter in the tree view",
86-
compute="_compute_current_encounter",
87-
)
88-
8983
warning_info = fields.Json(compute="_compute_warning_info")
9084

9185
def _get_warning_info(self):
@@ -110,16 +104,6 @@ def _get_internal_identifier(self, vals):
110104
self.env["ir.sequence"].next_by_code("medical.clinical.impression") or "/"
111105
)
112106

113-
@api.depends("encounter_id")
114-
def _compute_current_encounter(self):
115-
for rec in self:
116-
current_encounter = False
117-
if self.env.context.get("encounter_id"):
118-
default_encounter = self.env.context.get("encounter_id")
119-
if default_encounter == rec.encounter_id.id:
120-
current_encounter = True
121-
rec.current_encounter = current_encounter
122-
123107
def _create_conditions_from_findings(self):
124108
finding_ids = self.finding_ids.filtered(
125109
lambda f: f.create_condition_from_clinical_impression

medical_clinical_impression/models/medical_encounter.py

-68
This file was deleted.

medical_clinical_impression/models/medical_patient.py

-6
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,10 @@ def _compute_impression_specialties(self):
5959

6060
def action_view_clinical_impressions(self):
6161
self.ensure_one()
62-
encounter = self._get_last_encounter()
6362
action = self.env["ir.actions.act_window"]._for_xml_id(
6463
"medical_clinical_impression." "medical_clinical_impression_act_window"
6564
)
6665
action["domain"] = [("patient_id", "=", self.id)]
67-
if encounter:
68-
action["context"] = {
69-
"default_encounter_id": encounter.id,
70-
"search_default_filter_not_cancelled": True,
71-
}
7266
return action
7367

7468
def action_view_family_history(self):

medical_clinical_impression/models/medical_specialty.py

+37-55
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
22

3-
from odoo import fields, models
3+
from odoo import api, fields, models
44
from odoo.osv import expression
55

66

@@ -10,54 +10,46 @@ class MedicalSpecialty(models.Model):
1010

1111
patient_impression_count = fields.Integer(compute="_compute_impression_info")
1212

13-
encounter_impression_count = fields.Integer(compute="_compute_impression_info")
14-
1513
impression_last_update = fields.Datetime(compute="_compute_impression_info")
1614

1715
impressions_in_progress_count = fields.Integer(compute="_compute_impression_info")
1816

17+
@api.depends_context("patient_id")
1918
def _compute_impression_info(self):
2019
for rec in self:
21-
patient_count = 0
22-
encounter_count = 0
23-
impressions_in_progress = 0
24-
patient_id = None
25-
last_update = False
26-
if self.env.context.get("patient_id"):
27-
patient_id = self.env["medical.patient"].browse(
28-
self.env.context.get("patient_id")
29-
)
30-
elif self.env.context.get("encounter_id"):
31-
encounter_id = self.env["medical.encounter"].browse(
32-
self.env.context.get("encounter_id")
33-
)
34-
encounter_count = len(
35-
encounter_id.medical_impression_ids.filtered(
36-
lambda r: r.specialty_id.id == rec.id
37-
and r.fhir_state != "cancelled"
38-
)
39-
)
40-
patient_id = encounter_id.patient_id
41-
if patient_id:
42-
patient_impression_ids = patient_id.medical_impression_ids.filtered(
43-
lambda r: r.specialty_id.id == rec.id
44-
and r.fhir_state != "cancelled"
45-
)
46-
patient_count = len(patient_impression_ids)
47-
impressions_completed = patient_impression_ids.filtered(
48-
lambda r: r.fhir_state == "completed"
49-
)
50-
if impressions_completed:
51-
last_update = impressions_completed[0].validation_date
52-
impressions_in_progress = len(
53-
patient_impression_ids.filtered(
54-
lambda r: r.fhir_state == "in_progress"
55-
)
56-
)
57-
rec.patient_impression_count = patient_count
58-
rec.encounter_impression_count = encounter_count
59-
rec.impression_last_update = last_update
60-
rec.impressions_in_progress_count = impressions_in_progress
20+
vals = rec._get_impression_info()
21+
rec.update(vals)
22+
23+
def _get_impression_info_patient(self):
24+
if self.env.context.get("patient_id"):
25+
return self.env["medical.patient"].browse(
26+
self.env.context.get("patient_id")
27+
)
28+
return None
29+
30+
def _get_impression_info(self):
31+
patient_count = 0
32+
impressions_in_progress = 0
33+
patient_id = self._get_impression_info_patient()
34+
last_update = False
35+
if patient_id:
36+
patient_impression_ids = patient_id.medical_impression_ids.filtered(
37+
lambda r: r.specialty_id.id == self.id and r.fhir_state != "cancelled"
38+
)
39+
patient_count = len(patient_impression_ids)
40+
impressions_completed = patient_impression_ids.filtered(
41+
lambda r: r.fhir_state == "completed"
42+
)
43+
if impressions_completed:
44+
last_update = impressions_completed[0].validation_date
45+
impressions_in_progress = len(
46+
patient_impression_ids.filtered(lambda r: r.fhir_state == "in_progress")
47+
)
48+
return {
49+
"patient_impression_count": patient_count,
50+
"impression_last_update": last_update,
51+
"impressions_in_progress_count": impressions_in_progress,
52+
}
6153

6254
def _get_default_context(self):
6355
return {
@@ -73,17 +65,8 @@ def get_specialty_impression(self):
7365
"medical_clinical_impression." "medical_clinical_impression_act_window"
7466
)
7567
ctx_dict = self._get_default_context()
76-
if self.env.context.get("patient_id"):
77-
patient_id = self.env["medical.patient"].browse(
78-
self.env.context.get("patient_id")
79-
)
80-
encounter_id = patient_id._get_last_encounter()
81-
elif self.env.context.get("encounter_id"):
82-
encounter_id = self.env["medical.encounter"].browse(
83-
self.env.context.get("encounter_id")
84-
)
85-
patient_id = encounter_id.patient_id
86-
else:
68+
patient_id = self._get_impression_info_patient()
69+
if not patient_id:
8770
return False
8871
domain = expression.AND(
8972
[
@@ -94,7 +77,6 @@ def get_specialty_impression(self):
9477
],
9578
]
9679
)
97-
ctx_dict["default_encounter_id"] = encounter_id.id
9880
ctx_dict["search_default_filter_not_cancelled"] = True
9981
result["domain"] = domain
10082
result["context"] = ctx_dict

medical_clinical_impression/reports/medical_impression_report.xml

-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@
3939
</b>
4040
</h4>
4141
<div class="row">
42-
<div class="col-6">
43-
<strong>Encounter:</strong>
44-
<span t-field="o.encounter_id" />
45-
</div>
4642
<div class="col-6">
4743
<strong>Date:</strong>
4844
<span t-field="o.validation_date" />

medical_clinical_impression/security/ir.model.access.csv

-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@ medical_clinical_impression_display,medical_clinical_impression_display,model_me
33
medical_clinical_impression_manager,medical_clinical_impression_manager,model_medical_clinical_impression,medical_base.group_medical_assistance_user,0,1,1,0
44
medical_family_member_history_manager,medical_family_member_history_manager,model_medical_family_member_history,medical_base.group_medical_assistance_user,1,1,1,1
55
access_create_impression_from_patient,access_create_impression_from_patient,model_create_impression_from_patient,medical_base.group_medical_assistance_user,1,1,1,0
6-
access_create_impression_from_encounter,access_create_impression_from_encounter,model_create_impression_from_encounter,medical_base.group_medical_assistance_user,1,1,1,0
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
from . import test_medical_clinical_impression
22
from . import test_medical_patient
3-
from . import test_medical_encounter

medical_clinical_impression/tests/test_medical_clinical_impression.py

-29
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ class TestClinicalImpression(TransactionCase):
1111
def setUp(self):
1212
super(TestClinicalImpression, self).setUp()
1313
self.patient = self.env["medical.patient"].create({"name": "Patient"})
14-
self.encounter = self.env["medical.encounter"].create(
15-
{"patient_id": self.patient.id}
16-
)
1714
self.finding_pregnant = self.env["medical.clinical.finding"].create(
1815
{
1916
"name": "Pregnant",
@@ -50,7 +47,6 @@ def test_validate_impression_fields(self):
5047
impression = self.env["medical.clinical.impression"].create(
5148
{
5249
"patient_id": self.patient.id,
53-
"encounter_id": self.encounter.id,
5450
"specialty_id": self.specialty_cardiology.id,
5551
}
5652
)
@@ -65,7 +61,6 @@ def test_create_condition_from_impression_finding(self):
6561
impression = self.env["medical.clinical.impression"].create(
6662
{
6763
"patient_id": self.patient.id,
68-
"encounter_id": self.encounter.id,
6964
"specialty_id": self.specialty_gynecology.id,
7065
"finding_ids": [
7166
(4, self.finding_pregnant.id),
@@ -85,7 +80,6 @@ def test_create_condition_from_impression_finding(self):
8580
impression_2 = self.env["medical.clinical.impression"].create(
8681
{
8782
"patient_id": self.patient.id,
88-
"encounter_id": self.encounter.id,
8983
"specialty_id": self.specialty_gynecology.id,
9084
"finding_ids": [(4, self.finding_pregnant.id)],
9185
}
@@ -102,7 +96,6 @@ def test_create_allergy_from_impression_allergy_substance(self):
10296
impression = self.env["medical.clinical.impression"].create(
10397
{
10498
"patient_id": self.patient.id,
105-
"encounter_id": self.encounter.id,
10699
"specialty_id": self.specialty_gynecology.id,
107100
"allergy_substance_ids": [(4, self.allergy_substance_ibuprofen.id)],
108101
}
@@ -118,7 +111,6 @@ def test_create_allergy_from_impression_allergy_substance(self):
118111
impression_2 = self.env["medical.clinical.impression"].create(
119112
{
120113
"patient_id": self.patient.id,
121-
"encounter_id": self.encounter.id,
122114
"specialty_id": self.specialty_gynecology.id,
123115
"allergy_substance_ids": [(4, self.allergy_substance_ibuprofen.id)],
124116
}
@@ -134,7 +126,6 @@ def test_cancel_impression(self):
134126
impression = self.env["medical.clinical.impression"].create(
135127
{
136128
"patient_id": self.patient.id,
137-
"encounter_id": self.encounter.id,
138129
"specialty_id": self.specialty_gynecology.id,
139130
"allergy_substance_ids": [(4, self.allergy_substance_ibuprofen.id)],
140131
}
@@ -145,23 +136,3 @@ def test_cancel_impression(self):
145136
# The allergies and findings created in that impression should be cancelled too.
146137
self.patient.invalidate_recordset()
147138
self.assertEqual(self.patient.medical_allergies_count, 0)
148-
149-
def test_compute_current_encounter(self):
150-
impression = self.env["medical.clinical.impression"].create(
151-
{
152-
"patient_id": self.patient.id,
153-
"encounter_id": self.encounter.id,
154-
"specialty_id": self.specialty_gynecology.id,
155-
}
156-
)
157-
self.encounter_2 = self.env["medical.encounter"].create(
158-
{"patient_id": self.patient.id}
159-
)
160-
impression.with_context(
161-
**{"encounter_id": self.encounter.id}
162-
)._compute_current_encounter()
163-
self.assertTrue(impression.current_encounter)
164-
impression.with_context(
165-
**{"encounter_id": self.encounter_2.id}
166-
)._compute_current_encounter()
167-
self.assertFalse(impression.current_encounter)

0 commit comments

Comments
 (0)