Skip to content

Commit 571ebfc

Browse files
author
Rinke Hoekstra
committed
Now showing more details for internal recommendations
1 parent 731a734 commit 571ebfc

2 files changed

Lines changed: 76 additions & 19 deletions

File tree

src/app/templates/recommendations_list.html

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,12 @@
33
<h3>{{ guideline_label }}</h3>
44
<h4>Recommendations</h4>
55
<div class="list-group">
6-
{% for grouper, list in recommendations_menu|groupby('rec_label') %}
7-
{% for e in list %}
8-
{% if loop.first %}
6+
{% for e in recommendations_menu|sort(attribute='rec_label') %}
97
<a href="#" class="list-group-item" uri='{{e.rec.value }}'>
10-
<span class="list-group-item-heading">{{ e.rec_label.value }}<br/><small>
11-
{% endif %}
12-
<span class="badge alert-info">{{ e.rec_stripped.value }}</span>
13-
{% if loop.last %}
14-
</small>
8+
<span class="list-group-item-heading">{{ e.rec_label.value }}<br/>
9+
<small><span class="badge alert-info">{{ e.rec_stripped.value }}</span></small>
1510
</span>
1611
</a>
17-
{% endif %}
18-
{% endfor %}
1912
{% endfor %}
2013
</div>
2114
</div>
@@ -35,18 +28,36 @@ <h3>{{ grouper.value }} <small>({{e.rec_stripped.value }})</small></h3>
3528
{% set caheader = False %}
3629
{% endif %}
3730
{% if 'internal_rec_label' in e and e.internal_rec.value != uri %}
38-
{% if not iiheader %}
39-
<h4>Internal Interactions</h4>
40-
{% set iiheader = True %}
41-
{% endif %}
42-
<div class="list-group-item">This recommendation interacts with the recommendation to <strong>{{ e.internal_rec_label.value }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span></div>
31+
32+
{% if not iiheader %}
33+
<h4>Internal Interactions</h4>
34+
{% set iiheader = True %}
35+
{% endif %}
36+
{% if e.itype_stripped.value == 'ContradictionDueToSameAction' %}
37+
<div class="list-group-item">This recommendation <strong>contradicts</strong> with the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> with respect to the care action to <strong>{{ e.ca_label.value|lower }}</strong>.</div>
38+
{% endif %}
39+
{% if e.itype_stripped.value == 'RepetitionDueToSameAction' %}
40+
<div class="list-group-item">This recommendation is a <strong>repetition</strong> of the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> because they agree with respect to the care action to <strong>{{ e.ca_label.value|lower }}</strong>.</div>
41+
{% endif %}
42+
{% if e.itype_stripped.value == 'ContradictionDueToInverseTransition' %}
43+
<div class="list-group-item">This recommendation <strong>contradicts</strong> with the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> because of <strong>inverse transitions</strong>.</div>
44+
{% endif %}
45+
{% if e.itype_stripped.value == 'AlternativeDueToInverseTransition' %}
46+
<div class="list-group-item">This recommendation is an <strong>alternative</strong> to the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> because of <strong>inverse transitions</strong>.</div>
47+
{% endif %}
48+
{% if e.itype_stripped.value == 'ContradictionDueToSimilarTransition' %}
49+
<div class="list-group-item">This recommendation <strong>contradicts</strong> with the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> because they disagree on a <strong>similar transition</strong>.</div>
50+
{% endif %}
51+
{% if e.itype_stripped.value == 'AlternativeDueToSimilarTransition' %}
52+
<div class="list-group-item">This recommendation is an <strong>alternative</strong> to the recommendation to <strong>{{ e.internal_rec_label.value|lower }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span> because of <strong>similar transitions</strong>.</div>
53+
{% endif %}
4354
{% endif %}
4455
{% if 'external_rec_label' in e and e.external_rec.value != e.rec.value %}
4556
{% if not eiheader %}
4657
<h4>External Interactions</h4>
4758
{% set eiheader = True %}
4859
{% endif %}
49-
<div class="list-group-item">This recommendation interacts with the recommendation to <strong>{{ e.external_rec_label.value }}</strong>
60+
<div class="list-group-item">This recommendation interacts with the recommendation to <strong>{{ e.external_rec_label.value|lower }}</strong>
5061
<span class="badge alert-error" target="{{ e.external_rec.value }}">{{ e.external_rec_stripped.value }}</span>
5162
because <strong>{{ e.drug1_label.value}}</strong> interacts with <strong>{{ e.drug2_label.value }}</strong>.
5263
</div>

src/app/views.py

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,58 @@ def recommendations():
100100
?rec a owl:NamedIndividual .
101101
?rec tmr4i:interactsInternallyWith ?internal_rec .
102102
?internal_rec rdfs:label ?internal_rec_label .
103-
?internal_rec a tmr4i:Recommendation .
104-
?internal_rec a owl:NamedIndividual .
103+
?i tmr4i:relates ?rec .
104+
?i tmr4i:relates ?internal_rec .
105+
FILTER NOT EXISTS {
106+
?rec owl:sameAs ?internal_rec .
107+
}
108+
{
109+
?i a tmr4i:ContradictionDueToSameAction .
110+
?i tmr4i:action ?ca .
111+
?ca rdfs:label ?ca_label .
112+
BIND(tmr4i:ContradictionDueToSameAction AS ?itype)
113+
} UNION {
114+
?i a tmr4i:RepetitionDueToSameAction .
115+
?i tmr4i:action ?ca .
116+
?ca rdfs:label ?ca_label .
117+
BIND(tmr4i:RepetitionDueToSameAction AS ?itype)
118+
} UNION {
119+
?i a tmr4i:ContradictionDueToInverseTransition .
120+
BIND(tmr4i:ContradictionDueToInverseTransition AS ?itype)
121+
} UNION {
122+
?i a tmr4i:AlternativeDueToSimilarTransition .
123+
BIND(tmr4i:AlternativeDueToSimilarTransition AS ?itype)
124+
} UNION {
125+
?i a tmr4i:AlternativeDueToInverseTransition .
126+
BIND(tmr4i:AlternativeDueToInverseTransition AS ?itype)
127+
} UNION {
128+
?i a tmr4i:ContradictionDueToSimilarTransition .
129+
BIND(tmr4i:ContradictionDueToSimilarTransition AS ?itype)
130+
}
105131
BIND(tmr4i:InternallyInteractingRecommendation AS ?irec)
106132
}"""
107133

108-
all_results.extend(sparql(query, strip=True))
134+
internal_interactions = sparql(query, strip=True)
135+
136+
deduped_internal_interactions = []
137+
double_interactions = set()
138+
print len(internal_interactions)
139+
for r in internal_interactions :
140+
if 'rec' and 'internal_rec' in r:
141+
r1 = r['rec']['value']
142+
r2 = r['internal_rec']['value']
143+
144+
if (r2,r1) in double_interactions or (r1,r2) in double_interactions:
145+
log.debug("Interaction couple already found")
146+
else :
147+
double_interactions.add((r1,r2))
148+
deduped_internal_interactions.append(r)
149+
else :
150+
deduped_internal_interactions.append(r)
151+
152+
print len(deduped_internal_interactions)
153+
154+
all_results.extend(deduped_internal_interactions)
109155

110156
query = PREFIXES + """
111157
SELECT DISTINCT * WHERE

0 commit comments

Comments
 (0)