Merge branch 'master' into feature/short_range_concentration

This commit is contained in:
Luis Aleixo 2022-03-24 11:23:52 +01:00
commit 6355123a34
7 changed files with 43 additions and 38 deletions

View file

@ -408,11 +408,16 @@ class FormData:
# Nightshift control room, 10% speaking.
{'Speaking': 1, 'Breathing': 9}
),
'meeting': (
'smallmeeting': (
'Seated',
# Conversation of N people is approximately 1/N% of the time speaking.
{'Speaking': 1, 'Breathing': self.total_people - 1}
),
'largemeeting': (
'Standing',
# each infected person spends 1/3 of time speaking.
{'Speaking': 1, 'Breathing': 2}
),
'callcentre': ('Seated', 'Speaking'),
'library': ('Seated', 'Breathing'),
'training': ('Standing', 'Speaking'),
@ -449,7 +454,8 @@ class FormData:
'office': 'Seated',
'controlroom-day': 'Seated',
'controlroom-night': 'Seated',
'meeting': 'Seated',
'smallmeeting': 'Seated',
'largemeeting': 'Seated',
'callcentre': 'Seated',
'library': 'Seated',
'training': 'Seated',
@ -731,7 +737,7 @@ def baseline_raw_form_data():
}
ACTIVITY_TYPES = {'office', 'meeting', 'training', 'callcentre', 'controlroom-day', 'controlroom-night', 'library', 'workshop', 'lab', 'gym'}
ACTIVITY_TYPES = {'office', 'smallmeeting', 'largemeeting', 'training', 'callcentre', 'controlroom-day', 'controlroom-night', 'library', 'workshop', 'lab', 'gym'}
MECHANICAL_VENTILATION_TYPES = {'mech_type_air_changes', 'mech_type_air_supply', 'not-applicable'}
MASK_TYPES = {'Type I', 'FFP2'}
MASK_WEARING_OPTIONS = {'mask_on', 'mask_off'}

View file

@ -347,13 +347,6 @@ class ReportGenerator:
context['permalink'] = generate_permalink(base_url, self.calculator_prefix, form)
context['calculator_prefix'] = self.calculator_prefix
# For further information about these values visit https://gitlab.cern.ch/cara/cara/-/merge_requests/321.
context['scale_warning'] = {
'level': 'red-4', # 'red-4' - 'orange-3' - 'yellow-2' - 'green-1'
'risk': 'strong', # 'strong' - 'medium' - 'reduced' - ''
'onsite_access': '4000', # '4000' - '5000' - '6500' - '8000'
'threshold': '2%' # '2%' - '' - '' - ''
}
return context
def _template_environment(self) -> jinja2.Environment:

View file

@ -299,7 +299,7 @@ footer img {
#download-pdf, #pdf_qrcode_aref {
display: none;
}
#cern_level{
#scale_warning{
height: 15em;
margin-top: 1em;
}

View file

@ -317,7 +317,8 @@
<div class="col-sm-6">
<select id="activity_type" name="activity_type" class="form-control">
<option value="office">Office</option>
<option value="meeting">Meeting</option>
<option value="smallmeeting">Small meeting (<10 occ.)</option>
<option value="largemeeting">Large meeting (>=10 occ.)</option>
<option value="callcentre">Call Centre</option>
<option value="controlroom-day">Control Room - Day shift</option>
<option value="controlroom-night">Control Room - Night shift</option>
@ -582,7 +583,8 @@
The type of activity applies to both the infected and exposed persons:
<ul>
<li>Office = all seated, talking 33% of the time,</li>
<li>Meeting = all seated, talking time shared between all persons,</li>
<li>Small meeting (< 10 occ.) = all seated, talking time shared between all persons,</li>
<li>Large meeting (>= 10 occ.) = speaker is standing and speaking 33% of the time, other occupants are seated,</li>
<li>Call Centre = all seated, continuous talking,</li>
<li>Control Room (day shift) = all seated, talking 50% of the time,</li>
<li>Control Room (night shift) = all seated, talking 10% of the time,</li>

View file

@ -88,7 +88,7 @@
{% block report_summary_footnote %}
{% endblock report_summary_footnote %}
</div>
<p id="section1">* The results are based on the parameters and assumptions published in the CERN Open Report <a href="https://cds.cern.ch/record/2756083"> CERN-OPEN-2021-004</a>.</p>
<p id="section1">* The results are based on the parameters and assumptions published in the CARA publication: <a href="https://doi.org/10.1098/rsfs.2021.0076"> doi.org/10.1098/rsfs.2021.0076</a>.</p><br>
{% if form.short_range_option == "short_range_yes" %}
{% if 'Speaking' in form.short_range_interactions|string or 'Shouting' in form.short_range_interactions|string %}
<button class="btn btn-sm btn-primary" id="button_full_exposure" disabled>Show full exposure</button>
@ -304,8 +304,10 @@
Activity type:
{% if form.activity_type == "office" %}
Office typical scenario with all persons seated, speaking occasionally (speaking assumed for 1/3rd of the time).
{% elif form.activity_type == "meeting" %}
Meeting typical scenario with all persons seated, one person speaking at a time.
{% elif form.activity_type == "smallmeeting" %}
Small meeting typical scenario with all persons seated, one person speaking at a time.
{% elif form.activity_type == "largemeeting" %}
Large meeting infected occupant(s) is standing and speaking 1/3rd of the time, while the other occupants are seated.
{% elif form.activity_type == "callcentre" %}
Call Centre = typical office-like scenario with all persons seated, all speaking continuously.
{% elif form.activity_type == "controlroom-day" %}

View file

@ -154,7 +154,8 @@ Within the number of people occupying the space, you should specify how many are
<p>There are a few predefined activities in the tool at present.</p>
<ul>
<li><strong>Office </strong> = All persons seated, talking occasionally (1/3rd of the time, with normal breathing the other 2/3rds of the time). Everyone (exposed and infected occupants) is treated the same in this model.</li>
<li><strong>Meeting</strong> = All persons seated, having a conversation (approximately each occupant is 1/N % of the time talking, where N is the number of occupants). Everyone (exposed and infected occupants) is treated the same in this model.</li>
<li><strong>Small meeting</strong> = Less than 10 participants. All persons seated, having a conversation (approximately each occupant is 1/N % of the time talking, where N is the number of occupants). Everyone (exposed and infected occupants) is treated the same in this model.</li>
<li><strong>Large Meeting</strong> = 10 or more participants. Similar to a seminar with 'speakers and audience'. Infected occupant(s) is standing and speaking 1/3rd of the time, while the other occupants are seated.</li>
<li><strong>Library</strong> = All persons seated, breathing only (not talking), all the time.</li>
<li><strong>Call Centre</strong> = All persons seated, all talking simultaneously, all the time. This is a conservative profile, i.e. will show an increased <code>P(i)</code> compared to office/meeting activity. Everyone (exposed and infected occupants) is treated the same in this model.</li>
<li><strong>Control Room (day shift)</strong> = All persons seated, all talking 50% of the time. This is a conservative profile, i.e. will show an increased <code>P(i)</code> compared to office/meeting activity. Everyone (exposed and infected occupants) is treated the same in this model.</li>

View file

@ -1,8 +1,9 @@
{% extends "base/calculator.report.html.j2" %}
{% if ((prob_inf > 10) or (expected_new_cases >= 1)) %} {% set cern_level = 'red' %}
{% elif (2 <= prob_inf <= 10) %} {% set cern_level = 'orange' %}
{% else %} {% set cern_level = 'green' %}
{% set cern_level = 'green-1' %} <!-- green-1, yellow-2, orange-3, red-4 -->
{% if ((prob_inf > 10) or (expected_new_cases >= 1)) %} {% set scale_warning = 'red' %}
{% elif (2 <= prob_inf <= 10) %} {% set scale_warning = 'orange' %}
{% else %} {% set scale_warning = 'green' %}
{% endif %}
{% block report_preamble_navtab %}
@ -12,9 +13,9 @@
{% endblock report_preamble_navtab %}
{% block warning_animation %}
{% if cern_level == 'red' %} {% set warning_color= 'bg-danger' %}
{% elif cern_level == 'orange' %} {% set warning_color = 'bg-warning' %}
{% elif cern_level == 'green' %} {% set warning_color = 'bg-success' %}
{% if scale_warning == 'red' %} {% set warning_color= 'bg-danger' %}
{% elif scale_warning == 'orange' %} {% set warning_color = 'bg-warning' %}
{% elif scale_warning == 'green' %} {% set warning_color = 'bg-success' %}
{% endif %}
<div class="intro-banner-vdo-play-btn {{warning_color}} m-auto d-flex align-items-center justify-content-center">
@ -29,17 +30,17 @@
{% block report_summary %}
{% set report_message = "Taking into account the uncertainties tied to the model variables, in this scenario and assuming all occupants are exposed equally, the <b>probability of one exposed occupant getting infected is " + prob_inf | non_zero_percentage + "</b> and the <b>expected number of new cases is " + expected_new_cases | float_format + "</b>*." %}
<div class="flex-row align-self-center">
{% if cern_level == 'red' %}
{% if scale_warning == 'red' %}
<div class="alert alert-danger mb-0" role="alert">
<strong>Not Acceptable:</strong>
{{ report_message }}
</div>
{% elif cern_level == 'orange' %}
{% elif scale_warning == 'orange' %}
<div class="alert alert-warning mb-0" role="alert">
<strong>Attention:</strong>
{{ report_message }}
</div>
{% elif cern_level == 'green' %}
{% elif scale_warning == 'green' %}
<div class="alert alert-success mb-0" role="alert">
<strong>Acceptable:</strong>
{{ report_message }}
@ -48,21 +49,21 @@
{% if (prob_inf > 2) %}
<br>
{% if scale_warning.level == "green-1" %}
{% if cern_level == "green-1" %}
<div class="alert alert-dark mb-0" role="alert" style="height:fit-content">
Note: the current CERN COVID Scale is <b>Green 1</b>. The risk of circulation of asymptomatic or pre-symptomatic infected individuals within the CERN site is considered negligible. There may be more than <b>{{scale_warning.onsite_access}} daily on-site accesses</b>. Align your risk assessment with the guidance and instructions provided by the HSE Unit.
Note: the current CERN COVID Scale is <b>Green 1</b>. The risk of circulation of asymptomatic or pre-symptomatic infected individuals within the CERN site is considered negligible. There may be more than <b>8'000 daily on-site accesses</b>. Align your risk assessment with the guidance and instructions provided by the HSE Unit.
</div>
{% elif scale_warning.level == "yellow-2" %}
{% elif cern_level == "yellow-2" %}
<div class="alert alert-dark mb-0" role="alert" style="height:fit-content">
Note: the current CERN COVID Scale is <b>Yellow - 2</b>. There is a {{scale_warning.risk}} risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>{{scale_warning.onsite_access}} daily on-site accesses</b> during this stage. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures can be applied (ALARA).
Note: the current CERN COVID Scale is <b>Yellow - 2</b>. There is a reduced risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>6'500 daily on-site accesses</b> during this stage. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures can be applied (ALARA).
</div>
{% elif scale_warning.level == "orange-3" %}
{% elif cern_level == "orange-3" %}
<div class="alert alert-dark mb-0" role="alert" style="height:fit-content">
Warning: the current CERN COVID Scale is <b>Orange - 3</b>. There is a {{scale_warning.risk}} risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>{{scale_warning.onsite_access}} daily on-site accesses</b> during this stage. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures can be applied (ALARA).
Warning: the current CERN COVID Scale is <b>Orange - 3</b>. There is a medium risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>5'000 daily on-site accesses</b> during this stage. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures can be applied (ALARA).
</div>
{% elif scale_warning.level == "red-4" %}
{% elif cern_level == "red-4" %}
<div class="alert alert-dark mb-0" role="alert" style="height:fit-content">
Warning: the current CERN COVID Scale is <b>Red - 4</b>. There is a {{scale_warning.risk}} risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>{{scale_warning.onsite_access}} daily on-site accesses</b> during this stage. Please reduce the value below the threshold of {{scale_warning.threshold}}. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures are required.
Warning: the current CERN COVID Scale is <b>Red - 4</b>. There is a strong risk that asymptomatic or pre-symptomatic infected individuals circulate within the CERN site. There may be around <b>4'000 daily on-site accesses</b> during this stage. Please reduce the value below the threshold of 2%. See with your supervisor, DSO/LEXGLIMOS and space manager if this scenario is acceptable and if any additional measures are required.
</div>
{% else %}
<p><b>Note:</b> The CERN COVID Level is not specified.</p>
@ -72,13 +73,13 @@
{% endblock report_summary %}
{% block report_summary_footnote %}
{% if cern_level == 'red' %}
{% if scale_warning == 'red' %}
This exceeds the authorised risk threshold or number of expected new cases.
The risk level must be reduced before this activity can be undertaken.
{% elif cern_level == 'orange' %}
{% elif scale_warning == 'orange' %}
This activity has an elevated level of risk, ALARA principles must be applied to minimise the level of risk before undertaking the activity.
See the footnotes for more details on the ALARA principles.
{% elif cern_level == 'green' %}
{% elif scale_warning == 'green' %}
This level of risk is within acceptable parameters, no further actions are required.
{% endif %}
{% endblock report_summary_footnote %}
@ -133,7 +134,7 @@
<div class="alert alert-warning" role="alert">Events with a <strong>P(i) between 2% and 10%</strong> shall be subject to ALARA principles (see footnote) to minimise the risk before proceeding.</div>
<div class="alert alert-danger mb-0" role="alert">Events with a <strong>P(i) exceeding 10% or a number of expected new cases that exceeds 1</strong> may not take place until additional measures are in place and a risk reduction has been performed.</div>
</div>
<div class="col-xl-3 align-self-center text-center"><img id="cern_level" class="rounded" src="{{ calculator_prefix }}/static/images/warning_scale/{{scale_warning.level}}.png"></div>
<div class="col-xl-3 align-self-center text-center"><img id="scale_warning" class="rounded" src="{{ calculator_prefix }}/static/images/warning_scale/{{ scale_warning }}.png"></div>
</div>
</div>
<br>