Giter VIP home page Giter VIP logo

minvws / nl-covid19-data-dashboard Goto Github PK

View Code? Open in Web Editor NEW
174.0 13.0 45.0 88.72 MB

The dashboard provides information on the outbreak and prevalence of COVID-19 in The Netherlands

Home Page: https://coronadashboard.rijksoverheid.nl/

License: European Union Public License 1.2

Dockerfile 0.13% JavaScript 1.19% TypeScript 98.32% CSS 0.10% Shell 0.01% HTML 0.26%
dashboard coronavirus covid-19 netherlands

nl-covid19-data-dashboard's Introduction

NL Coronavirus Dashboard

The dashboard provides information on the outbreak and prevalence of COVID-19 in The Netherlands. It combines measured and modelled data from various sources to give a broad perspective on the subject.

Contact

If you want to contact the dashboard team, feel free to open an issue for technical questions, bug reports, or security findings. If you have a generic question or remark about the corona policy of the Dutch government, please consult the frequently asked questions or contact page on the dashboard.

Development & Contribution process

The core team works directly from this open-source repository. If you plan to propose changes, we recommend opening an issue beforehand where we can discuss your planned changes. This increases the chance that we might be able to use your contribution (or it avoids doing work if there are reasons why we wouldn't be able to use it).

Packages

The project is set up as a monorepo and therefore the code is organized in multiple packages.

  • app: The main application that contains the front-end part of the dashboard. README
  • cli: Command-line tools for things like data validation.
  • cms: Configurations for the Sanity content management system. README
  • common: Commonly shared code that multiple packages are using, like types and utils.
  • icons: A React icon component library, used by the CMS and by app. README

Getting started (quickly)

You can run these commands to quickly get started. We advise you to read what's happening behind the scenes by reading the app README

$ yarn
$ yarn bootstrap
$ yarn dev

Usage

In this project, we use Yarn instead of NPM, so the documentation assumes you have the yarn executable installed on your system.

If you would like to run the code on your local machine check out the readme documentation of the app and (optionally the) cms packages.

Coding Standards

Without describing in detail all the rules we tend to follow here are some worth noting:

General

  • All filenames are written in kebab-case.

  • We use named exports where possible. They improve typing and help with refactoring.

  • We aim to stop using barrel files (using an index file in a folder to bundle exports for the consuming code). Barrel files require manual maintenance and are therefore prone to neglect if forgotten. Also, imports are auto-generated and collapsable by the IDE thus barrel files give us no advantage.

  • When writing complex components, we like them to have their own folder with sub-folders for logic and components containing code which is only used internally by the component. In the case of logic it can also be a file logic.ts if there is not a lot of business logic. When a component and sub-components share some local types they are often put in a separate types.ts file to avoid circular dependencies.

  • We leverage interfaces to define component property structures rather than types. The name of the interface should follow the name of the component followed by a Props suffix. An example would be as below.

    interface RowProps { ... }
    
    const Row = ({ myProp }: RowProps) => { ... };
  • Booleans are prefixed with is/has/should etc.

  • Data schema properties and locale keys for the CMS are all snake_cased. These could be viewed as external data sources / APIs.

  • Event props follow a pattern of onEventName for the component props API. For handling the event we aim to use a name that describes what the function does as opposed to using handleEventNameSubject. Specifically, if the function is not specifically created to handle an event or if the function doings can comfortably be described in a function name.

  • We prefer to use function expressions over named function declarations. This means const doSomething = () => {} instead of function doSomething(){}.

  • Short functions, especially lambda's, are okay to write on a single line.

  • Short if-statements are okay to put on a single line, especially if it only calls a single command: if (isGoingToHappening()) doSomething();

  • We avoid using boolean && doSomething(); inside the component's JavaScript logic, but do use it inside the component's JSX ({boolean && ( ... )}) to conditionally render (parts of) the component.

  • We avoid unnecessary short-hand variable names like arr for arrays, or i for index, or acc for a reduce accumulator.

  • Completely separate Javascript logic from HTML/JSX. This also means removing maps from the JSX. Additionally, if you have nested maps extract them into components passing the required data to map to the component.

  • We prefer early returns. If statements should be on multiple lines, so no single line if statements.

Styling

  • We write Styled Components using its OOTB tagged template literal functions instead of using an additional layer of the Styled System's css() method. This method improves readability, makes code easier to understand, and sticks to the fundamentals of CSS. This method still allows for usage of Styled System's theme definitions, yet removes a dependency on the actual package.
  • We avoid using magic numbers in code, be it logic, JSX, or styles. Magic numbers are often derived from the theme defined by Styled System and resolve to properties such as spacing and font-sizes, but are unclear on their own. Instead, we import the desired property and refer to the index in that properties array. An example would be padding: 3 (undesired) vs padding: space[3] (desired).

GIT

  • We do not have a hard preference or requirement for using git rebase or git merge. Developers should follow what works best for them, but it should be noted that both methods are allowed and actively used in this project.
  • We do not have a hard preference or requirement for squashing a large number of git commits, but it can be useful to apply this when creating a pull request. This action should be used on an 'as-needed basis': if a pull request grows large due to a large amount of commits, it might improve reviewability when multiple commits are squashed. It should be noted that pull requests are squashed when merged, aside from pull requests to master. This is to keep a clear view of features and fixes that were merged as part of a release.
  • Continuing on the above: we should write a comprehensive commit message when squash merging a pull request. This message should be a (filtered) summary of the commits on the branch.
  • It sometimes happens that features, or more so epics, need to be released as a whole because of dependencies within the different chunks of that feature or epic. In this case, it is wise to create an epic/ branch which serves as a base for the different features to be implemented as part of the epic. Branching strategies for this branch are the same as develop: features (feature/) are branched off of and merged back to the epic/ branch. The epic/ branch, as a whole, is merged into develop once it is ready. If the implementation of an epic spans multiple releases, individual releases should also be merged into the epic/ branch in order to keep it up to date. In other words: it also helps to regularly sync develop with the epic/ branch as to prevent conflicts in the end.
  • We use the following branch names:
    • epic/COR-XXXX-descriptive-name-of-epic-branch for epics
    • feature/COR-XXX-descriptive-name-of-ticket-branch for features
    • bugfix/COR-XXX-descriptive-name-of-ticket-branch for bug fixes
    • hotfix/COR-XXX-descriptive-name-of-ticket-branch for hotfixes
    • task/COR-XXX-descriptive-name-of-ticket-branch for bigger features that are best reviewed in smaller chunks
  • We use commit messages according to: https://www.conventionalcommits.org/en/v1.0.0/
    • feat(optional-scope): commit description example for features
    • fix(optional-scope): commit description example for fixes
    • chore(optional-scope): commit description example for cleanups

Developer Documentation

For developers actively working on the platform we recommend reading the documentation here.

nl-covid19-data-dashboard's People

Contributors

amber-taal-work avatar apw26 avatar ben-van-eekelen avatar dariakwork avatar dependabot[bot] avatar hasan-ozaynaci avatar jeroen-drenth avatar jeroenreumkens avatar jorrik-klijnsma-work avatar neelongithub avatar robbyuitbeijerse avatar vwscoronadashboard avatar vwscoronadashboard1 avatar vwscoronadashboard10 avatar vwscoronadashboard13 avatar vwscoronadashboard14 avatar vwscoronadashboard16 avatar vwscoronadashboard17 avatar vwscoronadashboard20 avatar vwscoronadashboard24 avatar vwscoronadashboard25 avatar vwscoronadashboard26 avatar vwscoronadashboard3 avatar vwscoronadashboard30 avatar vwscoronadashboard35 avatar vwscoronadashboard4 avatar vwscoronadashboard5 avatar vwscoronadashboard7 avatar vwscoronadashboard8 avatar yorickdevries avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nl-covid19-data-dashboard's Issues

Bug: Incorrect values in graph 'Ziekenhuisopnames over tijd'

Describe the bug, issue or concern

The graph 'Ziekenhuisopnames over tijd' displays incorrect values for recent days, see the attached screenshot. I've confirmed the issue also occurs in the smartphone interface of the dashboard.

To Reproduce

Steps to reproduce the behaviour:

  1. Go to the Corona Dashboard main page
  2. Click on 'Ziekenhuisopnames'
  3. Scroll down to the graph 'Ziekenhuisopnames over tijd'
  4. The latest values in the graph are incorrect (at least for 16 and 17 January). This can also be confirmed by hovering over the values, reading the value in the pop-up box and comparing it to the value 'Ziekenhuisopnames per dag' and "X meer/minder dan de vorige waarde".

Expected behaviour

Today, on 17 January, the last value in the graph was much lower than it should be according to the value of 'Ziekenhuisopnames per dag', e.g. 38 instead of 188 (see screenshots). This is also the case on January 16th where the value is reported as 125 instead of 188 + 5 (5 less than the day before). Whether the same is true for dates before 16 January is hard to validate via the front-end.

Screenshots

Two screenshots showing the issue for January 17:
image
image

Another screenshot illustrating the problem with the value of January 16th as well:
image

Desktop:

  • OS: Windows 10 (version 1909)
  • Browser Chrome (Version 87.0.4280.141 (Official Build) (64-bit))

Smartphone:

  • Device: Samsung Galaxy S9
  • OS: Android 10
  • Browser: Chrome (version 87.0.4280.141)

Governance

Hospital admission signal and history are not up-to-date

The hospital admission signal seems to be (and remain) outdated.

Expected behavior

My understanding is that the hospital admission signal is based on the information of "bewezen Covid-19 opnames op de verpleegafdeling" as maintained by the stichting NICE.

The reason that this signal is outdated is likely that a snapshot is made only once, when the data for the most recent 3 days is still very incomplete (due to administration and/or due to later confirmation of suspected diagnosis).

For example, the hospital admission is currently 121, 81, and 111 for October 3-5, whereas the dashboard currently shows an average of only 55.3.

The result is a huge underrepresentation which is also very sensitive to administrative delays which may for example be different on different days of the week.

Not only is the signal itself outdated, the history graph is also based on these outdated signals and not updated based on the true underlying hospital admission information. The dashboard graph is relatively flat whereas the real curve on the stichting NICE website shows a very different curve.

Screenshots

image
image
image

Risk

The risk is that it the dashboard underrepresents the actual status. As essential decisions are to be made on this signal, it's a different kind of security vulnerability.

Governance

Calculation method for average hospital admissions on regional level unclear

On the regional level page of the dashboard, local data per "veiligheidsregio" is displayed. This includes average hospital admittances over the last 3 days. This is shown (in Dutch) as "Aantal mensen met COVID-19 dat per dag in een ziekenhuis is opgenomen. Dit cijfer is een gemiddelde van de gemelde ziekenhuisopnames over de afgelopen 3 dagen."
It is sourced as the daily statistics from the RIVM. On a national level, it can be derived how many patients got admitted to the hospital every day. For regional, it appears as if only cumulative data is published, and because of corrections it's unclear in which area those took place. As such, given the RIVM data file for cumulative cases per municipality, it is possible to calculate the difference between the days and as such get a daily value per region by adding all municipalities within a "veiligheidsregio" together. Using those daily changes, an average can be calculated.
Based on the data, it can't be derived how many patients got released from the hospital and how many admitted on a given day. However, calculations can be done in which it is assumed that the difference between the days are the admittances. Since it is possible for that difference to come back negative (which would translate to more people released than admitted), including those in the averages might match the description of "admittances" specifically.

I took the raw data file for cumulative cases per municipality (https://data.rivm.nl/covid-19/COVID-19_aantallen_gemeente_cumulatief.json), and used those to calculate the 3 day average on hospital admittances per "veiligheidsregio", which I compared to the data the dashboard returns for those same "veiligheidsregio's".
The initial method I used mostly matched the Corona Dashboard data: calculate the difference between the days, and use that to get a 3 day average. The alternative method had a lot more discrepancies compared by the data shown on the Dashboard: for days where the daily difference is lower than 0, set it to 0. This resulted in a lot more different averages.
The script for these calculations can be seen here for reference: https://github.com/boisei0/bddataplan-corona-locator-scripts/blob/3b55443dc8de778ffe71cf496817afbc9879ba04/compare_rivm_data_to_dashboard.py

Going back to the initial method, in situations where the average would have been negative with this method, it appears as 0.0 on the dashboard in the data. This appears to be the situation for 89 values, spread over 19 different "veiligheidsregio's".

Would you be able to comment on the calculation method used to show these values on the (regional) dashboard, and is the code generating the datasource that powers the dashboard publicised anywhere?

Governance

Values in "sewage water examinations" map are broken.

Describe the bug, issue or concern

The values in the "sewage water examinations" map, which shows the average amount of virus particles per 100.000 inhabitants per safety region are broken. They all show {{value}} instead of an actual value. This only happens on the English version of the dashboard. The Dutch version works fine.

E.g.

To Reproduce

Steps to reproduce the behavior:

  1. Go to '"Sewage water examination" in the English dashboard'
  2. Scroll down to '"Average number of virus particles per 100.000 inhabitants" map'
  3. Hover mouse of the map to see {{value}}
  4. See error

Expected behavior

Expected to see an actual value on the map "Average number of virus particles per 100.000 inhabitants", but instead saw {{value}}.

Screenshots

image

Desktop (please complete the following information):

  • OS: Windows 10 (64-bit)
  • Browser: Chrome
  • Version: 87

Additional context

No additional context.

Governance

Reproduction number dashboard has conflicting timestamps

  1. Currently, the value of the Reproduction number R is 1,33 and is given without a date on the main dashboard:
    image

  2. When clicking through, the top of the page suggests R is: "Value of september 18. Acquired september 22."

image

  1. The graph below leaves the date vague again, stating: "Most recent"

image

  1. When hovering over the graph, the most recent plotted R is 1,33 has a timestamp september 4, not september 18.

image

Observations / comments:

  • The timestamps in item 2 and 4 conflict with each other. I think perhaps item 2 was meant to say "Voorspelling gemaakt op 18 september".

  • Replacing "Most recent" in item 3 with the actual timestamp would be a whole lot more ovbious and clear.

  • I would even consider timestamping item 1 in the main dashboard, since the prediction for R always lags a number of weeks behind today, which is very counterintuitive for viewers, since it really doesn't say much about the current situation. It could be a lot higher or lower right now.

Large blobs in page loads, 60+% overhead

Describe the bug, issue or concern

I noticed that a significant amount of data is stored in the id=__NEXT_DATA__ script tag (some 515503 bytes, half a megabyte, out of 732471 total for https://coronadashboard.government.nl), and the data contained is mostly old (most recent timestamp = 2020-11-10T14:15:36Z).

It currently contains a significant, if not full, set of the daily infection data (accounting for >400kb of the 515kb), and I believe that it would be beneficial to either not include that data or include only the latest up-to-date values, and later request (and store locally) the historical data when required. This would save significantly on page load times, as the id=__NEXT_DATA__ script tag is positioned before the rest of the application javascript includes, blocking the page from going responsive.

It also would save a lot on total traffic, as this data is injected in effectively every page and is therefore not usually cached by the browser.

To Reproduce

check the size of the __NEXT_DATA__ script tag

Expected behavior

Only the required data is included in the pages __NEXT_DATA__ script tag

Environment

Desktop (please complete the following information):

  • OS: Debian 10.9
  • Browser: FireFox
  • Version 83.0

Governance

Normeer huisartsen van week naar dag

De meeste gegevens, zoals het aantal positief geteste patiënten, zijn per dag, per 100.000 inwoners:
Schermafbeelding 2020-07-02 om 21 51 50

Maar het "Aantal patiënten waarvan huisartsen COVID-19 vermoeden" is per week, per 100.000 inwoners:
Schermafbeelding 2020-07-02 om 21 51 36

Het is beter om die schatting door 7 te delen, zodat het per dag is.

Daarnaast is het zinnig om uit te leggen hoe die twee zich met elkaar verhouden. 117 / 7 = 16 per dag, terwijl 0.4 mensen positief getest zijn. Een oplettende lezer zal zich dan afvragen of huisartsen er een factor 40 naast zitten in hun inschatting, of dat er iets anders speelt.

Tot slot is het ook niet heel duidelijk verwoord of het hier alleen om alleen nieuwe verdachte gevallen gaat.

Better trend arrows on highly variable stats

Currently the Number of confirmed cases statistic is accompanied by an arrow describing what I presume is meant to be a trend. It appears to use the difference between the second-to-last data point and the last. Especially for this statistic, with a high variance and a weekly pattern, this isn't a good way to show the trend.

Right now, the statistic shows Tuesday's 9872, down 1327 from Monday. This is more or less the same steep dive the statistic had exactly a week before. Because of this, the arrow more accurately tells you the day of the week than the trend of this statistic.

I would suggest basing this on something less sensitive to this weekly cycle by, for example, using the 7-day average which effectively means comparing a Tuesday's data point with the Tuesday before it.

Bug: User tracking without consent

Describe the bug, issue or concern

Currently, some PII is sent to a piwik instance that is hosted by Microsoft when loading any page (e.g. my public IP, that is PII). Please disable this integration for users that have not given consent to user tracking.

To Reproduce

Steps to reproduce the behavior:

  1. Go to coronadashboard.government.nl
  2. Note that it includes links to statistiek.rijksoverheid.nl/piwik.php
  3. Also note that the IP of statistiek.rijksoverheid.nl ( 13.94.196.189 ) is owned by Microsoft (according to the ARIN whois database)

Expected behavior

No requests are made to external tracking systems without explicit user consent.

Screenshots

n/a

Desktop (please complete the following information):

  • OS: Debian 10.9
  • Browser: FireFox
  • Version 83.0

Additional context

It is my understanding that users cannot be tracked unless they have given their informed consent, or one of the other reasons specified by the GDPR. Unless you are basing your data gathering on those other pillars (in which case, please tell me so), explicit informed consent is required from the user before data gathering starts.

Governance

The label of the municipality map seems off when there is no data about its districts

Describe the bug, issue or concern

When you visit the page of a small municipality, the label of the municipality map does not have the label of what the map represents when there is no data about the districts of a municipality.

To Reproduce

Steps to reproduce the behavior:

  1. Go to https://coronadashboard.government.nl/gemeente/GM0184/positief-geteste-mensen
  2. Scroll down to 'Distribution of confirmed cases in municipality x' (in this example screenshot 1 & above stated url it is 'urk', but any small municipality will do)
  3. We see the label 'Distribution of confirmed cases in Urk', but it shows the safety region of Flevoland.

Expected behavior

Instead of the label showing 'Distribution of confirmed cases in Urk', it should state 'Distribution of confirmed cases in Flevoland'
But in a municipality like Amsterdam, where there is information about the various districts, the label obviously should still be displaying Amsterdam like in screenshot 2.

Screenshots

screenshot 1:
image
screenshot 2:
image

Tested on desktop:

  • OS: Debian
  • Browser: Firefox
  • Version 78.3.0ESR

Governance

Mention timeframe or date of measurement in first paragraph for all tiles

A lot of tiles have a description of the timeframe / date of the measurement (e.g. 'Aantal opnames per dag, gemiddeld over de afgelopen 3 dagen.').

Some don't however (e.g. 'Aantal positief geteste mensen per 100.000 inwoners per dag.').

I think it would be clear to mention the timeframe / measurement date in all tiles (in the paragraph beneath the title). We can adjust the last example to 'Aantal positief geteste mensen per 100.000 inwoners per dag, gemeten op 5 juni', for example.

Alert value for hospital admissionsvoor isn't scaled for municipalities/safety regions

The alert value is always 40, even though these are absolute numbers, so the alert value for municipalities should either be scaled down, or not be shown.

Municipality of Amsterdam:
image

The Netherlands:
image

Governance

Report case count B.1.1.7 (UK) and B.1.351 (South Africa) variants

Currently there are two major new SARS-CoV-2 variants spreading world wide:

  • B.1.1.7 (likely origin the United Kingdom)
  • B.1.351 (likely origin South Africa)

It would be very useful to have the case count in The Netherlands of these and other major variants integrated on the dashboard, ideally daily and per region.

On December 28th the RIVM reported:

The UK variant of the coronavirus (SARS-CoV-2) has been found in 11 people in the Netherlands so far: 5 people in the Amsterdam region, 5 people in the Rotterdam region and 1 person in the Nijmegen region.

Like both Henk-Jan Westeneng and Marino van Zelst pointed out, these variants are a paradigm shift. We almost have to thread them as a whole new virus, that spreads between 40% and 70% faster. In February it will most likely contain the majority of the cases and in March practically all new cases.

The public needs to be made aware of this support and understanding, and policy makers need to be able to track the developments of the SARS-CoV-2 variants precisely.

If the RIVM doesn't publish this information publicly yet, they need to be urged to start doing this as fast as possible.

Governance

Date axis for nursery homes is incorrectly displayed

Hi,

I was just checking the dashboard and the dates for nursery homes are incorrectly displayed, depending on the choice for the time period. For 'Toon alles' and 'Laatste 5 weken', it currently only displays until August 9th. For 'Laatste week', the data is correctly displayed.

Could you look into this? Please find a screenshot attached of what I see. I've tried this from both my laptop and phone and it shows the same results.

image

Governance

Bug in "klachten bij huisartsen".

Describe the bug, issue or concern

There's a bug in the "klachten bij huisartsen" section. The graph is always on "Toon alles". Putting it on "Laatste 5 waken" does nothing and keeps showing all. The problem is in both the English and Dutch version.

To Reproduce

Steps to reproduce the behavior:

  1. Go to '"Verloop over tijd" in "Klachten bij huisartsen"'
  2. Click on 'Toon alles'
  3. Click on 'Laatste 5 weken'
  4. Compare the two.

Expected behavior

'Laatste 5 weken' should only show the last 5 weeks and not everything.

Screenshots

image

Desktop (please complete the following information):

  • OS: Windows 10 (64-bit)
  • Browser: Chrome
  • Version: 87

Additional context

No additional context.

Governance

Feature request: Percentage positief per leeftijdsgroep

In het wekelijkse epidemiologische rapport wordt op pagina 34 het percentage positief geteste personen per leeftijdsgroep gemeld. Is het mogelijk dat dit wekelijkse percentage op het Dashboard wordt vermeld? Dit zou bijvoorbeeld een lijngrafiek kunnen zijn, met voor elke leeftijdsgroep een eigen kleur lijn, en op de x-as de week en op de y-as het percentage.

Met het sterk wisselende aantal testen is een percentage positief een stuk betere indicator dan het aantal positieve testen zelf.

Screenshot_317

Governance

Eemsdelta en Haaren

Municipalities merged

In the province of Groningen three municipalities merged: Appingedam, Delfzijl and Loppersum. Since the first of January 2021 the new municipality is called Eemsdelta.

However a search for Eemsdelta gives no result. The same for the map, Appingedam, Delfzijl and Loppersum are still separate municipalities.

Selection_024

For Haaren in Noord-Brabant the opposite happens, the municipality is now part of Boxtel, Oisterwijk, Vught and Tilburg.
Selection_025

Expected behavior

Eemsdelta should give a result, Appingedam, Delfzijl and Loppersum should not be listed.
Haaren should not be listed

Desktop:

  • OS: Ubuntu 20.04.1 LTS
  • Browser firefox
  • Version 84.0 (64-bit)
  • Browser Google Chrome
  • Version 87.0.4280.88 (Official Build) (64-bit)
  • Browser Chromium
  • Version 87.0.4280.88 (Official Build) snap (64-bit)

Additional context

Eemsdelta
Haaren

Governance

Sample data not included, application doesn't load without JSONs in place

Describe the bug, issue or concern

I wanted to investigate reports of incorrect application of gradients on the barScale component. Unfortunately, I can't seem to get the frontend to load without putting any data in place in public/json, but the README doesn't specify where to get this data from.

Would it be possible to include a set of sample data with the repository for development? Or otherwise describe how to get a copy of the current data from the production dashboard (ideally a yarn command).

To Reproduce

Steps to reproduce the behavior:

  1. Clone a fresh copy of the repository
  2. Run yarn as described in the README
  3. Run yarn dev as described in the README
  4. Open http://localhost:3000 and see error Error: ENOENT: no such file or directory, open '/Users/marten/src/nl-covid19-data-dashboard/public/json/NL.json'

Expected behavior

Dashboard opens with static sample data. It is acceptable if there is a manual step to put the sample data in place but then that needs to be described in the README.

Screenshots

image

Desktop (please complete the following information):

  • OS: macOS Catalina
  • Browser Firefox Developer Edition
  • Version 81

Additional context

n/a

Governance

Total number of tested individuals for a security region is incorrect

Describe the bug, issue or concern

As seen in the image screenshot, according to the dashboard, in 'Brabant-Noord', 1249 persons were tested the past week of which 13.55% was positive (the header in the left card implies that this number contains both positive and negative tests). However, on the left, the total number of persons is 9220. I would suggest either making it more implicit that the left card shows the total number of tests that were positive or make the card on the left show the actual number of tested persons.

To Reproduce

Steps to reproduce the behavior:

  1. Go to https://coronadashboard.rijksoverheid.nl/veiligheidsregio/VR21/positief-geteste-mensen#ggd.

Expected behavior

As I described above, either a header that makes it clear that these are the positive cases or the total number of tests displayed in the left card.

Screenshots

image

Desktop (please complete the following information):
Probably irrelevant but I'll still include it:

  • OS: Windows 10
  • Browser Firefox
  • Version 81.0.2

Additional context

None

Governance

Cosmetic: news article zooms differently when selected

About div with class "editorial-teaser__StyledTextOverlay-qje20s-0 jBURYC",
Normally when you mouse over, the image zooms.

When rightclicking it and then pressing escape, or in a more logical situation when clicking the image with the middle mouse button, the image stays zoomed in, but on mouse over the text becomes larger.

E.g.

To Reproduce

Steps to reproduce the behavior:

  1. Open Firefox version 85.0
  2. go to https://coronadashboard.rijksoverheid.nl/
  3. click the image in the div with class "editorial-teaser__StyledTextOverlay-qje20s-0 jBURYC"
  4. Apart from a new tab opening (part of the intended behaviour), the image stays zoomed in and now the text responds to mouseover by becoming larger

Expected behavior

The image will zoom out, or it will stay zoomed in; the text will not increase nor decrease in size.

Screenshots

https://imgur.com/a/yrfhOng

Desktop (please complete the following information):

  • OS: Windows 10 64-bit
  • Browser Firefox
  • Version 85.0

Additional context

None

Governance

Reported hospitalisations is not reflected correctly in the corresponding graph

Describe the bug, issue or concern

Reported hospitalisations is not reflected correctly in the corresponding graph

To Reproduce

Steps to reproduce the behavior:
1. Go to 'https://coronadashboard.rijksoverheid.nl/landelijk/ziekenhuis-opnames'
2. See error, in the left screen you see "ziekenhuisopnames" with a number (19-01-2021, 256), in the graph the day of yesterday is shown with the number 79, that's not even the number of "ziekenhuisopnames" of yesterday but it looks like the number of nursinghome care "verpleeghuiszorg". It's clearly not a correct number on the last shown day, the graph also feels not correct on the last day.

Expected behavior

Show the correct number for the day in the graph..

Screenshots

Screenshot_2021-01-19 Ziekenhuisopnames Dashboard Coronavirus Rijksoverheid nl

Desktop (please complete the following information):

  • OS: Win10
  • Browser Firefox
  • Version 84.0.2

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context

Add any other context about the problem here.

Governance

Don't display last two weeks of reproduction number and infectious people; they're inaccurate (underestimated)

The last two weeks of the reproduction number and at least the last week of the number of infectious people are hugely underestimated in the RIVM data. This misleads the public that things are going better, which is extremely dangerous.

Problem
The estimates of the reproduction number and infectious people are structurally too low.

On September 18th, the reproduction number for 11 September was estimated between 0.95 and 1.09. On September 25th, R was estimated at 1.27 (between 1.22 and 1.32), not even close to the previous confidence interval.

Screenshot_235

Screenshot_234

The same problem persisted last week:
Screenshot_223
Screenshot_224

Infectious people has the same problem 104 thousand people reported for September 18th on 22 September, and 145 thousand reported on September 29th for the same date:
Screenshot_230
Screenshot_229

You can use the Wayback Machine to compare for yourself:

Suggested actions

  • Immediately stop displaying both the last two weeks of the repoduction number, and the last week of the number of infectious people
  • Upstream this issue to the RIVM, and ask if they can improve their predictions and confidence interval. If that's not possible, stop publishing this inaccurate data.

This issue succeeds #410 (in which the same issue was reported and was closed without action). Please consider prioritizing this, since inaccurate data hugely misleads the public, which can cause dangerous behavior and undermines trust in the government, the OMT and the RIVM.

Feature Request: Show graph on vaccination statistics

Hi,

It would be nice to see a graph on the vaccination statistics section instead of only a number.

Please include in the graph:

Number of vaccines in stock
Number of first vaccinated people
Number of fully vaccinated people

Would also be nice to provide some kind of forecast lines

Suggestion: Make clear which version/build/commit is published

Describe the bug, issue or concern

It's pretty interesting to follow along with the commits in this repro; but it can be hard to clearly identify which version, build or commit is published on coronadashboard.government.nl / coronadashboard.rijksoverheid.nl.

To Reproduce

N/A

Expected behavior

Being able to find out which commit, build of version is published. Possible right under the last updated string, as a comment up top in 'view source'-pannel or by calling a JS-function.

Screenshots

N/A

Desktop (please complete the following information):
N/A

Smartphone (please complete the following information):
N/A

Additional context

N/A

Governance

Gemeentes not opening on Android Chrome

Describe the bug, issue or concern

The Gemeentes map doesn't work like it should on Android Chrome,
it should send you to the page where you can see all the statistics from that specific "Gemeente" like on Windows Chrome

To Reproduce

  • go to "coronadashboard.rijksoverheid.nl" on android Chrome
  • click on "Gemeentes"
  • then try to click a "Gemeente" it doesn't matter which one you click it seems to happen to all of them
  • it normally should show the statistics of that "Gemeente" but it stays on the selector map but it only highlights them and shows there tooltip

Expected behavior

A clear and concise description of what you expected to happen.

Screenshots

image
^ desktop

Screenshot_20200923-150422_Chrome
^ mobile(Android - Chrome)

Desktop (please complete the following information):

  • OS: WIndows 10
  • Browser Chrome
  • Version 85.0.4183.102

Smartphone (please complete the following information):

  • Device: Galaxy S20+
  • OS: Android 10
  • Browser Chrome
  • Version 85.0.4183.120

Additional context

hopefully its clear enough

Governance

graph for sewage measurement for Oldenzaal is flashing

Describe the bug, issue or concern

The graph for sewage measurement for the municipality Oldenzaal is flashing

To Reproduce

Go to https://coronadashboard.rijksoverheid.nl/regio?regio=GM0173 and check section 'Rioolwatermeting in Oldenzaal'

Suggestions

Could it be related to the fact that 2 sewage measurement plants (Tweede Exloermond (3023) and Oldenzaal (5012)) are situated in Oldenzaal?
See also: https://innouveau.com/projecten/corona/kaart/#/?city=Oldenzaal

Suggestion: Heatmap is currently badly representing the amount of infections

Describe the bug, issue or concern

Currently the heatmap (choropleth map) is currently showing different colors between 0 and 30 infections per 100.000 people even though there are places with 100+ infections per 100.000 people.

I suggest using a scale between 0 and 100 to better represent the data in the choropleth map.

To Reproduce

  1. Go to https://coronadashboard.rijksoverheid.nl/landelijk/positief-geteste-mensen
  2. Scroll to "Distribution of confirmed cases in the Netherlands"

Expected behavior

I would expect the map to at least use color changes for the distribution between 0 and 100+ cases instead of 0 and 30+.

Screenshots

image

Governance

Roadmap

Is there something like a roadmap? Because you're busy on other stuff, and having some sort of list of what's coming will prevent multiple issues about the same thing :)

Don't display last two weeks of reproduction number and infectious people; they're inaccurate (underestimated)

On September 15th the Dashboard was updated with RIVM data, stating that the reproduction number would be in the confidence interval between 0,92 and 1,07 on September 4th.
Screenshot_223

Today (September 22th) the reproduction number was updated for September 4th: 1,33, with the confidence interval ranging from 1,26 to 1,40. Nowhere near the predicted confidence interval.
Screenshot_224

A downward bias toward recent data can be seen for several weeks. This is heavily misleading, since it suggests it's going for all dates for which an effective R isn't calculated yet.

Aside from removing it from the dashboard, I would also heavily recommend upstreaming this issue to the RIVM to improve their data calculation, or at least be more honest about the vast uncertainty of these estimates/predictions.

Slow loadtimes for resources, and regular 502s

Describe the bug, issue or concern

On my laptop, I see very slow load times of the assets of effectively all pages. Common load times are just over exactly 1m in time-to-first-byte for resources, and I otherwise also often see 502s in the console. Note that the secure connection is established, and after that

This happens for both my browser and curl cli executions. Weirdly enough, my mobile phone (through wifi, same external IP) does not have this issue.

some references from 502-errors
 Reference #97.920a1602.1605638330.6acc184 
 Reference #97.a30a1602.1605638330.1969aaf5 
 Reference #97.a30a1602.1605638331.1969cad0 
output of `curl https://coronadashboard.government.nl --verbose > index.html`
* Rebuilt URL to: https://coronadashboard.government.nl/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 2.16.186.138...
* TCP_NODELAY set
* Connected to coronadashboard.government.nl (2.16.186.138) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [6953 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=NL; L='s-Gravenhage; O=Ministerie van Volksgezondheid, Welzijn en Sport; OU=Directie Communicatie; CN=coronadashboard.government.nl
*  start date: Aug 20 13:20:03 2020 GMT
*  expire date: Aug 20 13:20:03 2021 GMT
*  subjectAltName: host "coronadashboard.government.nl" matched cert's "coronadashboard.government.nl"
*  issuer: C=NL; O=KPN B.V.; CN=KPN PKIoverheid Server CA 2020
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x55e9ac7a1ea0)
} [5 bytes data]
> GET / HTTP/1.1
> Host: coronadashboard.government.nl
> User-Agent: curl/7.52.1
> Accept: */*
> 
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
} [5 bytes data]
  0     0    0     0    0     0      0      0 --:--:--  0:00:59 --:--:--     0< HTTP/2 200 
< content-type: text/html
< last-modified: Wed, 11 Nov 2020 15:54:21 GMT
< etag: W/"5fac092d-b1534"
< expires: Thu, 12 Nov 2020 11:35:04 GMT
< cache-control: max-age=300
< content-security-policy: default-src 'self' statistiek.rijksoverheid.nl; img-src 'self' statistiek.rijksoverheid.nl data:; style-src 'self' 'unsafe-inline'; script-src 'self' statistiek.rijksoverheid.nl;
< referrer-policy: origin
< x-content-type-options: nosniff
< x-frame-options: SAMEORIGIN
< x-xss-protection: 1; mode=block
< cache-control: no-cache, public
< date: Tue, 17 Nov 2020 19:30:58 GMT
< strict-transport-security: max-age=15768000 ; preload
< 
{ [2434 bytes data]
100  5284    0  5284    0     0     87      0 --:--:--  0:01:00 --:--:--  1082* Curl_http_done: called premature == 0
100  709k    0  709k    0     0  12035      0 --:--:--  0:01:00 --:--:--  175k
* Connection #0 to host coronadashboard.government.nl left intact

To Reproduce

I've started noticing the issue about a week ago.

Expected behavior

Page loads as fast as when I use my phone.

Screenshots

n/a

Desktop (please complete the following information):

  • OS: Debian 10.9
  • Browser: FireFox 83.0
  • Browser: curl 7.52.1

Additional context

I've tried disabling HTTP2, but that didn't fix the slow load times.

Governance

Average doesn't match constituents

Describe the bug, issue or concern

Average doesn't seem to be correct:

image

Dates showed on the tooltip:

  • Zetten + Valburg: 25 september
  • Average: 21 september

To Reproduce

Go to https://coronadashboard.rijksoverheid.nl/gemeente/GM1734/rioolwater

Expected behavior

Average is the average of the RWZI locations

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser: Chrome
  • Version: 85

Governance

Location of critical value of bar scales in code has risk of being overridden in translations

The critical value, in the code referenced as both “signaalwaarde” and “kritiekeWaarde”, is sourced in the locale. The default value is present in the Dutch locale. If left empty in translations, the Dutch value is used to override the translation. However, if it erroneously isn’t left empty and the value differs from the original, the interpretation strongly changes.

Should values that act as constants and don’t change upon translating be present in a locale in the first place, rather than be in file with constants? It would also improve the transparency if constants like these are in an easy place to find, rather than having to study the code in order to find them. Furthermore, storing numbers as numerical value rather than as string removes the need for Number(...) calls in the code and reduces errors caused by accidental typos slipping into the text values.

At the moment of writing, the critical value for IC admittances is located at line 102 in the Dutch locale (value 10):

"translation": "10",

and at line 98 in the English locale (value left blank):

Governance

Missing header 'verpleeghuizen'

Describe the bug, issue or concern

The last three graphs on the left side of the homepage don't have their own header, but are a part of 'Vroegsignalering'.
The last three graphs should have have their own header, something like 'verpleeghuizen'

To Reproduce

Steps to reproduce the behavior:

  1. Go to https://coronadashboard.rijksoverheid.nl/
  2. Scroll down.

Expected behavior

The last three graphs should have have their own header, something like 'verpleeghuizen'

Screenshots

image

Warning "landelijke lockdown tot 2 maart" can be interpreted in two ways

Describe the bug, issue or concern

On top of the dashboard is currently a warning with the text:
Er geldt een landelijke lockdown tot 2 maart.

This can be interpreted into two ways:

  • Until 2 march, excluding 2 march
  • Until 2 march, including 2 march

It is better to use a more clear language to indicate what interpretation is correct.

To Reproduce

Steps to reproduce the behavior:

  1. Open the dashboard
  2. See the warning in the header

Expected behavior

Use more clear language, for example:
Er geldt een landelijke lockdown tot en met 2 maart.

This is consistent with:
https://www.rijksoverheid.nl/onderwerpen/coronavirus-covid-19/vraag-en-antwoord/persconferentie-coronavirus-2-februari-in-eenvoudige-taal:
Maatregelen tot en met minimaal 2 maart

https://www.rijksoverheid.nl/onderwerpen/coronavirus-covid-19/algemene-coronaregels/kort-overzicht-coronamaatregelen
Lees hier wat geldt op dit moment tot en met ten minste 2 maart 2021

Screenshots

Screenshot 2021-02-08 at 12 22 51

Governance

Unable to select veiligheidsregio from Firefox or chrome when running on android

I am on my holiday. Resources are not optimal. Screenshot should explain everything.

Describe the bug, issue or concern

A clear and concise description of what the bug, issue or concern is is.

E.g.

See subject

To Reproduce

Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior

A clear and concise description of what you expected to happen.

I expect to be able to select a veiligheidsregio.

Screenshots

If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context

Add any other context about the problem here.

Governance

Screenshot_20200909-212313_Chrome

Dashboard shows no indication/warning when data is outdated

The top of the page shows the last update time ("Laatst bijgewerkt: 15:01, 13 juli 2020"). This inspires confidence that all data shown is up to date. This however does not seem to be the case. For example at the time of writing, the last update of the (apparently weekly) 'rioolwatermeting' is June 22, which is three weeks ago.

This is potentially dangerous for people basing their decisions on dashboard data without expanding each panel and checking the last update time.

Suggestion for fix: add a warning icon or color to each panel to signal when data hasn't been updated recently. The definition of 'recently' can differ for each panel (daily, weekly).

Cosmetic: Disable text selection when dragging readings in graphs

Describe the bug, issue or concern

When you slow drag/swipe the readings horizontally in a line graph on a smartphone, it can activate default dragging behavior of the browser. It wants to select the text of the graph.

To Reproduce

  1. On a smartphone (iPhone) go to the Corona Dashboard.
  2. Find a line graph with text inside, such as 'Verloop over tijd'.
  3. Slowly (elder-mode: 1 sec per stop) touchdrag the cursor to another stop.
  4. Sometimes the nearby text is selected and the context pop-up (copy, share) appears.

Expected behavior

No text is selected while dragging over the graph.

I don't know much about web UI, but I believe there is a CSS prop to cancel text selection.

Screenshots

image

Smartphone (please complete the following information):

  • Device: iPhone 8
  • OS: iOS 14.0.1
  • Browser: Safari
  • Version: 14

Additional context

Governance

Number of positive tests reports net increase per day, but not gross number of new positive tests per day

Hi!

I noticed that the dashboard reports the number of new positive tests per day and describes this as "Dit getal laat zien van hoeveel mensen gisteren per 100.000 inwoners gemeld is dat ze positief getest zijn en COVID-19 hebben."

However, the number on the dashboard is actually the net increase of positive tests per day. For example, the gross number of positive tests on July 15 is 117 while there are also 11 corrections for earlier days, leading to a net increase of 106. The discrepancy is even larger for July 14, as the net increase was 53 while the gross increase was 97 (and 44 corrections for earlier days). The description of this indicator is therefore not completely accurate in my opinion. Also, it might be better to actually report the gross increase of positive tests per day as it provides a more current indicator of the current dynamics of the infection rate.

Would you consider either changing the description or preferably, report both gross and net increase?

Thank you for your consideration!

Marino van Zelst

Suggestion: add additional GGD testing measurements

Describe the bug, issue or concern

I saw the new PR #338 and was wondering whether further expansion would be possible and whether it is already being looked at internally.

I think it would be very helpful to see the number of hours between test and result as a proxy for test capacity, this could be on a moving average (last three days) basis.

Extending this, a direct test availability could also be included, say X% of spots taken in the next 2 days (or however far ahead GGD can plan appointments for now).

Both of these could be included on the regional/municipal level as well, if available.

Governance

Infection counts don't add up

The new infections counts per veiligheidsregio do not add up to the national count on virtually every single day. Today (2020/07/14) the discrepancy is especially large (93 versus 53). How can we effectively fight this virus if we cannot even get simple numbers right??

kritiekeWaarde is defined for infected people in nursing homes, but not present in the component

The signal value for people infected in nursing homes is defined in the locale file. However, it does not show on the dashboard as it hasn't been added to the component. Awaiting the roadmap mentioned in #90, it should be added to the component if only for the time being, as after all the value has been defined in the locale already.

Governance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.