@justair/justair-library 7.10.0-alpha.f42db94 → 7.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -121,6 +121,31 @@ Same install-time visibility caveat as the 7.4.0 section above.
|
|
|
121
121
|
|
|
122
122
|
`HI` is **derived, not measured**. Processing-Engine computes it from that reading's own `T_AMB` / `RH_AMB` pair using the NOAA formula (JA-3120); no supplier reports it. It takes no `_AMB` suffix because there is no internal counterpart — an enclosure Heat Index would describe the inside of the housing. Never compute it from the bare `T` / `RH`.
|
|
123
123
|
|
|
124
|
+
### New parameter and type changes in 7.10.0
|
|
125
|
+
|
|
126
|
+
| id | Name | Unit |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `RN` | Radon | `pCi/L` |
|
|
129
|
+
|
|
130
|
+
Same install-time visibility caveat as the 7.4.0 section above. Nothing normalizes radon today, so no
|
|
131
|
+
monitor carries it yet, but the first one that does will surface publicly. JA-3427 records that radon
|
|
132
|
+
should start admin only; that gating lives only in JustAir-Client's `parameterFiltering.js` and V2 has
|
|
133
|
+
no equivalent.
|
|
134
|
+
|
|
135
|
+
`RN.rfc` is `4`, the EPA indoor action level in pCi/L. It is **not** an IRIS chronic inhalation RfC in
|
|
136
|
+
µg/m³, which is what every `HEAVY_METALS` `rfc` is. Nothing reads `rfc` off `PARAMETERS` today.
|
|
137
|
+
|
|
138
|
+
Two `type` values also changed, so a service that groups by `type` will show these in a new group
|
|
139
|
+
after install:
|
|
140
|
+
|
|
141
|
+
| id | Was | Now |
|
|
142
|
+
|---|---|---|
|
|
143
|
+
| `H2S` | `Volatile Organic Compound` | `Gas` |
|
|
144
|
+
| `CH4` | `Volatile Organic Compound` | `Gas` |
|
|
145
|
+
|
|
146
|
+
`origin` and `impacts` were also filled in for the non-AQI pollutants that had them blank. Display
|
|
147
|
+
only, no shape change.
|
|
148
|
+
|
|
124
149
|
### Object shape
|
|
125
150
|
|
|
126
151
|
Each constant is an object with the following fields:
|
|
@@ -132,7 +157,7 @@ Each constant is an object with the following fields:
|
|
|
132
157
|
| `name` | `string` | Full descriptive name (e.g. `"Particulate Matter 2.5 (PM₂.₅)"`) |
|
|
133
158
|
| `unit` | `string` | Measurement unit (e.g. `"µg/m³"`) |
|
|
134
159
|
| `type` | `string` | Category: `"Particulate Matter"`, `"Gas"`, `"Volatile Organic Compound"`, `"Weather"`, `"Heavy Metal"`, `"Heavy Metal - Essential Nutrient"` |
|
|
135
|
-
| `rfc` | `number \| null` | EPA IRIS chronic inhalation reference concentration (µg/m³) |
|
|
160
|
+
| `rfc` | `number \| null` | EPA IRIS chronic inhalation reference concentration (µg/m³). Exception: `RN.rfc` is the EPA indoor action level in pCi/L |
|
|
136
161
|
| `origin` | `string \| null` | Description of pollution source |
|
|
137
162
|
| `impacts` | `string \| null` | Human health impact description |
|
|
138
163
|
|
package/package.json
CHANGED
|
@@ -130,7 +130,7 @@ export const PARAMETERS = {
|
|
|
130
130
|
name: "Radon (Rn)",
|
|
131
131
|
unit: "pCi/L",
|
|
132
132
|
type: "Gas",
|
|
133
|
-
rfc: 4, //
|
|
133
|
+
rfc: 4, // EPA indoor action level (pCi/L), not an IRIS inhalation RfC like the HEAVY_METALS values
|
|
134
134
|
origin: "A radioactive gas that comes naturally from uranium breaking down in rock, soil, and water. It can leak into buildings through cracks in the foundation. Has no color or smell.",
|
|
135
135
|
impacts: "The second leading cause of lung cancer in the US, after smoking. Linked to about 21,000 lung cancer deaths a year.",
|
|
136
136
|
},
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { PARAMETERS, HEAVY_METALS } from "../pollutants.js";
|
|
2
2
|
|
|
3
3
|
const REQUIRED_FIELDS = ["id", "label", "name", "unit", "type"];
|
|
4
|
+
|
|
5
|
+
// The one type that is not a pollutant. Stated, not derived: deriving the exemption from the
|
|
6
|
+
// entries would make the origin/impacts test assert nothing, since a new entry shipped blank
|
|
7
|
+
// would exempt itself.
|
|
8
|
+
const WEATHER_TYPE = "Weather";
|
|
9
|
+
|
|
4
10
|
const VALID_TYPES = [
|
|
5
11
|
"Particulate Matter",
|
|
6
12
|
"Gas",
|
|
7
13
|
"Volatile Organic Compound",
|
|
8
|
-
|
|
14
|
+
WEATHER_TYPE,
|
|
9
15
|
"Heavy Metal",
|
|
10
16
|
"Heavy Metal - Essential Nutrient",
|
|
11
17
|
];
|
|
@@ -70,7 +76,7 @@ function sharedAssertions(constants) {
|
|
|
70
76
|
// JA-3460: every pollutant needs Origin and Impacts copy. Weather parameters are exempt: they
|
|
71
77
|
// are not pollutants, and the Centralized Constants doc leaves both columns blank for them.
|
|
72
78
|
function hasOriginAndImpacts(constants) {
|
|
73
|
-
const pollutants = Object.entries(constants).filter(([, p]) => p.type !==
|
|
79
|
+
const pollutants = Object.entries(constants).filter(([, p]) => p.type !== WEATHER_TYPE);
|
|
74
80
|
|
|
75
81
|
test.each(pollutants)("%s: origin is populated", (key, pollutant) => {
|
|
76
82
|
expect(typeof pollutant.origin).toBe("string");
|
|
@@ -107,7 +113,7 @@ describe("PARAMETERS", () => {
|
|
|
107
113
|
test("is declared as a Weather parameter in °F", () => {
|
|
108
114
|
expect(PARAMETERS.HI).toBeDefined();
|
|
109
115
|
expect(PARAMETERS.HI.unit).toBe("°F");
|
|
110
|
-
expect(PARAMETERS.HI.type).toBe(
|
|
116
|
+
expect(PARAMETERS.HI.type).toBe(WEATHER_TYPE);
|
|
111
117
|
});
|
|
112
118
|
|
|
113
119
|
test("shares T_AMB's unit, since it is an apparent temperature", () => {
|