Observations over time, each scored with NEWS2, the National Early Warning Score used across the NHS: the points for every parameter, the total, and the risk and response it calls for.
NEWS2 9 · High risk
Emergency response: assessment by a team with critical care skills, usually with transfer to a higher level of care. Monitoring: continuous.
| Parameter | Oct 25, 17:00 | Oct 25, 16:00 | Oct 25, 14:00 | Oct 25, 12:00 | Oct 25, 08:00 |
|---|---|---|---|---|---|
| Respirations /min | 24, scores 2 | 23, scores 2 | 20, scores 0 | 18, scores 0 | 16, scores 0 |
| SpO₂ (scale 1) % | 95, scores 1 | 94, scores 1 | 96, scores 0 | 96, scores 0 | 97, scores 0 |
| Air or oxygen | Oxygen, scores 2 | Air, scores 0 | Air, scores 0 | Air, scores 0 | Air, scores 0 |
| Systolic BP mmHg | 104, scores 1 | 106, scores 1 | 118, scores 0 | 122, scores 0 | 128, scores 0 |
| Pulse /min | 112, scores 2 | 108, scores 1 | 92, scores 1 | 88, scores 0 | 78, scores 0 |
| Consciousness | Alert, scores 0 | Alert, scores 0 | Alert, scores 0 | Alert, scores 0 | Alert, scores 0 |
| Temperature °C | 38.6, scores 1 | 38.7, scores 1 | 38.1, scores 1 | 37.8, scores 0 | 37.1, scores 0 |
| NEWS2 | 9 | 6 | 2 | 0 | 0 |
Installation
In a project set up as in Installation, run:
bunx shadcn@4.22.1 add https://organui.com/r/news2-chart.jsonOr by name: bunx shadcn@4.22.1 add @organui/news2-chart.
The source installs into your UI components directory, along with shadcn's table if you do not have it yet. It holds no state, so it renders in server and client components alike.
Usage
import { News2Chart, news2Score } from "@/components/ui/news2-chart"
export function Observations() {
return (
<News2Chart
observations={[
{
time: "2026-10-25T16:00:00Z",
respirationRate: 23,
spo2: 94,
onOxygen: false,
systolic: 106,
pulse: 108,
consciousness: "alert",
temperature: 38.7,
},
]}
/>
)
}
// The score alone, for an alert or a list of your own.
news2Score({ respirationRate: 23, spo2: 94, onOxygen: false, systolic: 106,
pulse: 108, consciousness: "alert", temperature: 38.7 })
// → { total: 6, risk: "medium", points: { respirationRate: 2, … } }Scoring
news2Score scores the seven parameters against the Royal College of Physicians' NEWS2 chart (2017): respiration rate, oxygen saturation, air or oxygen, systolic blood pressure, pulse, consciousness on the ACVPU scale, and temperature. New confusion, or responding only to voice or pain, scores 3, as unresponsiveness does. The total is the sum of the points; a set missing any parameter has no total, because NEWS2 is not valid without all seven.
Use SpO₂ scale 1 for most patients. Pass spo2Scale={2} only for a patient with hypercapnic respiratory failure whose target of 88–92% has been prescribed: below 88% scores as usual, and on oxygen, saturation above 92% scores too, because too much oxygen harms these patients.
Risk and response
The latest complete set leads the chart, with its risk and the response the RCP sets for it, from news2Responses: low for 0–4, low–medium when a single parameter scores 3, medium for 5–6 and high for 7 or more, with monitoring from every 12 hours at a score of 0 to continuous at 7.
Every score is a number, so none depends on color. Points of 1 or more are bold, a parameter scoring 3 is outlined in your destructive color, and only the high band, which calls for an emergency response, turns the total destructive. A warning icon marks every set above low risk.
Layout
Sets run from newest to oldest, sorted by time, so the latest is always in view, and the parameter names stay put while a long run scrolls sideways inside the table, not the page. Times show as UTC dates with a 24-hour clock; pass formatTime for your own. The scrolling area can be focused and scrolled with the keyboard, and is named for the span of times it covers.
NEWS2 supports clinical judgement and does not replace it; it is not validated for children or in pregnancy. Check the scoring against the chart your organisation uses before relying on it. The examples are fictional.
Examples
SpO₂ Scale 2
For hypercapnic respiratory failure with a target of 88–92%: saturation above the target on oxygen scores too.
NEWS2 5 · Medium risk
Urgent response: the nurse informs the medical team at once for assessment by a clinician skilled in acute illness. Monitoring: at least hourly.
| Parameter | Oct 25, 06:00 | Oct 25, 02:00 |
|---|---|---|
| Respirations /min | 21, scores 2 | 20, scores 0 |
| SpO₂ (scale 2) % | 94, scores 1 | 90, scores 0 |
| Air or oxygen | Oxygen, scores 2 | Oxygen, scores 2 |
| Systolic BP mmHg | 128, scores 0 | 132, scores 0 |
| Pulse /min | 86, scores 0 | 88, scores 0 |
| Consciousness | Alert, scores 0 | Alert, scores 0 |
| Temperature °C | 37.1, scores 0 | 37.0, scores 0 |
| NEWS2 | 5 | 2 |
An Incomplete Set
A set missing a parameter shows what was recorded but no total.
NEWS2 incomplete: every parameter is needed for a score.
| Parameter | Oct 25, 13:00 | Oct 25, 09:00 |
|---|---|---|
| Respirations /min | 15, scores 0 | 14, scores 0 |
| SpO₂ (scale 1) % | 97, scores 0 | 98, scores 0 |
| Air or oxygen | Air, scores 0 | Air, scores 0 |
| Systolic BP mmHg | 131, scores 0 | 136, scores 0 |
| Pulse /min | 70, scores 0 | 64, scores 0 |
| Consciousness | Not recorded | Alert, scores 0 |
| Temperature °C | 36.9, scores 0 | 36.6, scores 0 |
| NEWS2 | Incomplete | 0 |
API Reference
Import News2ChartProps from the same file as News2Chart.
| Prop | Type | Default |
|---|---|---|
observations | readonly News2Observation[]Sets of observations, in any order; the newest shows first. | Required |
spo2Scale | Spo2ScaleThe SpO₂ scale the patient is prescribed. Defaults to 1. | 1 |
caption | React.ReactNodeNames the table for assistive technology and shows below it. | — |
formatTime | (time: string) => stringDefaults to a UTC date and 24-hour time such as "Oct 25, 14:00". | defaultFormatTime |
Any other prop, such as className, id or aria-*, is passed to the root <div>.