Skip to content

NEWS2 chart

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.

Fictional observations, not patient data
ParameterOct 25, 17:00Oct 25, 16:00Oct 25, 14:00Oct 25, 12:00Oct 25, 08:00
Respirations /min24, scores 223, scores 220, scores 018, scores 016, scores 0
SpO₂ (scale 1) %95, scores 194, scores 196, scores 096, scores 097, scores 0
Air or oxygenOxygen, scores 2Air, scores 0Air, scores 0Air, scores 0Air, scores 0
Systolic BP mmHg104, scores 1106, scores 1118, scores 0122, scores 0128, scores 0
Pulse /min112, scores 2108, scores 192, scores 188, scores 078, scores 0
ConsciousnessAlert, scores 0Alert, scores 0Alert, scores 0Alert, scores 0Alert, scores 0
Temperature °C38.6, scores 138.7, scores 138.1, scores 137.8, scores 037.1, scores 0
NEWS296200

Installation

In a project set up as in Installation, run:

bunx shadcn@4.22.1 add https://organui.com/r/news2-chart.json

Or 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.

View registry item JSON

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.

ParameterOct 25, 06:00Oct 25, 02:00
Respirations /min21, scores 220, scores 0
SpO₂ (scale 2) %94, scores 190, scores 0
Air or oxygenOxygen, scores 2Oxygen, scores 2
Systolic BP mmHg128, scores 0132, scores 0
Pulse /min86, scores 088, scores 0
ConsciousnessAlert, scores 0Alert, scores 0
Temperature °C37.1, scores 037.0, scores 0
NEWS252

An Incomplete Set

A set missing a parameter shows what was recorded but no total.

NEWS2 incomplete: every parameter is needed for a score.

ParameterOct 25, 13:00Oct 25, 09:00
Respirations /min15, scores 014, scores 0
SpO₂ (scale 1) %97, scores 098, scores 0
Air or oxygenAir, scores 0Air, scores 0
Systolic BP mmHg131, scores 0136, scores 0
Pulse /min70, scores 064, scores 0
ConsciousnessNot recordedAlert, scores 0
Temperature °C36.9, scores 036.6, scores 0
NEWS2Incomplete0

API Reference

Import News2ChartProps from the same file as News2Chart.

News2Chart props
PropTypeDefault
observationsreadonly News2Observation[]

Sets of observations, in any order; the newest shows first.

Required
spo2ScaleSpo2Scale

The SpO₂ scale the patient is prescribed. Defaults to 1.

1
captionReact.ReactNode

Names the table for assistive technology and shows below it.

—
formatTime(time: string) => string

Defaults 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>.