diff --git a/docs/about/about.md b/docs/about/about.md index e8c78205..9b82986e 100644 --- a/docs/about/about.md +++ b/docs/about/about.md @@ -1,7 +1,7 @@ --- title: About the dGC reviewers: Dr Marcus Baw, Dr Anchit Chandran -published: true +audience: all --- # About the UK RCPCH Growth Chart API Project diff --git a/docs/about/acknowledgements.md b/docs/about/acknowledgements.md index e788c4bb..bc1afb0a 100644 --- a/docs/about/acknowledgements.md +++ b/docs/about/acknowledgements.md @@ -1,6 +1,7 @@ --- title: Acknowledgements reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: all --- # Acknowledgements diff --git a/docs/about/awards-press-blogs.md b/docs/about/awards-press-blogs.md index 47af9828..02500db4 100644 --- a/docs/about/awards-press-blogs.md +++ b/docs/about/awards-press-blogs.md @@ -1,6 +1,7 @@ --- title: Awards, Press, Blogs reviewers: Dr Marcus Baw +audience: all --- # Awards, Press, Blogs, and other Mentions of the dGC Project @@ -17,7 +18,7 @@ docs/_assets/_snippets/htn-award.md ## Blogs -["Royal Colleges 3.0" - Best Practice As Code](https://marcus-baw.medium.com/royal-colleges-3-0-best-practice-as-code-7065bce821a7) +["Royal Colleges 3.0" - Best Practice As Code](https://marcus-baw.medium.com/royal-colleges-3-0-best-practice-as-code-7065bce821a7) Marcus Baw's discussion of what it means for Royal Colleges to be developing in-house open-source software, and how this might be the future of how Royal Colleges interact with the wider clinical world – distributing “Best Practice As Code”. [August 2020 - RCPCH announces forthcoming digital growth charts for parents and families](https://www.rcpch.ac.uk/news-events/news/rcpch-announces-forthcoming-digital-growth-charts-parents-families) @@ -34,6 +35,6 @@ Marcus Baw's discussion of what it means for Royal Colleges to be developing in- ## Videos -[Understanding the RCPCH Digital Growth Charts Project - 35 minute YouTube video](https://www.youtube.com/watch?v=TRKd38d7_1I) +[Understanding the RCPCH Digital Growth Charts Project - 35 minute YouTube video](https://www.youtube.com/watch?v=TRKd38d7_1I) - \ No newline at end of file + diff --git a/docs/about/contact.md b/docs/about/contact.md index 7a9edae1..1e1fad9b 100644 --- a/docs/about/contact.md +++ b/docs/about/contact.md @@ -1,6 +1,7 @@ --- title: Contact the RCPCH team reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: all --- # Contact diff --git a/docs/about/team.md b/docs/about/team.md index fe4c9883..334cb288 100644 --- a/docs/about/team.md +++ b/docs/about/team.md @@ -1,6 +1,7 @@ --- title: dGC Team reviewers: Dr Marcus Baw, Prof Tim Cole, Dr Anchit Chandran +audience: clinicians, health-staff --- # Digital Growth Charts Team Members @@ -26,15 +27,16 @@ RCPCH internal project staff provided invaluable support from project concept, t - **Jo Ball**, Design and Brand Manager, Content and Brand Team, RCPCH. - **Richard Burley**, Chief Digital Officer, RCPCH. - **Alex Brown**, Head of Commercial and Corporate Partnerships, RCPCH. -- **Joanne Hatton**, Enterprise Systems Manager, RCPCH, London. +- **Susan Hansford**, , Digital Product Manager, RCPCH. +- **Joanne Hatton**, Enterprise Systems Manager, RCPCH. - **Jonathan Miall**, Director of Membership and Development, (now ret'd from RCPCH). - **Rachel McKeown**, Policy Lead & Project Manager, RCPCH (now left RCPCH). - **Kirsten Olson**, Website Content Manager, Content and Brand Team, RCPCH. - **Vicki Osmond**, Health Policy Assistant, RCPCH. -- **Andrew Palmer**, Head of Information Systems, RCPCH, London (now left RCPCH). +- **Andrew Palmer**, Head of Information Systems, RCPCH (now left RCPCH). - **Adele Picken**, Data Protection Officer, RCPCH -- **Olly Rice**, Infrastructure and Operations Manager, RCPCH, London. -- **Magdalena Umerska**, Digital Product Manager, RCPCH. +- **Olly Rice**, Infrastructure and Operations Manager, RCPCH. +- **Magdalena Umerska**, Digital Product Manager, RCPCH (now left RCPCH). ## Development Team @@ -45,4 +47,5 @@ The development team was drawn from RCPCH internal staff, RCPCH members with sof - **Dr Anchit Chandran**, Doctor and Software Developer, London. - **Dr Simon Chapman**, Consultant in Paediatric Endocrinology, King's College Hospital, London. - **Prof Tim Cole**, Professor of Medical Statistics, Population, Policy & Practice Department, UCL GOS Institute of Child Health, London. +- **Danny Cowen**, Medical Student, Imperial College London. - **Dr Charles van Lennep**, Paediatrician in Training, London. diff --git a/docs/clinician/chart-information-health-staff.md b/docs/clinician/chart-information-health-staff.md index 51443a87..6952d813 100644 --- a/docs/clinician/chart-information-health-staff.md +++ b/docs/clinician/chart-information-health-staff.md @@ -1,6 +1,7 @@ --- title: Information for Health Staff reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: clinicians, health-staff --- # Chart information for Health staff diff --git a/docs/clinician/date-age-calculations.md b/docs/clinician/date-age-calculations.md index 498a6c3b..41e92403 100644 --- a/docs/clinician/date-age-calculations.md +++ b/docs/clinician/date-age-calculations.md @@ -1,6 +1,7 @@ --- title: Date and Age Calculations reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: clinicians, health-staff, statisticians --- # Date and Age Calculations diff --git a/docs/clinician/faqs-for-clinicians.md b/docs/clinician/faqs-for-clinicians.md index 75e8b590..0a0de965 100644 --- a/docs/clinician/faqs-for-clinicians.md +++ b/docs/clinician/faqs-for-clinicians.md @@ -1,6 +1,7 @@ --- title: FAQs for Clinicians reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: clinicians, health-staff --- # Frequently Asked Questions for Clinicians @@ -33,7 +34,7 @@ The process of integrating the API into an existing EPR product is technically s **A**: Yes, you can use the demo site at to evaluate the service. -## Q: If we have a calculated centile from the API, then why do we need the traditional 'curved-lines' growth charts at all? +## Q: If we have a calculated centile from the API, then why do we need the traditional 'curved-lines' growth charts at all? **A**: Good question. Maybe, this style of chart will no longer be needed in the future. Perhaps they will be replaced by SDS charts, which would allow us to view height, weight, head circumference, and BMI all on one chart too! diff --git a/docs/clinician/growth-references.md b/docs/clinician/growth-references.md index 4f93b84b..c0ad6c2a 100644 --- a/docs/clinician/growth-references.md +++ b/docs/clinician/growth-references.md @@ -1,6 +1,7 @@ --- title: Reference Data reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: clinicians, health-staff --- # Growth Chart References diff --git a/docs/clinician/how-the-api-works.md b/docs/clinician/how-the-api-works.md index c73a2b5b..27b5485a 100644 --- a/docs/clinician/how-the-api-works.md +++ b/docs/clinician/how-the-api-works.md @@ -1,6 +1,7 @@ --- title: How the API Works reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: clinicians, health-staff, statisticians --- # How the API Works diff --git a/docs/developer/api-docker.md b/docs/developer/api-docker.md index ad2ef7cd..833452fb 100644 --- a/docs/developer/api-docker.md +++ b/docs/developer/api-docker.md @@ -1,6 +1,7 @@ --- title: Docker development reviewers: Dr Marcus Baw, Dr Sean Cusack, Dr Anchit Chandran +audience: developers --- # Developing locally in a Docker container diff --git a/docs/developer/api-python.md b/docs/developer/api-python.md index 74d8593f..eb6f8f4c 100644 --- a/docs/developer/api-python.md +++ b/docs/developer/api-python.md @@ -1,6 +1,7 @@ --- title: Python development reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- # Running locally with Python @@ -179,7 +180,7 @@ activate.bat You should then see the name of your virtual environment prepend your prompts e.g. ```console -(env) C:\Users\...\digital-growth-charts-server\env\Scripts> +(env) C:\Users\...\digital-growth-charts-server\env\Scripts> ``` Now, go back to the root directory @@ -222,4 +223,4 @@ There may be other messages at the end of the output for other processes which r If you need to vary any of the parameters passed, you can either: 1. Modify the start-up script -2. Manually pass the commands to the shell, using the commands in the start-up script as a guide \ No newline at end of file +2. Manually pass the commands to the shell, using the commands in the start-up script as a guide diff --git a/docs/developer/api-testing.md b/docs/developer/api-testing.md index ac5e0ee9..87985957 100644 --- a/docs/developer/api-testing.md +++ b/docs/developer/api-testing.md @@ -1,6 +1,7 @@ --- title: Testing the API reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- # Testing the API diff --git a/docs/developer/contributing.md b/docs/developer/contributing.md index 05af75d0..7e034d3d 100644 --- a/docs/developer/contributing.md +++ b/docs/developer/contributing.md @@ -1,6 +1,7 @@ --- title: Contributing reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- ## Contributing @@ -10,15 +11,15 @@ We're a friendly bunch, and happy to chat. You can get in touch with the primary ### How to contribute - Fork the repository to your own GitHub account. - + - Set up your development environment (ideally using our instructions [here](api-python.md) for maximum compatibility with our own development environments). - + - Ideally, you should discuss the proposed change with our team, because we can only accept pull requests with an accepted need for a new feature or fix. - + - We can discuss with you our recommendations for implementation of the new feature, for maximum potential 'mergeability' of your PR. - + - Once you are ready to show us your work, create a pull request on our repo, detailing what the change is and details about the fix or feature. PRs that affect the calculations or any other 'mission critical' part of the code will need suitable tests which we can run. - + - We will endeavour to review and merge in a reasonable time frame, but will usually not merge straight into `master`, rather we will merge into an upcoming release branch. ### Coding style @@ -27,7 +28,7 @@ We are not Python experts, but encourage use of Python best practices where poss Some helpful sources of information on Python style are: -- +- - ## Intellectual Property (IP) of contributions diff --git a/docs/developer/faqs-for-developers.md b/docs/developer/faqs-for-developers.md index 0287bae7..5a22412e 100644 --- a/docs/developer/faqs-for-developers.md +++ b/docs/developer/faqs-for-developers.md @@ -1,6 +1,7 @@ --- title: FAQs for Developers reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- # FAQs for Developers diff --git a/docs/developer/rcpchgrowth-cli.md b/docs/developer/rcpchgrowth-cli.md index 2365d14f..75d91209 100644 --- a/docs/developer/rcpchgrowth-cli.md +++ b/docs/developer/rcpchgrowth-cli.md @@ -1,6 +1,7 @@ --- title: RCPCHGrowth CLI reviewers: Dr Marcus Baw, Dr Simon Chapman +audience: developers --- # Developing the RCPCH CLI tools diff --git a/docs/developer/rcpchgrowth.md b/docs/developer/rcpchgrowth.md index e960b5f8..e148b5bf 100644 --- a/docs/developer/rcpchgrowth.md +++ b/docs/developer/rcpchgrowth.md @@ -1,6 +1,7 @@ --- title: RCPCHGrowth library reviewers: Dr Simon Chapman, Dr Anchit Chandran +audience: developers --- ## Overview diff --git a/docs/developer/react-client.md b/docs/developer/react-client.md index 3530d44e..b8a222da 100644 --- a/docs/developer/react-client.md +++ b/docs/developer/react-client.md @@ -1,7 +1,7 @@ --- title: React Client reviewers: Dr Simon Chapman, Dr Marcus Baw - +audience: developers --- ## Developer documentation diff --git a/docs/developer/react-component.md b/docs/developer/react-component.md new file mode 100644 index 00000000..59771b58 --- /dev/null +++ b/docs/developer/react-component.md @@ -0,0 +1,338 @@ +--- +title: React Chart Component +reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: developers +--- + +# React Chart Component + +{% set repository_name="rcpch/digital-growth-charts-react-component-library" -%} + +[![Github Issues](https://img.shields.io/github/issues/{{ repository_name }})](https://github.com/{{ repository_name }}/issues) +[![Github Stars](https://img.shields.io/github/stars/{{ repository_name }})](https://github.com/{{ repository_name }}/stargazers) +[![Github Forks](https://img.shields.io/github/forks/{{ repository_name }})](https://github.com/{{ repository_name }}/network/members) +[![Github Licence](https://img.shields.io/github/license/{{ repository_name }})](https://github.com/{{ repository_name }}/blob/live/LICENSE) +[![NPM Publish](https://github.com/{{ repository_name }}/actions/workflows/main.yml/badge.svg)](https://github.com/{{ repository_name }}/actions/workflows/main.yml) + +[:octicons-mark-github-16: GitHub repository](https://github.com/{{ repository_name }}) + +[:material-web: Online Demo](https://growth.rcpch.ac.uk/) + +![height-chart-girl-component](../_assets/_images/height-chart-girl-component.png) + +!!! success "Use our Growth Chart React Component" + The dGC React Component is the recommended way to display Digital Growth Charts to end users. We have built the component to be easy to integrate into existing web-based views, even if your stack does not currently use React. You can use the component as-is in a React app, or include it in plain HTML or any other JavaScript framework. + + Displaying growth charts is a complex task, and we have built the component to make it as easy as possible for developers to display charts correctly. The component is designed to be customisable, so you can change the look and feel to match your app. + +## Background + +### React.js + +React is a popular UI library for Javascript. It has endured well and remains a popular choice for developers. Importantly, unlike some other Javascript frameworks which are primarily designed for Single Page Applications, React doesn't expect to have the entire webpage to itself. It can be used as a small component in any other web page, even if the main framework being used is completely different. + +!!! question "Tell us what you think" + Let us know what you think of our design decisions, on this or any other area of the dGC Project, by chatting to us on our [dGC Forum](https://openhealthhub.org/c/rcpch-digital-growth-charts/) :fontawesome-brands-discourse:, or our RCPCH Community [Signal chat channel :fontawesome-brands-signal:](https://signal.group/#CjQKIAjLf5lS9OZIAI6lsJKWP1LmeJXkUW_fzZH1ryEw3oFEEhBH-4F7WnlyYjKerjfzD6B0) + +### What about other frameworks/UI libraries? + +If you need us to develop a charting component in a different language or framework, we may be able to do this with you or your company. We would need to discuss the requirements and quote for this service. You should be aware that all such RCPCH-developed artefacts will also be open source. We ensure the licensing of open source components is compatible with commercial use. + +!!! note "Contact us" + To contact us for this service, email . + +## Getting started + +`git clone` the repo +```console +git clone https://github.com.rcpch/{{ repository_name }} +``` + +Install dependencies +```console +npm install +``` + +Run Storybook to view the component in isolation +```console +npm run storybook +``` + +### Running the Charts Package locally + +To run the package locally alongside the React client, there are some extra steps. Since the Chart library and the React client both use React, the Charts will throw an error if you import them in the ```package.json``` of your app from a folder on your local machine. + +For example, in your React app: + +```json +"dependencies": { + "@rcpch/digital-growth-charts-react-component-library": "file:/Users/FooBar/Development/react/component-libraries/digital-growth-charts-react-component-library", +} +``` + +This causes a problem as it leads to 2 versions of React running. To overcome this, in your application: + +```console +cd node_modules/react +npm link +``` + +In the root folder of your Chart library: + +```console +npm link react +``` + +Repeat the same for ```react-dom``` ensuring all the package versions are the same for your app and the library. The library currently uses version `17.0.2` of React and React-dom. + +Now, you can view your changes made live in your app: + +```console +npm run build +``` + +Refresh your app. + +If the invalid hooks error persists, an alternative method is to add the following line to ```package.json``` in the library. This removes the node_modules from the build folder: + +```json +"scripts": { + "postinstall": "rm -rf node_modules", + ... + }, +``` + +## Structure + +This library has been written in Typescript. The main component is `RCPCHChart`, which takes the following `props`. Note that each component will only render a single chart type, so if you wanted to render a weight *and* a height chart, these must be done as two separate instances of the component. We find that on modern screens you can render two charts side-by-side, but on smaller screens, you may wish to render one chart at a time, perhaps in tabs for height, weight, BMI, head circumference etc, as in our [demo client](https://growth.rcpch.ac.uk/). + +### RCPCHChart component + +??? note "`RCPCHChart` component props" + ```js + { + title: string, + subtitle: string, + measurementMethod: 'height' | 'weight' | 'ofc' | 'bmi', + sex: 'male' | 'female', + measurementsArray: [Measurement], + reference: 'uk-who' | 'turner' | 'trisomy-21', + width: number, + height: number, + chartStyle: ChartStyle, + axisStyle: AxisStyle, + gridlineStyle: GridlineStyle, + centileStyle: CentileStyle, + sdsStyle?: SDSStyle; + measurementStyle: MeasurementStyle + midParentalHeightData?: MidParentalHeightObject, + enableZoom?: boolean, + chartType?: 'centile' | 'sds', + enableExport: boolean, + exportChartCallback: function(svg: any), + clinicianFocus?: boolean; + } + ``` + +### Measurement interface + +The `Measurement` interface is structured to reflect the JSON `Measurement` object which is returned by the API. The `RCPCHChart` component uses the `reference` prop to determine which chart to render. So far, 3 references are supported: UK-WHO (`uk-who`), Turner Syndrome (`turner`) and Down Syndrome (`trisomy-21`). The reference data for the centiles are included in the library in plottable format in the `chartdata` folder. + +!!! tip + **You simply need to pass JSON from the dGC API directly in to the component asan array of `Measurement` JSON objects. The component 'knows' how to render this correctly. You don't need to parse, restructure, or even understand the JSON returned from the API: just pass it directly to the component inside an array containing one or more `Measurement` objects.** + +The styling components allow the user to customise elements of the chart. Chart styles control the chart and the tooltips. + +!!! note "Styling options available through `ChartStyle`" + ```js + interface ChartStyle{ + backgroundColour?: string, + width?: number, + height?: number, + padding?: requires {left?: number, right?: number, top?: number, bottom?: number}, + titleStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} + subTitleStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'},, + tooltipBackgroundColour?: string, + tooltipStroke?: string, + tooltipTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} + termFill?: string, + termStroke?: string, + infoBoxFill?: string, + infoBoxStroke?: string + infoBoxTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} + toggleButtonInactiveColour: string // relates to the toggle buttons present if age correction is necessary + toggleButtonActiveColour: string + toggleButtonTextColour: string + } + ``` + +## Styling + +Note for the tooltips and infobox text sizes, these are strokeWidths, not point sizes as the text here is SVG. + +### Axis Styles + +??? note "Axis styles control axes and axis labels" + ```js + interface AxisStyle{ + axisStroke?: string, + axisLabelTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} + tickLabelTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} + } + ``` + +### Gridline Styles + +??? note "Gridline styles allow/hide gridlines and control line width, presence of dashes, colour" + ```js + interface GridlineStyle{ + gridlines?: boolean, + stroke?: string, + strokeWidth?: number, + dashed?: boolean + } + ``` + +### Centile Styles + +??? note "Centile styles control the width and colour of the centile and SDS lines" + ```js + interface CentileStyle{ + sdsStroke?: string, + sdsStrokeWidth?: string, + centileStroke?: string, + centileStrokeWidth?: number, + delayedPubertyAreaFill?: string, + midParentalCentileStroke?: number; + midParentalCentileStrokeWidth?: number; + midParentalAreaFill?: string; + } + ``` + +### SDS Styles + +SDS styles control the colour and width of the SDS lines. As all measurement methods are rendered on a single chart, the user is offered the option of different colours for each measurement method (height, weight, head circumference(OFC) and body mass index (BMI)). If no SDS style is supplied, the centile line colour is used with an opacity applied to each measurement. + +??? note "SDS Styles" + ```js + interface SDSStyle { + lineStrokeWidth?: number; + heightStroke?: string; + weightStroke?: string; + ofcStroke?: string; + bmiStroke?: string; + } + ``` + +### Measurement Styles + +Measurement styles control the plotted data points: colour, size and shape. Corrected ages are always rendered as crosses. Circles for chronological ages are preferred. On the SDS charts, measurement points are grey by default, with the measurement method in focus highlighted by rendering as a line. Points which are not highlighted can be emphasised on mouse hover, with the highlighted colour being set by the `highlightedMeasurementFill` prop. + +??? note "Measurement Styles" + ```js + interface MeasurementStyle{ + measurementFill?: string, + highLightedMeasurementFill?: string; + } + ``` + +### Mid-Parental Height + +`midParentalHeightData`: This is the return value from the RCPCH API and takes the structure: + +??? note "`midParentalHeightData`" + ```js + export interface MidParentalHeightObject { + mid_parental_height?: number; + mid_parental_height_sds?: number; + mid_parental_height_centile?: number; + mid_parental_height_centile_data?: Reference[] + mid_parental_height_upper_centile_data?: Reference[] + mid_parental_height_lower_centile_data?: Reference[] + mid_parental_height_lower_value?: number + mid_parental_height_upper_value?: number + } + ``` + +This returns a mid-parental height, mid-parental SDS and centile, along with the centile data if the user wishes to plot a mid-parental centile. The structure of the Reference and Centile interfaces is: + +??? note "`Reference` and `Centile` interface structures" + ```js + export interface Reference { + [name: string]: ISexChoice + } + + export interface ICentile { + centile: number, + data: IPlottedCentileMeasurement[], + sds: number + } + + export interface IPlottedCentileMeasurement { + "l": string | number, + "x": number, + "y": number + } + + export interface ISexChoice { + male: IMeasurementMethod, + female: IMeasurementMethod + } + + export interface IMeasurementMethod{ + height?: ICentile[], + weight?: ICentile[], + bmi?: ICentile[], + ofc?: ICentile[], + } + ``` + +Centile data are returned from the RCPCH API in this same structure, though no API call is made from this component - all the centile data for all the references is included. + +### `enableZoom` + +```enableZoom```: a boolean optional prop which defaults to false. If true, the user can press and mouse click to zoom in or out once measurements are being displayed. A reset zoom button also appears. + +### `chartType` + +```chartType```: a string mandatory prop and must be one of ```'centile' | 'sds'```. It toggles between centile and SDS charts. + +### `enableExport` + +```enableExport```: a boolean optional prop, defaults to false. If true, ```exportChartCallback``` must be implemented and a copy-paste button is rendered below the chart. + +### `exportChartCallBack` + +```exportChartCallback``` callback function implemented if `enableExport` is true. It receives an SVG element. This can be saved in the client to clipboard by converting to canvas using HTML5. An example implementation of this is [here](https://github.com/rcpch/digital-growth-charts-react-client/blob/live/src/functions/canvasFromSVG.js) in our demo client. + +### `clinicianFocus` + +```clinicianFocus```: a boolean optional prop which defaults to false. If true, the advice strings that are reported to users in tooltips are more technical and aimed at clinicians familiar with centile charts. If false, the advice strings will be less technical and more suitable for parents, guardians, carers or other laypersons. + +!!! example "Requests for additional functionality in props" + In time, more props can be added if users request them. If you have requests, please post issues on our [GitHub](https://github.com/rcpch/digital-growth-charts-react-component-library/issues) or get involved to contribute as below. + +## Troubleshooting + +### Circular import errors + +Victory Charts are a dependency (see below), built on top of D3.js. On build, it is likely you will get an error relating to circular dependencies for some files in the d3-interpolate module. This issue is logged [here](https://github.com/d3/d3-interpolate/issues/58). + +## Contributing + +See [Contributing](../developer/contributing.md) for information on how to get involved in the project. + +You can get in touch with the primary developers to talk about the project using any of the methods on our [contact page](../about/contact.md). + +## Acknowledgements + +This Typescript library was built from the starter created by [Harvey Delaney](https://blog.harveydelaney.com/creating-your-own-react-component-library/) + +The charts are built using [Victory Charts](https://formidable.com/open-source/victory/docs/victory-chart/) for React. We tried several chart packages for React, but we chose Victory because of their documentation and their ability to customise components. + +## Licensing + +This chart component software is is subject to copyright and is owned by the RCPCH, but is released under the MIT license. +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) + +There is important chart line rendering data bundled in the component, which subject to copyright and is owned by the RCPCH. It is specifically excluded from the MIT license mentioned above. If you wish to use this software, please [contact the RCPCH](../about/contact.md) so we can ensure you have the correct license for use. Subscribers to the Digital Growth Charts API will automatically be assigned licenses for the chart plotting data. diff --git a/docs/developer/start-here.md b/docs/developer/start-here.md index a1680eea..ffd44578 100644 --- a/docs/developer/start-here.md +++ b/docs/developer/start-here.md @@ -1,13 +1,14 @@ --- title: Getting Started reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- # Getting Started Developing the Digital Growth Charts project !!! warning - This section of the documention is for people **developing** and **extending** the actual dCG API application itself - **not** for users or integrators of the Digital Growth Charts API. + **This section of the documentation is for people developing and extending the dCG API software tools - *not* for users or integrators of the Digital Growth Charts API.** - If you are an integrator and want to use the API and other components then go [here](../integrator/support.md). + **If you are an integrator and want to use the dGC API and other components to build growth charts into your digital health solution then go to [Integrators/Support](../integrator/support.md).** -If you would like to get involved in *developing* and *improving* the codebase of the RCPCH Digital Growth Charts API project, these pages detail some of the setup and working practices we are using. +If you would like to get involved in *developing* and *improving* the codebase of the RCPCH Digital Growth Charts API project, these and following pages detail some of the setup and working practices we are using. diff --git a/docs/developer/versioning.md b/docs/developer/versioning.md index 30b7153c..9eb93ec8 100644 --- a/docs/developer/versioning.md +++ b/docs/developer/versioning.md @@ -1,9 +1,10 @@ --- title: Versioning reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- -# Versioning the API Server's code +# Versioning the API Server's code We distinguish between: diff --git a/docs/developer/writing-documentation.md b/docs/developer/writing-documentation.md index 95a31141..ba92e0a7 100644 --- a/docs/developer/writing-documentation.md +++ b/docs/developer/writing-documentation.md @@ -1,6 +1,7 @@ --- title: Writing Documentation reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers --- # Writing dGC Documentation @@ -136,12 +137,12 @@ You should always build the site at least once with both PDF export and Git Comm Because of the way we have set up the left sidebar navigation, new pages are **not** automatically added to the navigation. (This allows us to have pages which are work-in-progress, available on the live site for review, but not in the navigation, hence only those who have the link would easily find it) - + See the next section for how to add pages to the navigation. ### Adding navigation for the page -Add navigation by editing the `nav:` tree element in `mkdocs.yml`. Below is an excerpt from the `nav:` in this project. You can see how the top level Navbar headings `Home` and About `are` defined, and how the sidebar headings work. You can nest several levels deep, if needed. +Add navigation by editing the `nav:` tree element in `mkdocs.yml`. Below is an excerpt from the `nav:` in this project. You can see how the top level Navbar headings `Home` and About `are` defined, and how the sidebar headings work. You can nest several levels deep, if needed. ``` yaml nav: diff --git a/docs/integrator/api-keys.md b/docs/integrator/api-keys.md index b412e5c4..786e77f3 100644 --- a/docs/integrator/api-keys.md +++ b/docs/integrator/api-keys.md @@ -1,6 +1,7 @@ --- title: Getting API Keys reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- # Getting your Digital Growth Charts API keys @@ -15,9 +16,9 @@ We require an API key to authenticate calls made and ensure they are valid. The API keys identify you to the API, so they should be considered *'secrets'*. If someone else can access and use your API keys, then they **are** effectively 'you' as far as our servers are concerned. Therefore, you must keep your API keys private, especially when using keys in a real application. The most common cause of accidental API key exposure is inadvertently committing a hard-coded API key to version control, such as Git, and then pushing it to a public site such as GitHub. - - Many stategies are available to help you avoid this. One of the most popular is keeping 'secrets' in Environment Variables and use a [dotenv](https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f) tool to manage them. - + + Many stategies are available to help you avoid this. One of the most popular is keeping 'secrets' in Environment Variables and use a [dotenv](https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f) tool to manage them. + *This tutorial is a Node/JavaScript version of `dotenv`, but many other languages are also available.* ## Obtaining API keys in the developer platform diff --git a/docs/integrator/api-reference.md b/docs/integrator/api-reference.md index 132f29c6..8dda9857 100644 --- a/docs/integrator/api-reference.md +++ b/docs/integrator/api-reference.md @@ -1,6 +1,7 @@ --- title: API Reference reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- # API Reference diff --git a/docs/integrator/client-specification.md b/docs/integrator/client-specification.md index bdd7e6cd..81dd2310 100644 --- a/docs/integrator/client-specification.md +++ b/docs/integrator/client-specification.md @@ -1,6 +1,7 @@ --- title: Client Specification reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- In this document, we have collated the exact specification mandated by the Digital Growth Charts Project Board for Digital Growth Charts. Much of the specification is inherited from the preceding paper growth charts, so clinicians have immediate familiarity using the digital version. @@ -74,7 +75,7 @@ Along with the centile data, the growth data (presented to the endpoint in the r - Chart labelling: axes must be labelled appropriately with the correct intervals. Below 42 weeks gestation, the x-axis should reflect gestation. Beyond 42 weeks to 2 years, weeks and months should be shown. Above 2 years, months and years should be shown. Above 4 years, yearly and 6-monthly intervals are shown. On the y-axis, measurement units should be used, with scope of the chart showing only the measurements, not the whole chart. -- Provide help and information facility to access instructions drawn from the RCPCH educational materials (see separate documents: [information for parents](../clinician/chart-information-families.md), [information for health staff](../clinician/chart-information-health-staff.md)). +- Provide help and information facility to access instructions drawn from the RCPCH educational materials (see separate documents: [information for parents](../parents/chart-information-families.md), [information for health staff](../clinician/chart-information-health-staff.md)). ### When plotting centile charts diff --git a/docs/integrator/faqs-for-integrators.md b/docs/integrator/faqs-for-integrators.md index 52b2404e..93f6be1b 100644 --- a/docs/integrator/faqs-for-integrators.md +++ b/docs/integrator/faqs-for-integrators.md @@ -1,6 +1,7 @@ --- title: FAQs for Integrators reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- # FAQs for Integrators @@ -44,7 +45,7 @@ Producing a visual ‘growth chart’ with this data is a little more involved, We are keen to build a ‘catalogue’ of chart clients, so other open-source clients are very welcome. We will also help you build and test them! -## Q: Is corrected gestational age passed back by the API, or do implementers have to calculate it? +## Q: Is corrected gestational age passed back by the API, or do implementers have to calculate it? **A**: Yes, corrected age is passed back by the API, if a gestational age is included in the request. @@ -60,7 +61,7 @@ This correction is applied up to the corrected age of 1 year for preterm childre **A**: Yes, we have included one in our source code: [Validation Constants](https://github.com/rcpch/rcpchgrowth-python/blob/live/rcpchgrowth/constants/validation_constants.py). This is used internally to validate API inputs, as well as by the internal `rcpchgrowth` Python module to validate inputs to the `Measurement` class. -## Q: Would it be good enough to plot the returned centile values on a pre-prepared **image** of a growth chart? +## Q: Would it be good enough to plot the returned centile values on a pre-prepared **image** of a growth chart? **A**: Maybe. It would depend on the implementation. diff --git a/docs/integrator/getting-started.md b/docs/integrator/getting-started.md index 39a7d420..0966fb19 100644 --- a/docs/integrator/getting-started.md +++ b/docs/integrator/getting-started.md @@ -1,6 +1,7 @@ --- title: Getting Started reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- # Getting Started integrating Digital Growth Charts @@ -44,4 +45,4 @@ These API keys allow us to manage usage of the API and prevent abuse. For explor ----- -## Next: [Getting API keys](../integrator/api-keys.md) \ No newline at end of file +## Next: [Getting API keys](../integrator/api-keys.md) diff --git a/docs/integrator/making-api-calls.md b/docs/integrator/making-api-calls.md index 5ef40d0c..483e6fe7 100644 --- a/docs/integrator/making-api-calls.md +++ b/docs/integrator/making-api-calls.md @@ -1,6 +1,7 @@ --- title: Making API Calls reviewers: Dr Marcus Baw, Dr Simon Chapman +audience: integrators, implementers, technical-architects --- # Making calls to the Digital Growth Charts API diff --git a/docs/integrator/support.md b/docs/integrator/support.md index 73416855..7ce9792b 100644 --- a/docs/integrator/support.md +++ b/docs/integrator/support.md @@ -1,41 +1,44 @@ --- title: Support reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- + # Support ## Commercial Support !!! tip "Commercial support" - For integration of the API with your software solution, please contact . + For our integration service, which can provide bespoke support to help you integrate the API with your healthcare software solution, please contact . + Please also see our [Pricing](../products/pricing.md) section for more details on the support included with each pricing tier. -We have a number of different user types to support. Depending on your needs and role, please navigate to the appropriate section through the following options: +To obtain the information you need for the best use of the RCPCH dGC platform depending on your role, please navigate to the appropriate section through the following options:
- :material-code-tags:{ .lg .middle } __Integrator__ - + *I am a developer looking to integrate Digital Growth Charts into an app, EPR, or other existing system.* [:octicons-arrow-right-24: Integrators](../integrator/getting-started.md){ .md-button .md-button--primary } - :material-stethoscope:{ .lg .middle } __Clinician__ - + *I am a clinician wanting to find out more about Digital Growth Charts and how I can get them at my place of work.* [:octicons-arrow-right-24: Clinicians](../clinician/faqs-for-clinicians.md){ .md-button .md-button--primary } - :fontawesome-brands-github:{ .lg .middle } __Contributor__ - + *I want to know how to set up a development environment and start improving the Digital Growth Charts platform.* [:octicons-arrow-right-24: Contributors](../developer/start-here.md){ .md-button .md-button--primary } - :material-safety-goggles:{ .lg .middle } __Clinical Safety Officer__ - + *I'm a Clinical Safety Officer looking for DCB0129 and other compliance information.* - +
[:octicons-arrow-right-24: Clinical Safety Management File](../safety/overview.md){ .md-button .md-button--primary } diff --git a/docs/integrator/whos-using-dgc.md b/docs/integrator/whos-using-dgc.md index f7943554..b336644c 100644 --- a/docs/integrator/whos-using-dgc.md +++ b/docs/integrator/whos-using-dgc.md @@ -1,6 +1,7 @@ --- title: Who's using the dGC Platform? reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran +audience: integrators, implementers, technical-architects --- # Who's using the dGC Platform? @@ -20,5 +21,17 @@ this bit is hidden from the published site (but is visible in GH source) to add: NHSE/X as commissioners NHSD - using python package in DAE for Maternity project -Trusts - Northumberland + +## Suppliers +CleverMed/BadgerNet +TPP/SystmOne + +## Regions +NHS Wales + +## Trusts +Northumberland +Cornwall +Kent +Forth Valley --> diff --git a/docs/legal/data-protection.md b/docs/legal/data-protection.md index 917a9e12..a2f889d1 100644 --- a/docs/legal/data-protection.md +++ b/docs/legal/data-protection.md @@ -1,6 +1,7 @@ --- title: Data Protection reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: clinicians, caldicott-guardians, data-protection-officers, developers --- # Data Protection Considerations diff --git a/docs/legal/disclaimer.md b/docs/legal/disclaimer.md index 5716665a..c6da8daf 100644 --- a/docs/legal/disclaimer.md +++ b/docs/legal/disclaimer.md @@ -1,6 +1,7 @@ --- title: DISCLAIMER reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: implementers, developers --- # DISCLAIMER diff --git a/docs/legal/licensing-copyright.md b/docs/legal/licensing-copyright.md index d017f2c8..51c10a92 100644 --- a/docs/legal/licensing-copyright.md +++ b/docs/legal/licensing-copyright.md @@ -1,6 +1,7 @@ --- title: Licensing and Copyright reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: implementers, developers, clinicians --- # Licensing and Copyright diff --git a/docs/legal/privacy-notice.md b/docs/legal/privacy-notice.md index 5d64b35b..cf23cdc1 100644 --- a/docs/legal/privacy-notice.md +++ b/docs/legal/privacy-notice.md @@ -1,38 +1,42 @@ --- +title: Privacy Notice reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: caldicott-guardians, implementers, developers --- # Privacy Notice -## What Information do we collect about you? +## What information do we collect about you? If you choose to create an account for the API service, we collect your name and email address and ask you to create a password. If you upgrade to a paid subscription, we will ask you for more details to process the payment. We will process your data as part of a contract with you. Information collected will be used to create and manage your account, and to contact you about Growth API. We do not use your personal data to make automated decisions or undertake profiling about you. -## What do we do with your information? +It is important to distinguish between **the account data we collect about Integrators** (developer account data) and **the data we process on your behalf**. The data we collect about you is your account information, which is used to manage your account and contact you about the service. The data we process on your behalf is the measurements you send to the API, which are used to calculate centiles and SDS scores. -We put security measures in place to ensure your information is securely stored. Your information will not be shared outside the RCPCH. +## What do we do with your developer account information? -Information will be stored with third-party suppliers who are acting on our behalf as data processors to provide certain products and services for the College. Your personal data will not be transferred outside of the UK. +We have stringent security measures in place to ensure your information is securely stored. Your information will not be shared outside the RCPCH. Information will be stored with third-party suppliers who are acting on our behalf as data processors to provide certain products and services for the College. Your personal data will not be transferred outside of the UK. We will only retain your information for as long as necessary to fulfil our contract with you. If you decide to end your subscription with us, we will retain your account details for two years after the end of your subscription and then delete your data. -The RCPCH Digital Growth Chart API is stateless, meaning it does not persist any data about the measurements sent to it. This is a crucial part of the API’s privacy design and has enabled us to keep the API development simple and constrained to solving the specific problem of centile/SDS calculations. +## What do we do with the data you send to the API? -It is the responsibility of the consuming application to store the measurements. This is the logical place to store data about the child since this consuming application will already have other stored data about the child within it, such as demographics. +The RCPCH Digital Growth Chart API is **stateless**, meaning it does not persist **any** data about the measurements sent to it. This is a crucial part of the API’s privacy design and has enabled us to keep the API development simple and constrained to solving the specific problem of providing centile/SDS calculations as a service. + +It is the responsibility of the *consuming application* to store the measurements. This is the logical place to store data about the child since this consuming application will already have other stored data about the child within it, such as demographics. The consuming application also already has an appropriate legal basis for storing the data, such as Direct Care. ## Your Rights You have the following rights in relation to your data: -* Right of access and right to have a copy of your personal data in a standard format (right to data portability). You can ask us for a copy of the information that we hold about you. You can also ask us for a copy of your data in a standard format where this is technically possible. But this only applies where we are holding your information with consent or as part of a contract with you. +* Right of access and right to have a copy of your account data in a standard format (right to data portability). You can ask us for a copy of the information that we hold about you. You can also ask us for a copy of your data in a standard format where this is technically possible. This only applies where we are holding your information with consent or as part of a contract with you. -* Change any factual errors or inaccuracies (right of rectification). If you have an RCPCH online account you can change and update your personal data. It is your responsibility to update us with any changes to the personal information you have provided. You can also contact us either via our contact form or contact the relevant team directly. +* Change any factual errors or inaccuracies (right of rectification). If you have an RCPCH developer account you can change and update your personal data. It is your responsibility to update us with any changes to the personal information you have provided. You can also contact us either via our contact form or contact the relevant team directly. * Delete your personal data (called a right to erasure). We cannot delete all personal data as we may have a legal obligation or because we have a requirement to retain it for a task in the public interest, but we can delete non-essential data. -* Restrict the use of your data (right of restriction). You can request that we deactivate your RCPCH online account or that we only store your data but undertake no further processing. However, this only applies to certain circumstances. +* Restrict the use of your data (right of restriction). You can request that we deactivate your RCPCH developer account or that we only store your data but undertake no further processing. However, this only applies to certain circumstances. * Object to processing (right to objection). You can ask that we stop using data that is not necessary for fulfilling our legal obligations. @@ -70,7 +74,7 @@ If you make a request, we have one month to respond to you. Please note, when mailing inquiries, you must mark your letters for ‘DataRep’ and not ‘RCPCH’, or your inquiry will not reach them. Please refer clearly to RCPCH in your correspondence. On receiving your correspondence, RCPCH is likely to request evidence of your identity, to ensure your personal data and information connected with it is not provided to anyone other than you. If you have any concerns over how DataRep will handle the personal data they will require to undertake for their services, please refer to their privacy notice. - + For general enquiries about RCPCH and its data processing contact: ## How to make a complaint diff --git a/docs/parents/chart-information-families.md b/docs/parents/chart-information-families.md index 9d398440..2ec2648c 100644 --- a/docs/parents/chart-information-families.md +++ b/docs/parents/chart-information-families.md @@ -1,6 +1,7 @@ --- title: Information for Parents reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: parents, carers, families --- # Information for Parents @@ -49,3 +50,5 @@ After 2 years of age, height is measured, standing up with shoes removed. It is From age 4 years, your child’s Body Mass Index (BMI) can be calculated from a measure of both weight and height. This measures how much weight your child is carrying, allowing for their height. It is calculated by dividing their weight (in kilograms) by their height (in metres), squared. The cut-off for a high BMI varies with age, but if a child’s BMI is above the cut-off, this generally suggests that they are overweight. A child with a low BMI is more likely to have a lean build rather than too little fat. Your GP or other health professional caring for your child will be able to discuss your child’s BMI with you. The NHS has a website which can calculate Body Mass Index for children over 2 years of age. + + diff --git a/docs/parents/faqs-parents.md b/docs/parents/faqs-parents.md index 448343a6..0d9e5c87 100644 --- a/docs/parents/faqs-parents.md +++ b/docs/parents/faqs-parents.md @@ -1,11 +1,12 @@ --- title: Frequently Asked Questions reviewers: Dr Anchit Chandran, Dr Marcus Baw +audience: parents --- ### I didn’t breastfeed, or I stopped early – are these charts still right for my baby? -The charts show how healthy babies with no problems grow. Babies grow most naturally when fed on breastmilk and this chart helps you check that your baby is still growing in the same healthy pattern. +The charts show how healthy babies grow. Babies grow most naturally when fed on breast milk and this chart helps you check that your baby is still growing in the same healthy pattern. ### My baby was born prematurely. Is this taken into account? @@ -21,8 +22,12 @@ Children often lose some weight when they are not well. Once your child recovers ### My baby’s weight was on one centile, but now it's nearly down to the next line – is this normal? -It is normal for your child’s weight centile drop by up to one centile space (the distance between two centile lines) between measurements, but it is less common for a child’s weight to cross two spaces; if this happens your health visitor or doctor may want to measure their length, ask about their eating and may do some investigations. +It is normal for your child’s weight centile drop by up to one centile space (the distance between two centile lines) between measurements, but it is less common for a child’s weight to cross two spaces; if this happens your health visitor or doctor may want to measure their length, ask about their eating and possibly do some investigations. ### My baby's head size has risen to the top of the centile chart – should I be worried? British children have relatively large heads compared to the WHO standard, particularly after the age of 6 months. It's fairly common for the head centile to be at the very top of the chart or even above it. This should only cause concern if the head centile goes on rising after the first few weeks, or if there are other concerning signs or symptoms. + +### Why are there only two kinds of chart - 'boys' and 'girls'? + +Although some children may identify as a sex which is not the same as the sex they were identified at birth, their growth will still in most cases follow the chart ('boys' or 'girls') which most closely represents their sex assigned at birth. If your child is under the care of a specialist in growth, gender, or hormones, they will be able to advise you on which chart to use. diff --git a/docs/products/api-server.md b/docs/products/api-server.md index e84da66e..53c04a63 100644 --- a/docs/products/api-server.md +++ b/docs/products/api-server.md @@ -3,14 +3,14 @@ title: dGC API Server reviewers: Dr Marcus Baw --- -# dGC API Server - {% set repository_name="rcpch/digital-growth-charts-server" -%} [![Github Issues](https://img.shields.io/github/issues/{{ repository_name }})](https://github.com/{{ repository_name }}/issues) [![Github Stars](https://img.shields.io/github/stars/{{ repository_name }})](https://github.com/{{ repository_name }}/stargazers) [![Github Licence](https://img.shields.io/github/license/{{ repository_name }})](https://github.com/{{repository_name }}/blob/live/LICENSE) [![Build and deploy to Azure Web App](https://github.com/rcpch/digital-growth-charts-server/actions/workflows/live-deploy-to-server-on-release.yml/badge.svg)](https://github.com/rcpch/digital-growth-charts-server/actions/workflows/live-deploy-to-server-on-release.yml) + + [![DOI](https://zenodo.org/badge/261587883.svg)](https://zenodo.org/badge/latestdoi/261587883) [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/202702-d1daf1c6-3a4c-469d-be2a-e2fcf3d84090?action=collection%2Ffork&collection-url=entityId%3D202702-d1daf1c6-3a4c-469d-be2a-e2fcf3d84090%26entityType%3Dcollection%26workspaceId%3Dd868b72e-0677-4b67-9283-112363b1f5ac#?env%5BLIVE%20api.rcpch.ac.uk%5D=W3sia2V5IjoiYmFzZVVybCIsInZhbHVlIjoiaHR0cHM6Ly9hcGkucmNwY2guYWMudWsvZ3Jvd3RoL3YxIiwiZW5hYmxlZCI6dHJ1ZSwidHlwZSI6ImRlZmF1bHQiLCJzZXNzaW9uVmFsdWUiOiJodHRwczovL2FwaS5yY3BjaC5hYy51ay9ncm93dGgvdjEiLCJzZXNzaW9uSW5kZXgiOjB9LHsia2V5IjoiYXBpS2V5IiwidmFsdWUiOiJJTlNFUlRfWU9VUl9BUElfS0VZX0hFUkUiLCJlbmFibGVkIjp0cnVlLCJ0eXBlIjoic2VjcmV0Iiwic2Vzc2lvblZhbHVlIjoiSU5TRVJUX1lPVVJfQVBJX0tFWV9IRVJFIiwic2Vzc2lvbkluZGV4IjoxfV0=) @@ -23,6 +23,6 @@ reviewers: Dr Marcus Baw ![api_server_postman](../_assets/_images/api_server_postman.png) -## Getting Started +## Getting Started with integrating our API If you want to integrate the RCPCH Digital Growth Charts API into an application, then start [here](../integrator/getting-started.md). diff --git a/docs/products/flask(deprecated).md b/docs/products/flask(deprecated).md index ada8c981..aa117e8b 100644 --- a/docs/products/flask(deprecated).md +++ b/docs/products/flask(deprecated).md @@ -1,9 +1,10 @@ --- title: Flask/Python Client (deprecated) reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers, implementers, integrators --- -# Flask/Python (deprecated) +# Flask/Python ( :warning: deprecated) Early in development of the growth charts, our client was simply part of the same Flask app, which later became the API. At that point, it was necessary to separate the two apps functionally for the client to use the API over REST. diff --git a/docs/products/get-digital-growth-charts.md b/docs/products/get-digital-growth-charts.md index 5d2f202b..704cd506 100644 --- a/docs/products/get-digital-growth-charts.md +++ b/docs/products/get-digital-growth-charts.md @@ -1,28 +1,28 @@ --- title: Get Digital Growth Charts reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: implementers, clinicians --- -## Paper growth charts holding up your digital transformation? +## Are paper growth charts holding up digital transformation? We know from talking to experienced child health clinicians that they absolutely **must have** growth charts in any new digital solution. The lack of good quality and richly functional digital growth charts on the EPR/EHR market has held back digital transformation in many care settings. Some care-giving organisations have been forced to either hold up plans for digitisation, or use a parallel paper chart workflow. -**We built the RCPCH Digital Growth Charts project to be a safe and cost-effective solution.** +!!! success "RCPCH Digital Growth Charts are a safe and cost-effective solution" + Our solution is a UKCA/CE-marked Registered Medical Device, with a full DCB0129 clinical safety file, and is already in use in numerous NHS organisations across the UK, and within third-party EPR systems. ## Trusted, familiar-looking Digital Growth Charts -Produced and warranted by the RCPCH itself – the international authority on child health. +* Produced and warranted by the RCPCH itself – the international authority on child health. -Designed to be familiar to clinicians used to paper growth charts. +* Designed to be familiar to clinicians used to paper growth charts. -Richly functional, adding features like automatic gestational age correction, bone age, mid-parental height, event recording, and specialist references for Turner and Down syndromes. +* Richly functional, adding features like automatic gestational age correction, bone age, mid-parental height, event recording, and specialist references for Turner and Down syndromes. ## The heavy lifting is done for you We know that calculation and display of growth parameters is technically hard, and comes with many clinical caveats. Our SaaS (Software As A Service) platform does all the hard work for you, meaning your clinicians get dependable, trustworthy charts, and digital transformation can proceed. -We think more stuff in the NHS should be done this way! - ## Who's using the RCPCH Digital Growth Charts? The RCPCH Digital Growth Charts are already used in numerous NHS Trusts across England. Also, they are currently being adopted by UK General Practice clinical systems, at National level in UK Devolved Nations, and within major neonatal and maternity systems. diff --git a/docs/products/google-sheets-plugin.md b/docs/products/google-sheets-plugin.md index 500b77fb..082f0a28 100644 --- a/docs/products/google-sheets-plugin.md +++ b/docs/products/google-sheets-plugin.md @@ -1,6 +1,7 @@ --- title: Google Sheets Plugin reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: developers, implementers, integrators, researchers, academics --- [:octicons-mark-github-16: GitHub Repository](https://github.com/rcpch/digital-growth-charts-google-sheets-plugin) diff --git a/docs/products/products-overview.md b/docs/products/products-overview.md index f6830c52..8c0284b2 100644 --- a/docs/products/products-overview.md +++ b/docs/products/products-overview.md @@ -1,6 +1,7 @@ --- title: Products Overview reviewers: Dr Marcus Baw, Dr Anchit Chandran +audience: implementers, clinicians --- # Products Overview diff --git a/docs/products/react-component.md b/docs/products/react-component.md index 072af8a7..888d5097 100644 --- a/docs/products/react-component.md +++ b/docs/products/react-component.md @@ -6,483 +6,45 @@ reviewers: Dr Marcus Baw, Dr Simon Chapman, Dr Anchit Chandran # React Chart Component {% set repository_name="rcpch/digital-growth-charts-react-component-library" -%} - -[![Github Issues](https://img.shields.io/github/issues/{{ repository_name }})](https://github.com/{{ repository_name }}/issues) -[![Github Stars](https://img.shields.io/github/stars/{{ repository_name }})](https://github.com/{{ repository_name }}/stargazers) -[![Github Forks](https://img.shields.io/github/forks/{{ repository_name }})](https://github.com/{{ repository_name }}/network/members) -[![Github Licence](https://img.shields.io/github/license/{{ repository_name }})](https://github.com/{{repository_name }}/blob/live/LICENSE) -[![NPM Publish](https://github.com/rcpch/digital-growth-charts-react-component-library/actions/workflows/main.yml/badge.svg)](https://github.com/rcpch/digital-growth-charts-react-component-library/actions/workflows/main.yml) - [:octicons-mark-github-16: GitHub repository](https://github.com/{{ repository_name }}) [:material-web: Online Demo](https://growth.rcpch.ac.uk/) -![height-chart-girl-component](../_assets/_images/height-chart-girl-component.png) - -You can use the component as-is in a React app, or include it in plain HTML or any other JavaScript framework. - -## Supported Features - -* Corrected/Chronological age with toggle -* Zoom with zoom reset (optional prop) -* Event logging - events associated with measurements -* Bone ages -* Mid-parental heights with mid-parental centile lines (at +2 and -2 SDS) +## Features + +* Calculation and display of height, weight, BMI, head circumference, and BMI centiles. +* Support for Trisomy 21 (Down syndrome) and Turner syndrome. +* Automatic gestational age correction, throughout the life course. +* Zoomable, scrollable charts. +* Event logging - clinical events can be associated with measurements. +* Bone age integration. +* Mid-parental heights with mid-parental centile lines (at +2 and -2 SDS). +* SDS (Standard Deviation Score) charts. +* Decimal age support. +* Customisable chart colours. +* Save chart image to clipboard. +* Tooltip information which can be optimised for clinicians or families. +* 'Whole Life Course' toggle to view only measurements or whole chart. -### Version 6 new features - -* Rework the data structure to match that from API to prevent persisting data in the component in future -* BMI SDS lines -* SDS charts -* Save to clipboard - -### New in 6.1 - -* Dates included in tooltips -* `clinicianFocus` (optional prop) to toggle between advice strings aimed at clinicians or those aimed at families / children & young people -* Toggle button to allow user to constrain viewable chart to measurements or view the whole chart - -## Background +![height-chart-girl-component](../_assets/_images/height-chart-girl-component.png) -### Why a Chart library? +## Digital Growth Charts React Client Component Library -In the process of building the API, we realised the difficulty for developers unfamiliar with growth charts to produce one acceptable to clinicians. +In the process of building the API, we realised the difficulty of building a graphically pleasing, clinically accurate growth chart representation, especially for non-clinician developers, who might be unfamiliar with growth charts. -For example, charts typically have 9 main centile lines (though there are other formats), each of which can be rendered as a series. However, the UK-WHO chart is made of several growth references, each from different datasets, and it is a stipulation that they must not overlap. This means that for the four datasets which make up UK-WHO, the developer must render 36 separate 'sections' of centile lines, marrying them up correctly. +As a simple example, charts typically have 9 main curved centile lines (though there are other formats), each of which can be rendered as a series. However, the UK-WHO chart is made of several growth references, each from different datasets, and it is a stipulation that they must not overlap. This means that for the four datasets which make up UK-WHO, the developer must render 36 separate 'sections' of centile lines, marrying them up correctly, including leaving a 'step' where the datasets change. Even then, there are certain rules which are key, published by the RCPCH project board. These relate to usability of the charts. For example, the 50th centile should be de-emphasised. These and other rules are listed on the [Client Specification](../integrator/client-specification.md). -Given the complexity, we decided to create a React component library for developers to use. We designed it to be customisable for direct use, but also as a demonstration for developers wanting to build the charts from the ground up. - -For this reason, we have produced a permissively-licensed, open-source React component, which aims to simplify the process of creating a chart from the chart data received from the API. It makes the job of drawing a vector-graphic centile chart much easier. - -If you want to see how the library is implemented, we have built a full client for the RCPCHGrowth API in React, which uses this component library, and can be found [here](https://github.com/rcpch/digital-growth-charts-react-client). - -### Why use React? - -React is a popular UI library for Javascript. It has endured well and seems like a popular choice for developers. Importantly, unlike some other Javascript frameworks which are primarily designed for Single Page Applications, React doesn't expect to have the entire webpage to itself. It can be used as a small component in any other web page, even if the main framework being used is completely different. - -!!! question "Tell us what you think" - Let us know what you think of our design decisions, on this or any other area of the dGC Project, by chatting to us on our [dGC Forum](https://openhealthhub.org/c/rcpch-digital-growth-charts/) :fontawesome-brands-discourse:. - -### What about other frameworks/UI libraries? - -If you need us to develop a charting component in a different language or framework, we may be able to do this with you or your company. We would need to discuss the requirements and quote for this service. You should be aware that all such RCPCH-developed artefacts will also be open source. We ensure the licensing of open source components is compatible with commercial use. - -!!! note "Contact us" - To contact us for this service, email . - -## Getting started - -```console -npm i --save @rcpch/digital-growth-charts-react-component-library -``` - -### Circular import errors - -Victory Charts are a dependency (see below), built on top of D3.js. On build, it is likely you will get an error relating to circular dependencies for some files in the d3-interpolate module. This issue is logged [here](https://github.com/d3/d3-interpolate/issues/58). - -### Running the Charts Package locally - -To run the package locally alongside the React client, there are some extra steps. Since the Chart library and the React client both use React, the Charts will throw an error if you import them in the ```package.json``` of your app from a folder on your local machine. - -For example, in your React app: - -```json -"dependencies": { - "@rcpch/digital-growth-charts-react-component-library": "file:/Users/FooBar/Development/react/component-libraries/digital-growth-charts-react-component-library", -} -``` - -This causes a problem as it leads to 2 versions of React running. To overcome this, in your application: - -```console -cd node_modules/react -npm link -``` - -In the root folder of your Chart library: - -```console -npm link react -``` - -Repeat the same for ```react-dom``` ensuring all the package versions are the same for your app and the library. The library currently uses version `17.0.2` of React and React-dom. - -Now, you can view your changes made live in your app: - -```console -npm run build -``` - -Refresh your app. - -If the invalid hooks error persists, an alternative method is to add the following line to ```package.json``` in the library. This removes the node_modules from the build folder: - -```json -"scripts": { - "postinstall": "rm -rf node_modules", - ... - }, -``` - -## Structure - -This library has been written in Typescript. The main component is `RCPCHChart`, which takes the following `props`. Note that each component will only render a single chart type, so if you wanted to render a weight *and* a height chart, these must be done as two separate instances of the component. - -### RCPCHChart component - -??? note "`RCPCHChart` component props" - ```js - { - title: string, - subtitle: string, - measurementMethod: 'height' | 'weight' | 'ofc' | 'bmi', - sex: 'male' | 'female', - measurementsArray: [Measurement], - reference: 'uk-who' | 'turner' | 'trisomy-21', - width: number, - height: number, - chartStyle: ChartStyle, - axisStyle: AxisStyle, - gridlineStyle: GridlineStyle, - centileStyle: CentileStyle, - sdsStyle?: SDSStyle; - measurementStyle: MeasurementStyle - midParentalHeightData?: MidParentalHeightObject, - enableZoom?: boolean, - chartType?: 'centile' | 'sds', - enableExport: boolean, - exportChartCallback: function(svg: any), - clinicianFocus?: boolean; - } - ``` - - -### Measurement interface - -The `Measurement` interface is structured to reflect the JSON `Measurement` object which is returned by the API. The `RCPCHChart` component uses the `reference` prop to determine which chart to render. So far, 3 references are supported: UK-WHO, Turner Syndrome and Down Syndrome. The reference data for the centiles are included in the library in plottable format in the `chartdata` folder. - -!!! tip - In practice, this means you get the returned JSON from the dGC API, passing it directly in to the component. The component 'knows' how to render this correctly. You don't need to parse, restructure, or even understand the JSON returned from the API: just pass it directly to the component inside an array containing one `Measurement` object. +Given the complexity, we decided to create a React component library for your developers to use. We designed it to be customisable for direct use, but also as a demonstration for developers wanting to build the charts from the ground up. We do not, however, recommend developing your own growth charts from scratch, as it is a complex task. Using the component library will save you time and effort, and result in a more standardised and clinically-assured product. -The `Measurement` interface structure is: +The dGC React Chart Component is a permissively-licensed, open-source React component, which aims to simplify the process of creating a chart from the chart data received from the API. It makes the job of drawing a vector-graphic centile chart much easier. **The chart component natively 'understands' an array of the JSON objects returned by the API, without any transforms or parsing required.** -??? note "`Measurement` object structure" - ```js - export interface Measurement { - birth_data: { - birth_date: string; - estimated_date_delivery: string; - estimated_date_delivery_string: string; - gestation_weeks: number; - gestation_days: number; - sex: 'male' | 'female'; - }; - child_observation_value: { - measurement_method: 'height' | 'weight' | 'bmi' | 'ofc'; - observation_value: number; - observation_value_error?: string; - }; - measurement_dates: { - chronological_calendar_age: string; - chronological_decimal_age: number; - clinician_decimal_age_comment: string; - corrected_calendar_age: string; - corrected_decimal_age: number; - corrected_gestational_age?: { - corrected_gestation_weeks?: number; - corrected_gestation_days?: number; - }; - lay_decimal_age_comment: string; - observation_date: Date; - }; - measurement_calculated_values: { - chronological_centile: number; - chronological_centile_band: string; - chronological_measurement_error?: string; - chronological_sds: number; - corrected_centile: number; - corrected_centile_band: string; - corrected_measurement_error?: string; - corrected_sds: number; - measurement_method: 'height' | 'weight' | 'bmi' | 'ofc'; - }; - plottable_data: { - centile_data: { - chronological_decimal_age_data: { - age_error?: string; - age_type: 'chronological_age' | 'corrected_age'; - calendar_age: string; - centile_band: string; - clinician_comment: string; - lay_comment: string; - observation_error?: string; - observation_value_error?: string; - x: number; - y: number; - b: number; - bone_age_type?: 'greulich-pyle' | 'tanner-whitehouse-ii' | 'tanner-whitehouse-iii' | 'fels' | 'bonexpert'; - bone_age_label?: string; - bone_age_centile: number; - bone_age_sds?: number; - events_text?: string[]; - }; - corrected_decimal_age_data: { - age_error: null; - age_type: 'chronological_age' | 'corrected_age'; - calendar_age: string; - centile_band: string; - clinician_comment: string; - lay_comment: string; - observation_error?: string; - observation_value_error?: string; - x: number; - y: number; - b: number; - bone_age_type?: 'greulich-pyle' | 'tanner-whitehouse-ii' | 'tanner-whitehouse-iii' | 'fels' | 'bonexpert'; - bone_age_label?: string; - bone_age_centile: number; - bone_age_sds?: number; - events_text?: string[]; - }; - }; - sds_data: { - chronological_decimal_age_data: { - age_error?: string; - age_type: 'chronological_age' | 'corrected_age'; - calendar_age: string; - centile_band: string; - clinician_comment: string; - lay_comment: string; - observation_error?: string; - observation_value_error?: string; - x: number; - y: number; - b: number; - bone_age_type?: 'greulich-pyle' | 'tanner-whitehouse-ii' | 'tanner-whitehouse-iii' | 'fels' | 'bonexpert'; - bone_age_label?: string; - bone_age_centile: number; - bone_age_sds?: number; - events_text?: string[]; - }; - corrected_decimal_age_data: { - age_error?: string; - age_type: 'chronological_age' | 'corrected_age'; - calendar_age: string; - centile_band: string; - clinician_comment: string; - lay_comment: string; - observation_error?: string; - observation_value_error?: string; - x: number; - y: number; - b: number; - bone_age_type?: 'greulich-pyle' | 'tanner-whitehouse-ii' | 'tanner-whitehouse-iii' | 'fels' | 'bonexpert'; - bone_age_label?: string; - bone_age_centile: number; - bone_age_sds?: number; - events_text?: string[]; - }; - }; - }; - bone_age: { - bone_age?: number; - bone_age_type?: 'greulich-pyle' | 'tanner-whitehouse-ii' | 'tanner-whitehouse-iii' | 'fels' | 'bonexpert'; - bone_age_centile?: number; - bone_age_sds?: number; - bone_age_text?: string; - }; - events_data: { - events_text?: string[]; - }; - } - ``` - -The styling components allow the user to customise elements of the chart. Chart styles control the chart and the tooltips. - -??? note "Styling options available through `ChartStyle`" - ```js - interface ChartStyle{ - backgroundColour?: string, - width?: number, - height?: number, - padding?: requires {left?: number, right?: number, top?: number, bottom?: number}, - titleStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} - subTitleStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'},, - tooltipBackgroundColour?: string, - tooltipStroke?: string, - tooltipTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} - termFill?: string, - termStroke?: string, - infoBoxFill?: string, - infoBoxStroke?: string - infoBoxTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} - toggleButtonInactiveColour: string // relates to the toggle buttons present if age correction is necessary - toggleButtonActiveColour: string - toggleButtonTextColour: string - } - ``` - -Note for the tooltips and infobox text sizes, these are strokeWidths, not point sizes as the text here is SVG. - -### Axis Styles - -??? note "Axis styles control axes and axis labels" - ```js - interface AxisStyle{ - axisStroke?: string, - axisLabelTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} - tickLabelTextStyle?: requires {name?: string, colour?: string, size?: number, weight?: 'bold' | 'italic' | 'regular'} - } - ``` - -### Gridline Styles - -??? note "Gridline styles allow/hide gridlines and control line width, presence of dashes, colour" - ```js - interface GridlineStyle{ - gridlines?: boolean, - stroke?: string, - strokeWidth?: number, - dashed?: boolean - } - ``` - -### Centile Styles - -??? note "Centile styles control the width and colour of the centile and SDS lines" - ```js - interface CentileStyle{ - sdsStroke?: string, - sdsStrokeWidth?: string, - centileStroke?: string, - centileStrokeWidth?: number, - delayedPubertyAreaFill?: string, - midParentalCentileStroke?: number; - midParentalCentileStrokeWidth?: number; - midParentalAreaFill?: string; - } - ``` - -### SDS Styles - -SDS styles control the colour and width of the SDS lines. As all measurement methods are rendered on a single chart, the user is offered the option of different colours for each measurement method (height, weight, head circumference(OFC) and body mass index (BMI)). If no SDS style is supplied, the centile line colour is used with an opacity applied to each measurement. - -??? note "SDS Styles" - ```js - interface SDSStyle { - lineStrokeWidth?: number; - heightStroke?: string; - weightStroke?: string; - ofcStroke?: string; - bmiStroke?: string; - } - ``` - -### Measurement Styles - -Measurement styles control the plotted data points: colour, size and shape. Corrected ages are always rendered as crosses. Circles for chronological ages are preferred. On the SDS charts, measurement points are grey by default, with the measurement method in focus highlighted by rendering as a line. Points which are not highlighted can be emphasised on mouse hover, with the highlighted colour being set by the `highlightedMeasurementFill` prop. - -??? note "Measurement Styles" - ```js - interface MeasurementStyle{ - measurementFill?: string, - highLightedMeasurementFill?: string; - } - ``` - -### Mid-Parental Height - -`midParentalHeightData`: This is the return value from the RCPCH API and takes the structure: - -??? note "`midParentalHeightData`" - ```js - export interface MidParentalHeightObject { - mid_parental_height?: number; - mid_parental_height_sds?: number; - mid_parental_height_centile?: number; - mid_parental_height_centile_data?: Reference[] - mid_parental_height_upper_centile_data?: Reference[] - mid_parental_height_lower_centile_data?: Reference[] - mid_parental_height_lower_value?: number - mid_parental_height_upper_value?: number - } - ``` - -This returns a mid-parental height, mid-parental SDS and centile, along with the centile data if the user wishes to plot a mid-parental centile. The structure of the Reference and Centile interfaces is: - -??? note "`Reference` and `Centile` interface structures" - ```js - export interface Reference { - [name: string]: ISexChoice - } - - export interface ICentile { - centile: number, - data: IPlottedCentileMeasurement[], - sds: number - } - - export interface IPlottedCentileMeasurement { - "l": string | number, - "x": number, - "y": number - } - - export interface ISexChoice { - male: IMeasurementMethod, - female: IMeasurementMethod - } - - export interface IMeasurementMethod{ - height?: ICentile[], - weight?: ICentile[], - bmi?: ICentile[], - ofc?: ICentile[], - } - ``` - -Centile data are returned from the RCPCH API in this same structure, though no API call is made from this component - all the centile data for all the references is included. - -### `enableZoom` - -```enableZoom```: a boolean optional prop which defaults to false. If true, the user can press and mouse click to zoom in or out once measurements are being displayed. A reset zoom button also appears. - -### `chartType` - -```chartType```: a string mandatory prop and must be one of ```'centile' | 'sds'```. It toggles between centile and SDS charts. - -### `enableExport` - -```enableExport```: a boolean optional prop, defaults to false. If true, ```exportChartCallback``` must be implemented and a copy-paste button is rendered below the chart. - -### `exportChartCallBack` - -```exportChartCallback``` callback function implemented if `enableExport` is true. It receives an SVG element. This can be saved in the client to clipboard by converting to canvas using HTML5. An example implementation of this is [here](https://github.com/rcpch/digital-growth-charts-react-client/blob/live/src/functions/canvasFromSVG.js) in our demo client. - -### `clinicianFocus` - -```clinicianFocus```: a boolean optional prop which defaults to false. If true, the advice strings that are reported to users in tooltips are more technical and aimed at clinicians familiar with centile charts. If false, the advice strings will be less technical and more suitable for parents, guardians, carers or other laypersons. - -!!! example "Requests for additional functionality in props" - In time, more props can be added if users request them. If you have requests, please post issues on our [GitHub](https://github.com/rcpch/digital-growth-charts-react-component-library/issues) or get involved to contribute as below. - -## Contributing - -See [Contributing](../developer/contributing.md) for information on how to get involved in the project. - -You can get in touch with the primary developers to talk about the project using any of the methods on our [contact page](../about/contact.md). - -## Acknowledgements - -This Typescript library was built from the starter created by [Harvey Delaney](https://blog.harveydelaney.com/creating-your-own-react-component-library/) - -The charts are built using [Victory Charts](https://formidable.com/open-source/victory/docs/victory-chart/) for React. We tried several chart packages for React, but we chose Victory because of their documentation and their ability to customise components. +If you want to see an example implementation, we have built a full demo client for the RCPCHGrowth API in React, which uses this component library, and can be found [here](https://github.com/rcpch/digital-growth-charts-react-client). You are welcome to reuse any of the code in this client, or use it as a reference implementation. ## Licensing -The chart data bundled in the component is subject to copyright and is owned by the RCPCH. If you wish to use this software commercially, please [contact the RCPCH](../about/contact.md) so we can ensure you have the correct license for use. - -This chart component software is released under the MIT license. +This chart component software is is subject to copyright and is owned by the RCPCH, but is released under the MIT license. [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) + +There is important chart line rendering data bundled in the component, which subject to copyright and is owned by the RCPCH. It is specifically excluded from the MIT license mentioned above. If you wish to use this software, please [contact the RCPCH](../about/contact.md) so we can ensure you have the correct license for use. Subscribers to the Digital Growth Charts API will automatically be assigned licenses for the chart plotting data. diff --git a/includes/_abbreviations.md b/includes/_abbreviations.md index 077efc5e..0e227c9d 100644 --- a/includes/_abbreviations.md +++ b/includes/_abbreviations.md @@ -5,6 +5,7 @@ *[AGPL]: Affero GNU Public License *[API]: Application Programming Interface *[BMI]: Body Mass Index, a measure of weight taking into account height +*[CE]: Conformité Européenne *[CLI]: Command Line Interface *[CRMF]: Clinical Risk Management File *[CRMP]: Clinical Risk Management Plan diff --git a/mkdocs.yml b/mkdocs.yml index 0c35313b..1c9ee660 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -48,6 +48,7 @@ nav: - 'developer/api-python.md' - 'developer/api-docker.md' - 'developer/api-testing.md' + - 'developer/react-component.md' - 'developer/react-client.md' - 'developer/rcpchgrowth.md' - 'developer/rcpchgrowth-cli.md'