From 181d7c04d37e0c04038588961a0edfdba715b135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org> Date: Sat, 23 Mar 2024 19:08:25 +0100 Subject: [PATCH] Add support level description in business model page --- .../finances/_hx_country_level_data.html | 12 +- .../templates/finances/business_model.html | 154 +++++++++++------- .../finances/country_level_data.html | 4 +- .../templates/bi/battery-charging.html | 6 + scipost_django/templates/bi/battery-full.html | 4 + scipost_django/templates/bi/battery-half.html | 4 + scipost_django/templates/bi/battery.html | 3 + scipost_django/templates/bi/trophy-fill.html | 3 + 8 files changed, 126 insertions(+), 64 deletions(-) create mode 100644 scipost_django/templates/bi/battery-charging.html create mode 100644 scipost_django/templates/bi/battery-full.html create mode 100644 scipost_django/templates/bi/battery-half.html create mode 100644 scipost_django/templates/bi/battery.html create mode 100644 scipost_django/templates/bi/trophy-fill.html diff --git a/scipost_django/finances/templates/finances/_hx_country_level_data.html b/scipost_django/finances/templates/finances/_hx_country_level_data.html index 3c22dd1ee..db604e25e 100644 --- a/scipost_django/finances/templates/finances/_hx_country_level_data.html +++ b/scipost_django/finances/templates/finances/_hx_country_level_data.html @@ -7,23 +7,23 @@ <thead> <tr> <th></th> - <th style="text-align: right;">Subsidy income</th> <th style="text-align: right;">Expenditures</th> + <th style="text-align: right;">Subsidy income</th> <th style="text-align: right;">Impact on reserves</th> </tr> </thead> <tbody> <tr class="bg-light"> <td>Cumulative</td> - <td style="text-align: right;">{{ cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ cumulative.expenditures }}</td> + <td style="text-align: right;">{{ cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ cumulative.impact_on_reserves }}</td> </tr> {% for year, val in per_year.items %} <tr> <td>{{ year }}</td> - <td style="text-align: right;">{{ val.subsidy_income }}</td> <td style="text-align: right;">{{ val.expenditures }}</td> + <td style="text-align: right;">{{ val.subsidy_income }}</td> <td style="text-align: right;">{{ val.impact_on_reserves }}</td> </tr> {% endfor %} @@ -42,8 +42,8 @@ <tr> <th></th> <th></th> - <th style="text-align: right;">Subsidy Income</th> <th style="text-align: right;">Expenditures</th> + <th style="text-align: right;">Subsidy Income</th> <th style="text-align: right;">Impact on reserves</th> </tr> </thead> @@ -51,8 +51,8 @@ <tr class="bg-light"> <td>Total</td> <td></td> - <td style="text-align: right;">{{ cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ cumulative.expenditures }}</td> + <td style="text-align: right;">{{ cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ cumulative.impact_on_reserves }}</td> </tr> {% for organization in organizations|dictsortreversed:"cf_balance_info.cumulative.impact_on_reserves" %} @@ -60,8 +60,8 @@ <tr> <td><a href="https://{{ request.get_host }}{{ organization.get_absolute_url }}">{{ organization }}</a></td> <td>{{ organization.get_orgtype_display }}</td> - <td style="text-align: right;">{{ organization.cf_balance_info.cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ organization.cf_balance_info.cumulative.expenditures }}</td> + <td style="text-align: right;">{{ organization.cf_balance_info.cumulative.subsidy_income }}</td> <td style="text-align: right;">{{ organization.cf_balance_info.cumulative.impact_on_reserves }}</td> </tr> {% endif %} diff --git a/scipost_django/finances/templates/finances/business_model.html b/scipost_django/finances/templates/finances/business_model.html index b014be06f..d44f3188f 100644 --- a/scipost_django/finances/templates/finances/business_model.html +++ b/scipost_django/finances/templates/finances/business_model.html @@ -400,66 +400,95 @@ </div> - <h3 class="highlight" id="sponsorshipLevels">Sponsorship levels</h3> - <div class="m-2"> - <p> - It is very important to understand that although we compile data on which Organizations - benefit from our activities, <strong>we do not bill these Organizations - for the services we provide</strong>. Our philosophy is to pool all the support we - receive, and use these resources to provide services for the community at large. - </p> - <p> - This opens up some frequently-asked questions: - <ul> - <li>why would any Organization donate anything?</li> - <li>isn't this simply letting "free-riding" Organizations get substantial value - on the back of those that <em>do</em> contribute?</li> - </ul> - The reason why we trust that Organizations will support us is quite simple: - each paper we publish which is linked to them, represents a direct economy of publishing - costs which would have otherwise been incurred had the authors published elsewhere. - Libraries can thus independently establish what the approximate impact of our - activities is on their own budget. We trust that simple algebra will then - prove our case. - </p> - <p> - On the question of <strong>free-riding</strong>, there will of course always - be Organizations which are better than others at taking responsibility for themselves, - and for the broader community. - Though we do not ban free-riding, it does make our model more challenging to - sustain. However, since our integrated costs are dramatically lower - than those of other publishers, - our infrastructure remains cheaper for our sponsors - to fund <strong>even if</strong> some level of - free-riding is present. And besides, since we make all data public, who - deserves credit for supporting us will be - clear and transparent for everybody to see. - </p> - {% if perms.scipost.can_attend_VGMs %} - <div class="container border border-danger"> - <span class="text-danger">(ADMIN VIEW ONLY)</span> + <h2 class="highlight" id="sponsorshipLevels">Sponsorship</h2> + <div class="row m-2"> + <div class="col-lg-6"> + <h3 class="highlight">Why?</h3> + <p> + It is very important to understand that although we compile data on which Organizations + benefit from our activities, <strong>we do not bill these Organizations + for the services we provide</strong>. We are a charity whose mission is to serve + the global academic community, and our editorial services are neither for sale + nor delivered against payment. + </p> + <p> + This opens up some frequently-asked questions: <ul> - <li> - <strong>Bronze</strong>: sponsorship level $\gt 0$; - </li> - <li> - <strong>Silver</strong>: sponsorship level $\geq$ (own PubFracs) - $\times$ average cost per publication; - </li> - <li> - <strong>Gold</strong>: sponsorship level $\geq$ (own PubFracs) $\times$ - average cost per publication $/$ (1 - free-riding fraction); - </li> - <li> - <strong>Platinum</strong>: sponsorship level $\gt 2 \times$ Gold. - </li> + <li>why would any Organization donate anything?</li> + <li>isn't this simply letting "free-riding" Organizations get substantial value + on the back of those that <em>-do-</em> contribute?</li> </ul> - </div> - {% endif %} + The reason why Organizations should support us is quite simple: + our existence and continued operations saves them money. + In fact, it saves them <strong>a lot</strong> of costs + which would have otherwise been incurred had their authors published elsewhere. + </p> + <p> + Our operations would be immediately sustainable if Organizations benefitting from our activities generally supported us at a level commensurate with their PubFrac share. + </p> + <p> + The inevitable reality is that some Organizations will remain bystanders, while others do support us more than others. In practice, sustainability thus means equilibrium between + </p> + <ul> + <li>the positive impact of the generosity of Organizations supporting us above their PubFrac share</li> + <li>the negative impact on our reserves from Organizations which act as mere bystanders</li> + </ul> + <p> + In fact, a large number of Organizations are associated to our Publications, but have not yet supported us. We call the "unsupported" part of our PubFractions the <em>bystander fraction</em>. + </p> + </div> + + <div class="col-lg-6"> + <h3 class="highlight">Levels of support</h3> + <p> + Organizations fall somewhere in the spectrum between those that generously support our activities and fuel our growth, all the way to those that remain bystanders. In fact, we like to categorize them as follows: + </p> + <table class="table w-auto"> + <thead> + <tr> + <th>Category</th> + <th>Support<br>(vs PubFrac share)</th> + <th>Impact on<br>our reserves</th> + </tr> + </thead> + <tbody> + <tr> + <th class="bg-success bg-opacity-50">{% include 'bi/trophy-fill.html' %} Champion</th> + <td>4x or more</td> + <td>strongly positive</td> + </tr> + <tr> + <th class="bg-success bg-opacity-25">{% include 'bi/battery-charging.html' %} Promoter</th> + <td>Twice or more</td> + <td>positive</td> + </tr> + <tr> + <th class="bg-success bg-opacity-10">{% include 'bi/battery-full.html' %} Supporter</th> + <td>On par</td> + <td>neutral</td> + </tr> + <tr> + <th class="bg-warning bg-opacity-10">{% include 'bi/battery-half.html' %} Sympathizer</th> + <td>Below</td> + <td>negative</td> + </tr> + <tr> + <th class="bg-danger bg-opacity-25">{% include 'bi/battery.html' %} Bystander</th> + <td>None</td> + <td>strongly negative</td> + </tr> + </tbody> + </table> + <p> + If we could have all Organizations which benefit from our activities land in the Supporter category, we'd be robustly sustainable. Any Pormoter or Champions would then propel our growth. In the meantime, they allow us to survive. + </p> + </div> + </div> + </div> - <h3 class="highlight" id="inKind">In-kind support</h3> + <h2 class="highlight" id="inKind">In-kind support</h2> <div class="m-2"> <p> @@ -556,7 +585,20 @@ <p> As far as our operations are concerned, we run them in the most efficient way possible, with complete transparency, for the benefit not only of scientists worldwide, - but also of their supporting organizations (and anybody else interested in science). + but also of their supporting Organizations (and anybody else interested in science). + </p> + <p> + On the question of free-riding, there will of course always + be Organizations which are better than others at taking responsibility for themselves, + and for the broader community. + Though we do not ban free-riding, it does make our model more challenging to + sustain. However, since our integrated costs are dramatically lower + than those of other publishers, + our infrastructure remains cheaper for our sponsors + to fund <strong>even if</strong> some level of + free-riding is present. And besides, since we make all data public, who + deserves credit for supporting us will be + clear and transparent for everybody to see. </p> <p> As far as our sustainability is concerned, diff --git a/scipost_django/finances/templates/finances/country_level_data.html b/scipost_django/finances/templates/finances/country_level_data.html index faa1893cb..e01d3767d 100644 --- a/scipost_django/finances/templates/finances/country_level_data.html +++ b/scipost_django/finances/templates/finances/country_level_data.html @@ -31,8 +31,8 @@ <thead> <tr> <th colspan="2">Country</th> - <th style="text-align: right;">Subsidy income</th> <th style="text-align: right;">Expenditures</th> + <th style="text-align: right;">Subsidy income</th> <th style="text-align: right;">Impact on reserves</th> </tr> </thead> @@ -49,8 +49,8 @@ </a> </td> <td>{{ country_obj.name }}</td> - <td style="text-align: right;">{{ item.subsidy_income }}</td> <td style="text-align: right;">{{ item.expenditures }}</td> + <td style="text-align: right;">{{ item.subsidy_income }}</td> <td style="text-align: right;">{{ item.impact_on_reserves }}</td> </tr> <tr class="bg-light"> diff --git a/scipost_django/templates/bi/battery-charging.html b/scipost_django/templates/bi/battery-charging.html new file mode 100644 index 000000000..c5e67b6e8 --- /dev/null +++ b/scipost_django/templates/bi/battery-charging.html @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-battery-charging" viewBox="0 0 16 16"> + <path d="M9.585 2.568a.5.5 0 0 1 .226.58L8.677 6.832h1.99a.5.5 0 0 1 .364.843l-5.334 5.667a.5.5 0 0 1-.842-.49L5.99 9.167H4a.5.5 0 0 1-.364-.843l5.333-5.667a.5.5 0 0 1 .616-.09z"/> + <path d="M2 4h4.332l-.94 1H2a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h2.38l-.308 1H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2"/> + <path d="M2 6h2.45L2.908 7.639A1.5 1.5 0 0 0 3.313 10H2zm8.595-2-.308 1H12a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H9.276l-.942 1H12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"/> + <path d="M12 10h-1.783l1.542-1.639q.146-.156.241-.34zm0-3.354V6h-.646a1.5 1.5 0 0 1 .646.646M16 8a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8"/> +</svg> diff --git a/scipost_django/templates/bi/battery-full.html b/scipost_django/templates/bi/battery-full.html new file mode 100644 index 000000000..2dd38f4c9 --- /dev/null +++ b/scipost_django/templates/bi/battery-full.html @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-battery-full" viewBox="0 0 16 16"> + <path d="M2 6h10v4H2z"/> + <path d="M2 4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm10 1a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1zm4 3a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8"/> +</svg> diff --git a/scipost_django/templates/bi/battery-half.html b/scipost_django/templates/bi/battery-half.html new file mode 100644 index 000000000..77dda6e7d --- /dev/null +++ b/scipost_django/templates/bi/battery-half.html @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-battery-half" viewBox="0 0 16 16"> + <path d="M2 6h5v4H2z"/> + <path d="M2 4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm10 1a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1zm4 3a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8"/> +</svg> diff --git a/scipost_django/templates/bi/battery.html b/scipost_django/templates/bi/battery.html new file mode 100644 index 000000000..23d191fa0 --- /dev/null +++ b/scipost_django/templates/bi/battery.html @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-battery" viewBox="0 0 16 16"> + <path d="M0 6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm14 3a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8"/> +</svg> diff --git a/scipost_django/templates/bi/trophy-fill.html b/scipost_django/templates/bi/trophy-fill.html new file mode 100644 index 000000000..25edfc950 --- /dev/null +++ b/scipost_django/templates/bi/trophy-fill.html @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trophy-fill" viewBox="0 0 16 16"> + <path d="M2.5.5A.5.5 0 0 1 3 0h10a.5.5 0 0 1 .5.5q0 .807-.034 1.536a3 3 0 1 1-1.133 5.89c-.79 1.865-1.878 2.777-2.833 3.011v2.173l1.425.356c.194.048.377.135.537.255L13.3 15.1a.5.5 0 0 1-.3.9H3a.5.5 0 0 1-.3-.9l1.838-1.379c.16-.12.343-.207.537-.255L6.5 13.11v-2.173c-.955-.234-2.043-1.146-2.833-3.012a3 3 0 1 1-1.132-5.89A33 33 0 0 1 2.5.5m.099 2.54a2 2 0 0 0 .72 3.935c-.333-1.05-.588-2.346-.72-3.935m10.083 3.935a2 2 0 0 0 .72-3.935c-.133 1.59-.388 2.885-.72 3.935"/> +</svg> -- GitLab