Skip to content

Commit e60e004

Browse files
authored
Merge pull request jrlegrand#67 from jrlegrand/max_adtl_info_frontend
Max adtl info frontend
2 parents b707d8e + 57977f2 commit e60e004

File tree

9 files changed

+144
-31
lines changed

9 files changed

+144
-31
lines changed

frontend/src/_components/SigHighlighted.jsx

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,39 +30,49 @@ class SigHighlighted extends React.Component {
3030
const when = sig_parsed_components.when;
3131
const duration = sig_parsed_components.duration;
3232
const indication = sig_parsed_components.indication;
33+
const max = sig_parsed_components.max;
34+
const additional_info = sig_parsed_components.additional_info;
3335

34-
if (method.method_text_start != null && pos >= method.method_text_start && pos <= method.method_text_end) {
36+
if (method.method_text_start != null && pos >= method.method_text_start && pos < method.method_text_end) {
3537
className.push('highlight-red');
3638
}
3739

38-
if (dose.dose_text_start != null && pos >= dose.dose_text_start && pos <= dose.dose_text_end) {
40+
if (dose.dose_text_start != null && pos >= dose.dose_text_start && pos < dose.dose_text_end) {
3941
className.push('highlight-orange');
4042
}
4143

42-
if (strength.strength_text_start != null && pos >= strength.strength_text_start && pos <= strength.strength_text_end) {
44+
if (strength.strength_text_start != null && pos >= strength.strength_text_start && pos < strength.strength_text_end) {
4345
className.push('highlight-orange');
4446
}
4547

46-
if (route.route_text_start != null && pos >= route.route_text_start && pos <= route.route_text_end) {
48+
if (route.route_text_start != null && pos >= route.route_text_start && pos < route.route_text_end) {
4749
className.push('highlight-yellow');
4850
}
4951

50-
if (frequency.frequency_text_start != null && pos >= frequency.frequency_text_start && pos <= frequency.frequency_text_end) {
52+
if (frequency.frequency_text_start != null && pos >= frequency.frequency_text_start && pos < frequency.frequency_text_end) {
5153
className.push('highlight-green');
5254
}
5355

54-
if (when.when_text_start != null && pos >= when.when_text_start && pos <= when.when_text_end) {
56+
if (when.when_text_start != null && pos >= when.when_text_start && pos < when.when_text_end) {
5557
className.push('highlight-green');
5658
}
5759

58-
if (duration.duration_text_start != null && pos >= duration.duration_text_start && pos <= duration.duration_text_end) {
60+
if (duration.duration_text_start != null && pos >= duration.duration_text_start && pos < duration.duration_text_end) {
5961
className.push('highlight-green');
6062
}
6163

62-
if (indication.indication_text_start != null && pos >= indication.indication_text_start && pos <= indication.indication_text_end) {
64+
if (indication.indication_text_start != null && pos >= indication.indication_text_start && pos < indication.indication_text_end) {
6365
className.push('highlight-purple');
6466
}
6567

68+
if (max.max_text_start != null && pos >= max.max_text_start && pos < max.max_text_end) {
69+
className.push('highlight-blue');
70+
}
71+
72+
if (additional_info.additional_info_text_start != null && pos >= additional_info.additional_info_text_start && pos < additional_info.additional_info_text_end) {
73+
className.push('highlight-cyan');
74+
}
75+
6676
className = className.join(' ');
6777

6878
return className;
@@ -138,8 +148,26 @@ class SigHighlighted extends React.Component {
138148
indication_text: sig_parsed.indication_text,
139149
indication_text_start: sig_parsed.indication_text_start,
140150
indication_text_end: sig_parsed.indication_text_end
141-
}
151+
},
152+
max: {
153+
max_numerator_value: sig_parsed.max_numerator_value,
154+
max_numerator_unit: sig_parsed.max_numerator_unit,
155+
max_denominator_value: sig_parsed.max_denominator_value,
156+
max_denominator_unit: sig_parsed.max_denominator_unit,
157+
max_text_start: sig_parsed.max_text_start,
158+
max_text_end: sig_parsed.max_text_end,
159+
max_text: sig_parsed.max_text,
160+
max_readable: sig_parsed.max_readable
161+
},
162+
additional_info: {
163+
additional_info: sig_parsed.additional_info,
164+
additional_info_text_start: sig_parsed.additional_info_text_start,
165+
additional_info_text_end: sig_parsed.additional_info_text_end,
166+
additional_info_text: sig_parsed.additional_info_text,
167+
additional_info_readable: sig_parsed.additional_info_readable
168+
}
142169
};
170+
console.log('sig_parsed_components', sig_parsed_components);
143171
this.setState({ sig_parsed_components });
144172
}
145173

frontend/src/_components/SigParsed.jsx

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,24 @@ class SigParsed extends React.Component {
103103
indication_text_start: sig_parsed.indication_text_start,
104104
indication_text_end: sig_parsed.indication_text_end,
105105
indication_readable: sig_parsed.indication_readable
106-
}
106+
},
107+
max: {
108+
max_numerator_value: sig_parsed.max_numerator_value,
109+
max_numerator_unit: sig_parsed.max_numerator_unit,
110+
max_denominator_value: sig_parsed.max_denominator_value,
111+
max_denominator_unit: sig_parsed.max_denominator_unit,
112+
max_text_start: sig_parsed.max_text_start,
113+
max_text_end: sig_parsed.max_text_end,
114+
max_text: sig_parsed.max_text,
115+
max_readable: sig_parsed.max_readable
116+
},
117+
additional_info: {
118+
additional_info: sig_parsed.additional_info,
119+
additional_info_text_start: sig_parsed.additional_info_text_start,
120+
additional_info_text_end: sig_parsed.additional_info_text_end,
121+
additional_info_text: sig_parsed.additional_info_text,
122+
additional_info_readable: sig_parsed.additional_info_readable
123+
}
107124
};
108125

109126
this.setState({ sig_parsed_components });
@@ -145,7 +162,7 @@ class SigParsed extends React.Component {
145162
const { sig_parsed, sig_reviewed, sig_parsed_components } = this.state;
146163
return (
147164
<Row>
148-
<Col sm={12} md={9}>
165+
<Col sm={12} md={10}>
149166
<Table responsive borderless size="sm">
150167
<thead>
151168
<tr>
@@ -170,6 +187,12 @@ class SigParsed extends React.Component {
170187
<th>
171188
indication
172189
</th>
190+
<th>
191+
max
192+
</th>
193+
<th>
194+
additional info
195+
</th>
173196
</tr>
174197
</thead>
175198
<tbody>
@@ -191,6 +214,12 @@ class SigParsed extends React.Component {
191214
<td title={JSON.stringify(sig_parsed_components.indication, null, 2)}>
192215
{sig_parsed.indication_readable}
193216
</td>
217+
<td title={JSON.stringify(sig_parsed_components.max, null, 2)}>
218+
{sig_parsed.max_readable}
219+
</td>
220+
<td title={JSON.stringify(sig_parsed_components.additional_info, null, 2)}>
221+
{sig_parsed.additional_info_readable}
222+
</td>
194223
</tr>
195224
{sig_reviewed && !sig_reviewed.sig_correct &&
196225
<tr>
@@ -204,7 +233,7 @@ class SigParsed extends React.Component {
204233
</tbody>
205234
</Table>
206235
</Col>
207-
<Col sm={12} md={3}>
236+
<Col sm={12} md={2}>
208237
<SigReviewedOverall sig_reviewed={sig_reviewed} sig_parsed={sig_parsed} handleChange={this.handleReview} />
209238
</Col>
210239
</Row>

frontend/src/assets/css/parserx.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,18 @@
116116
background: linear-gradient(180deg,rgba(255,255,255,0) 75%, #9C27B0 25%);
117117
}
118118

119+
.highlight-pink {
120+
background: linear-gradient(180deg,rgba(255,255,255,0) 75%, #E91E63 25%);
121+
}
122+
123+
.highlight-cyan {
124+
background: linear-gradient(180deg,rgba(255,255,255,0) 75%, #00BCD4 25%);
125+
}
126+
127+
.highlight-gray {
128+
background: linear-gradient(180deg,rgba(255,255,255,0) 75%, #9E9E9E 25%);
129+
}
130+
119131
.red {
120132
color:#F44336
121133
}

frontend/webpack.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ module.exports = {
5757
externals: {
5858
// global app config object
5959
config: JSON.stringify({
60-
apiUrl: 'https://api.parserx.io'
60+
//apiUrl: 'https://api.parserx.io'
6161
//apiUrl: 'http://139.144.27.208'
62-
//apiUrl: 'http://192.168.1.20:8005'
62+
apiUrl: 'http://192.168.1.20:8005'
6363
//apiUrl: 'http://192.168.1.14:8005'
6464
})
6565
}

parsers/sig.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class SigParser(Parser):
2424
}
2525
# TODO: make this match_keys assignment more elegant
2626
#match_keys = ['original_sig_text'] + ['sig_text', 'sig_readable'] + method.parsers[0].match_keys + dose.parsers[0].match_keys + strength.parsers[0].match_keys + route.parsers[0].match_keys + frequency.parsers[0].match_keys + when.parsers[0].match_keys + duration.parsers[0].match_keys + indication.parsers[0].match_keys + max.parsers[0].match_keys + additional_info.parsers[0].match_keys
27-
match_keys = ['sig_text', 'sig_readable'] + method.parsers[0].match_keys + dose.parsers[0].match_keys + strength.parsers[0].match_keys + route.parsers[0].match_keys + frequency.parsers[0].match_keys + when.parsers[0].match_keys + duration.parsers[0].match_keys + indication.parsers[0].match_keys + max.parsers[0].match_keys + additional_info.parsers[0].match_keys
27+
match_keys = ['sig_text', 'sig_readable', 'max_dose_per_day'] + method.parsers[0].match_keys + dose.parsers[0].match_keys + strength.parsers[0].match_keys + route.parsers[0].match_keys + frequency.parsers[0].match_keys + when.parsers[0].match_keys + duration.parsers[0].match_keys + indication.parsers[0].match_keys + max.parsers[0].match_keys + additional_info.parsers[0].match_keys
2828
parser_type = 'sig'
2929

3030
def get_normalized_sig_text(self, sig_text):
@@ -39,17 +39,17 @@ def get_normalized_sig_text(self, sig_text):
3939
sig_text = ' '.join(sig_text.split())
4040
return sig_text
4141

42-
def get_readable(self, match_dict):
43-
method = match_dict['method_readable'] if match_dict['method_readable'] else ''
44-
dose = match_dict['dose_readable'] if match_dict['dose_readable'] else ''
45-
strength = match_dict['strength_readable'] if match_dict['strength_readable'] else ''
46-
route = match_dict['route_readable'] if match_dict['route_readable'] else ''
47-
frequency = match_dict['frequency_readable'] if match_dict['frequency_readable'] else ''
48-
when = match_dict['when_readable'] if match_dict['when_readable'] else ''
49-
duration = match_dict['duration_readable'] if match_dict['duration_readable'] else ''
50-
indication = match_dict['indication_readable'] if match_dict['indication_readable'] else ''
51-
max = match_dict['max_readable'] if match_dict['max_readable'] else ''
52-
additional_info = match_dict['additional_info_readable'] if match_dict['additional_info_readable'] else ''
42+
def get_readable(self, match_dict, inferred_method=None, inferred_route=None):
43+
method = match_dict['method_readable'] or inferred_method or ''
44+
dose = match_dict['dose_readable'] or ''
45+
strength = match_dict['strength_readable'] or ''
46+
route = match_dict['route_readable'] or inferred_route or ''
47+
frequency = match_dict['frequency_readable'] or ''
48+
when = match_dict['when_readable'] or ''
49+
duration = match_dict['duration_readable'] or ''
50+
indication = match_dict['indication_readable'] or ''
51+
max = match_dict['max_readable'] or ''
52+
additional_info = match_dict['additional_info_readable'] or ''
5353

5454
if dose != '' and strength != '':
5555
strength = '(' + strength + ')'
@@ -156,6 +156,7 @@ def infer(self, ndc=None, rxcui=None):
156156
inferred = dict.fromkeys(sig_elements)
157157
for sig_element in sig_elements:
158158
inferred[sig_element] = infer_sig_element(sig_element, ndc, rxcui)
159+
#inferred['sig_readable'] = self.get_readable(match_dict)
159160
return inferred
160161

161162
# parse a csv
@@ -265,7 +266,7 @@ def print_progress_bar (iteration, total, prefix = 'progress:', suffix = 'comple
265266
print()
266267

267268
#print(SigParser().infer(ndc='68788640709'))
268-
parsed_sigs = SigParser().parse_sig_csv()
269+
#parsed_sigs = SigParser().parse_sig_csv()
269270
#parsed_sigs = SigParser().parse_validate_sig_csv()
270271
#print(parsed_sigs)
271272

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Generated by Django 3.2.9 on 2022-08-08 14:22
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('sig', '0016_sigparsed_max_dose_per_day'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='sigparsed',
15+
name='additional_info',
16+
field=models.CharField(max_length=1000, null=True),
17+
),
18+
migrations.AddField(
19+
model_name='sigparsed',
20+
name='additional_info_readable',
21+
field=models.CharField(max_length=1000, null=True),
22+
),
23+
migrations.AddField(
24+
model_name='sigparsed',
25+
name='additional_info_text',
26+
field=models.CharField(max_length=100, null=True),
27+
),
28+
migrations.AddField(
29+
model_name='sigparsed',
30+
name='additional_info_text_end',
31+
field=models.IntegerField(null=True),
32+
),
33+
migrations.AddField(
34+
model_name='sigparsed',
35+
name='additional_info_text_start',
36+
field=models.IntegerField(null=True),
37+
),
38+
]

sig/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,13 @@ class SigParsed(models.Model):
102102
max_readable = models.CharField(max_length=100, null=True)
103103
# max_dose_per_day
104104
max_dose_per_day = models.FloatField(null=True)
105-
105+
# additional_info
106+
additional_info = models.CharField(max_length=1000, null=True)
107+
additional_info_text_start = models.IntegerField(null=True)
108+
additional_info_text_end = models.IntegerField(null=True)
109+
additional_info_text = models.CharField(max_length=100, null=True)
110+
additional_info_readable = models.CharField(max_length=1000, null=True)
111+
106112
class Meta:
107113
ordering = ['-created']
108114

sig/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class SigParsedSerializer(serializers.ModelSerializer):
1919

2020
class Meta:
2121
model = SigParsed
22-
fields = ['id', 'sig_text', 'sig_readable', 'created', 'version', 'method', 'dose', 'dose_max', 'dose_unit', 'strength', 'strength_max', 'strength_unit', 'route', 'frequency', 'frequency_max', 'period', 'period_max', 'period_unit', 'time_duration', 'time_duration_unit', 'day_of_week', 'time_of_day', 'when', 'offset', 'bounds', 'count', 'duration', 'duration_max', 'duration_unit', 'as_needed', 'indication', 'sig_reviewed', 'sig_reviewed_status'
23-
,'method_text', 'method_text_start', 'method_text_end', 'method_readable', 'dose_text', 'dose_text_start', 'dose_text_end', 'dose_readable', 'strength_text', 'strength_text_start', 'strength_text_end', 'strength_readable', 'route_text', 'route_text_start', 'route_text_end', 'route_readable', 'frequency_text', 'frequency_text_start', 'frequency_text_end', 'frequency_readable', 'when_text', 'when_text_start', 'when_text_end', 'when_readable', 'duration_text', 'duration_text_start', 'duration_text_end', 'duration_readable', 'indication_text', 'indication_text_start', 'indication_text_end', 'indication_readable', 'max_numerator_value', 'max_numerator_unit', 'max_denominator_value', 'max_denominator_unit', 'max_text_start', 'max_text_end', 'max_text', 'max_readable', 'max_dose_per_day']
22+
fields = ['id', 'sig_text', 'sig_readable', 'created', 'version', 'method', 'dose', 'dose_max', 'dose_unit', 'strength', 'strength_max', 'strength_unit', 'route', 'frequency', 'frequency_max', 'period', 'period_max', 'period_unit', 'time_duration', 'time_duration_unit', 'day_of_week', 'time_of_day', 'when', 'offset', 'bounds', 'count', 'duration', 'duration_max', 'duration_unit', 'as_needed', 'indication', 'max_numerator_value', 'max_numerator_unit', 'max_denominator_value', 'max_denominator_unit', 'additional_info', 'sig_reviewed', 'sig_reviewed_status'
23+
,'method_text', 'method_text_start', 'method_text_end', 'method_readable', 'dose_text', 'dose_text_start', 'dose_text_end', 'dose_readable', 'strength_text', 'strength_text_start', 'strength_text_end', 'strength_readable', 'route_text', 'route_text_start', 'route_text_end', 'route_readable', 'frequency_text', 'frequency_text_start', 'frequency_text_end', 'frequency_readable', 'when_text', 'when_text_start', 'when_text_end', 'when_readable', 'duration_text', 'duration_text_start', 'duration_text_end', 'duration_readable', 'indication_text', 'indication_text_start', 'indication_text_end', 'indication_readable', 'max_text_start', 'max_text_end', 'max_text', 'max_readable', 'max_dose_per_day', 'additional_info_text_start', 'additional_info_text_end', 'additional_info_text', 'additional_info_readable']
2424

2525
def get_sig_reviewed_status(self, obj):
2626
if not hasattr(obj, 'id'):

sig/views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ def create(self, request, *args, **kwargs):
105105

106106
def get_sig_inferred(self, ndc=None, rxcui=None):
107107
sig_inferred_data = SigParser().infer(ndc, rxcui)
108-
print(sig_inferred_data)
109108
return sig_inferred_data
110109

111110
def replace_sig_parsed_optimal(self, sig):

0 commit comments

Comments
 (0)