Skip to content

Commit 3d0acd2

Browse files
committed
[ADD] medical_clinical_impression_encounter
1 parent 67e35ed commit 3d0acd2

23 files changed

+1025
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
TO DO
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import models
2+
from . import wizards
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Copyright 2024 Dixmit
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
{
5+
"name": "Medical Clinical Impression Encounter",
6+
"summary": """Integrates encounters and impressions""",
7+
"version": "16.0.1.0.0",
8+
"license": "AGPL-3",
9+
"author": "Dixmit, Tegin",
10+
"website": "https://github.com/tegin/medical-fhir",
11+
"depends": [
12+
"medical_clinical_impression",
13+
"medical_clinical_condition_encounter",
14+
],
15+
"data": [
16+
"security/ir.model.access.csv",
17+
"reports/medical_impression_report.xml",
18+
"wizards/create_impression_from_encounter.xml",
19+
"wizards/create_impression_from_patient.xml",
20+
"views/medical_encounter.xml",
21+
],
22+
"demo": ["demo/medical_demo.xml"],
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!--
3+
Copyright 2025 Dixmit
4+
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
5+
-->
6+
<odoo>
7+
<record id="encounter_01_patient_01" model="medical.encounter">
8+
<field name="patient_id" ref="medical_base.patient_01" />
9+
</record>
10+
<record
11+
id="medical_clinical_impression.impression_01_patient_01"
12+
model="medical.clinical.impression"
13+
>
14+
<field
15+
name="encounter_id"
16+
ref="medical_clinical_impression.encounter_01_patient_01"
17+
/>
18+
</record>
19+
</odoo>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from . import medical_clinical_impression
2+
from . import medical_patient
3+
from . import medical_encounter
4+
from . import medical_specialty
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Copyright 2021 Creu Blanca
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
4+
from odoo import api, fields, models
5+
6+
7+
class MedicalClinicalImpression(models.Model):
8+
_inherit = "medical.clinical.impression"
9+
10+
encounter_id = fields.Many2one("medical.encounter", required=True, readonly=True)
11+
# FHIR: encounter
12+
13+
patient_id = fields.Many2one(
14+
related="encounter_id.patient_id", readonly=True, states={}, store=True
15+
)
16+
# FHIR: patient
17+
18+
current_encounter = fields.Boolean(
19+
help="This field is only used to stand out the impressions "
20+
"of the current encounter in the tree view",
21+
compute="_compute_current_encounter",
22+
)
23+
24+
@api.depends("encounter_id")
25+
def _compute_current_encounter(self):
26+
for rec in self:
27+
current_encounter = False
28+
if self.env.context.get("encounter_id"):
29+
default_encounter = self.env.context.get("encounter_id")
30+
if default_encounter == rec.encounter_id.id:
31+
current_encounter = True
32+
rec.current_encounter = current_encounter
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Copyright 2021 Creu Blanca
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
4+
from odoo import _, fields, models
5+
6+
7+
class MedicalEncounter(models.Model):
8+
9+
_inherit = "medical.encounter"
10+
11+
medical_impression_ids = fields.One2many(
12+
"medical.clinical.impression",
13+
inverse_name="encounter_id",
14+
)
15+
16+
impression_specialty_ids = fields.Many2many(
17+
"medical.specialty", related="patient_id.impression_specialty_ids"
18+
)
19+
20+
family_history_ids = fields.One2many(
21+
"medical.family.member.history",
22+
related="patient_id.family_history_ids",
23+
)
24+
25+
family_history_count = fields.Integer(related="patient_id.family_history_count")
26+
27+
def action_view_clinical_impressions(self):
28+
self.ensure_one()
29+
action = self.env["ir.actions.act_window"]._for_xml_id(
30+
"medical_clinical_impression." "medical_clinical_impression_act_window"
31+
)
32+
action["domain"] = [
33+
("patient_id", "=", self.patient_id.id),
34+
]
35+
action["context"] = {
36+
"default_encounter_id": self.id,
37+
"search_default_filter_not_cancelled": True,
38+
}
39+
return action
40+
41+
def action_view_family_history(self):
42+
self.ensure_one()
43+
action = self.env["ir.actions.act_window"]._for_xml_id(
44+
"medical_clinical_impression." "medical_family_member_history_action"
45+
)
46+
action["domain"] = [
47+
("patient_id", "=", self.patient_id.id),
48+
]
49+
action["context"] = {"default_patient_id": self.patient_id.id}
50+
return action
51+
52+
def create_family_member_history(self):
53+
self.ensure_one()
54+
view_id = self.env.ref(
55+
"medical_clinical_impression.medical_family_member_history_view_form"
56+
).id
57+
ctx = dict(self._context)
58+
ctx["default_patient_id"] = self.patient_id.id
59+
return {
60+
"type": "ir.actions.act_window",
61+
"res_model": "medical.family.member.history",
62+
"name": _("Create family member history"),
63+
"view_type": "form",
64+
"view_mode": "form",
65+
"views": [(view_id, "form")],
66+
"target": "new",
67+
"context": ctx,
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Copyright 2021 Creu Blanca
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
4+
from odoo import models
5+
6+
7+
class MedicalPatient(models.Model):
8+
_inherit = "medical.patient"
9+
10+
def action_view_clinical_impressions(self):
11+
action = super().action_view_clinical_impressions()
12+
encounter = self._get_last_encounter()
13+
if encounter:
14+
action["context"] = {
15+
"default_encounter_id": encounter.id,
16+
"search_default_filter_not_cancelled": True,
17+
}
18+
return action
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
2+
3+
from odoo import api, fields, models
4+
5+
6+
class MedicalSpecialty(models.Model):
7+
8+
_inherit = "medical.specialty"
9+
10+
encounter_impression_count = fields.Integer(compute="_compute_impression_info")
11+
12+
@api.depends_context("encounter_id", "patient_id")
13+
def _compute_impression_info(self):
14+
return super()._compute_impression_info()
15+
16+
def _get_impression_info_patient(self):
17+
if self.env.context.get("encounter_id"):
18+
encounter_id = self.env["medical.encounter"].browse(
19+
self.env.context.get("encounter_id")
20+
)
21+
return encounter_id.patient_id
22+
return super()._get_impression_info_patient()
23+
24+
def _get_impression_info(self):
25+
result = super()._get_impression_info()
26+
result["encounter_impression_count"] = 0
27+
if self.env.context.get("encounter_id"):
28+
encounter_id = self.env["medical.encounter"].browse(
29+
self.env.context.get("encounter_id")
30+
)
31+
result["encounter_impression_count"] = len(
32+
encounter_id.medical_impression_ids.filtered(
33+
lambda r: r.specialty_id.id == self.id
34+
and r.fhir_state != "cancelled"
35+
)
36+
)
37+
return result
38+
39+
def get_specialty_impression(self):
40+
result = super().get_specialty_impression()
41+
if not result:
42+
return result
43+
result["context"]["default_encounter_id"] = (
44+
self.env.context.get("encounter_id")
45+
or self._get_impression_info_patient()._get_last_encounter().id
46+
)
47+
return result
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" ?>
2+
<odoo>
3+
<template
4+
id="report_medical_clinical_impression"
5+
inherit_id="medical_clinical_impression.report_medical_clinical_impression"
6+
>
7+
<xpath expr="//span[@t-field='o.validation_date']" position="before">
8+
<div class="col-6">
9+
<strong>Encounter:</strong>
10+
<span t-field="o.encounter_id" />
11+
</div>
12+
</xpath>
13+
</template>
14+
</odoo>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2+
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
@@ -0,0 +1,3 @@
1+
from . import test_medical_clinical_impression
2+
from . import test_medical_patient
3+
from . import test_medical_encounter

0 commit comments

Comments
 (0)