child-growth-standards 0.2.0 → 0.2.3
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 +8 -3
- package/dist/acute-malnutrition.d.ts +15 -0
- package/dist/acute-malnutrition.d.ts.map +1 -0
- package/dist/acute-malnutrition.js +24 -0
- package/dist/doh/calculate-doh.d.ts +6 -0
- package/dist/doh/calculate-doh.d.ts.map +1 -1
- package/dist/doh/calculate-doh.js +11 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/who/calculate-who.d.ts.map +1 -1
- package/dist/who/calculate-who.js +19 -1
- package/dist/who/nutritional-status.d.ts +9 -1
- package/dist/who/nutritional-status.d.ts.map +1 -1
- package/dist/who/nutritional-status.js +62 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,9 +48,10 @@ Use **`YYYY-MM-DD`** strings or `Date` values for birth and measurement dates (c
|
|
|
48
48
|
|
|
49
49
|
### NNC (`standard: "nnc"`)
|
|
50
50
|
|
|
51
|
-
- Age for WFA and length/height-for-age: **completed calendar months** (same idea as Excel `DATEDIF(..., "m")`)
|
|
51
|
+
- Age for WFA and length/height-for-age: **completed calendar months** (same idea as Excel `DATEDIF(..., "m")`), with tables through **71 completed months**.
|
|
52
52
|
- Weight-for-**length** applies below **24 months**; weight-for-**height** from **24 up to 59 months** (by month index at measurement).
|
|
53
53
|
- Each indicator returns **`nutritionalStatus`**, **`nutritionalStatusCode`** (e.g. SUW, UW, N, OW, SSt, St, SW, MW, Ob), and **`sdBand`**. **`zScore` is always `null`**.
|
|
54
|
+
- WFL/WFH wasting (**`MW`** / **`SW`**) also includes **`acuteMalnutritionStatus`** and **`acuteMalnutritionStatusCode`** (`MAM` / `SAM`), with eOPT labels unchanged.
|
|
54
55
|
|
|
55
56
|
### WHO (`standard: "who"`)
|
|
56
57
|
|
|
@@ -63,7 +64,7 @@ Use **`YYYY-MM-DD`** strings or `Date` values for birth and measurement dates (c
|
|
|
63
64
|
|
|
64
65
|
| Age | Source |
|
|
65
66
|
|-----|--------|
|
|
66
|
-
| Birth–5 years | [WHO IMCI Table 1 (NBK487900)](https://www.ncbi.nlm.nih.gov/books/NBK487900/table/fm.s1.t1/) — underweight, stunting, wasting
|
|
67
|
+
| Birth–5 years | [WHO IMCI Table 1 (NBK487900)](https://www.ncbi.nlm.nih.gov/books/NBK487900/table/fm.s1.t1/) — underweight, stunting, wasting (with **MAM/SAM** on WFL/WFH/BMI-for-age wasting bands), overweight/obesity; optional **MUAC** (6–59 completed months, <11.5 / 11.5–<12.5 cm) and **bilateral pitting oedema** (SAM) |
|
|
67
68
|
| 5–19 years | [WHO BMI-for-age (5–19)](https://www.who.int/tools/growth-reference-data-for-5to19-years/indicators/bmi-for-age) — thinness, normal weight, overweight, obesity; height-for-age stunting |
|
|
68
69
|
|
|
69
70
|
Head circumference-for-age uses WHO chart bands (below / normal / above expected), not Table 1.
|
|
@@ -80,7 +81,7 @@ await calculateAll({
|
|
|
80
81
|
});
|
|
81
82
|
```
|
|
82
83
|
|
|
83
|
-
Optional **head circumference** (WHO only, when provided):
|
|
84
|
+
Optional **head circumference**, **MUAC (cm)**, and **bilateral pitting oedema** (WHO only, when provided):
|
|
84
85
|
|
|
85
86
|
```ts
|
|
86
87
|
await calculateAll({
|
|
@@ -91,9 +92,13 @@ await calculateAll({
|
|
|
91
92
|
weightKg: 9.5,
|
|
92
93
|
lengthHeightCm: 75,
|
|
93
94
|
headCircumferenceCm: 46,
|
|
95
|
+
muacCm: 12.1,
|
|
96
|
+
bilateralPittingEdema: false,
|
|
94
97
|
});
|
|
95
98
|
```
|
|
96
99
|
|
|
100
|
+
Wasting indicators also expose **`acuteMalnutritionStatus`** / **`acuteMalnutritionStatusCode`** (`MAM` / `SAM`) alongside the legacy “moderately/severely wasted” labels. MUAC and oedema appear as extra results: `mid-upper-arm-circumference`, `bilateral-pitting-oedema`.
|
|
101
|
+
|
|
97
102
|
## Single indicator (WHO only)
|
|
98
103
|
|
|
99
104
|
```ts
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const ACUTE_MAM: {
|
|
2
|
+
readonly status: "Moderate acute malnutrition";
|
|
3
|
+
readonly code: "MAM";
|
|
4
|
+
};
|
|
5
|
+
export declare const ACUTE_SAM: {
|
|
6
|
+
readonly status: "Severe acute malnutrition";
|
|
7
|
+
readonly code: "SAM";
|
|
8
|
+
};
|
|
9
|
+
export type AcuteMalnutritionFields = {
|
|
10
|
+
acuteMalnutritionStatus: string;
|
|
11
|
+
acuteMalnutritionStatusCode: string;
|
|
12
|
+
};
|
|
13
|
+
/** NNC eOPT wasting codes MW/SW → supplementary MAM/SAM (primary labels unchanged). */
|
|
14
|
+
export declare function acuteFieldsForNncWastingCode(code: string): Partial<AcuteMalnutritionFields>;
|
|
15
|
+
//# sourceMappingURL=acute-malnutrition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acute-malnutrition.d.ts","sourceRoot":"","sources":["../src/acute-malnutrition.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,2BAA2B,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,uBAAuB,CAAC,CAclC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const ACUTE_MAM = {
|
|
2
|
+
status: "Moderate acute malnutrition",
|
|
3
|
+
code: "MAM",
|
|
4
|
+
};
|
|
5
|
+
export const ACUTE_SAM = {
|
|
6
|
+
status: "Severe acute malnutrition",
|
|
7
|
+
code: "SAM",
|
|
8
|
+
};
|
|
9
|
+
/** NNC eOPT wasting codes MW/SW → supplementary MAM/SAM (primary labels unchanged). */
|
|
10
|
+
export function acuteFieldsForNncWastingCode(code) {
|
|
11
|
+
if (code === "MW") {
|
|
12
|
+
return {
|
|
13
|
+
acuteMalnutritionStatus: ACUTE_MAM.status,
|
|
14
|
+
acuteMalnutritionStatusCode: ACUTE_MAM.code,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (code === "SW") {
|
|
18
|
+
return {
|
|
19
|
+
acuteMalnutritionStatus: ACUTE_SAM.status,
|
|
20
|
+
acuteMalnutritionStatusCode: ACUTE_SAM.code,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { AssessmentResult, CalculateAllInput, Sex } from "../types.js";
|
|
2
|
+
/** Last month index in bundled NNC WFA/LHFA tables (inclusive). */
|
|
3
|
+
export declare const NNC_MAX_COMPLETED_MONTH_INDEX = 71;
|
|
4
|
+
/** Exclusive upper bound for completed months when NNC age tables apply. */
|
|
5
|
+
export declare const NNC_EXCLUSIVE_MAX_COMPLETED_MONTHS = 72;
|
|
2
6
|
export declare function calculateDohAll(input: CalculateAllInput): AssessmentResult;
|
|
7
|
+
export declare function isNncGrowthAge(months: number): boolean;
|
|
8
|
+
/** @deprecated Use isNncGrowthAge — NNC WFA/LHFA tables run through 71 completed months. */
|
|
3
9
|
export declare function isDohPreschoolAge(months: number): boolean;
|
|
4
10
|
export declare function mapSex(input: string): Sex | null;
|
|
5
11
|
//# sourceMappingURL=calculate-doh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate-doh.d.ts","sourceRoot":"","sources":["../../src/doh/calculate-doh.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"calculate-doh.d.ts","sourceRoot":"","sources":["../../src/doh/calculate-doh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAmB,GAAG,EAAE,MAAM,aAAa,CAAC;AAU7F,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,4EAA4E;AAC5E,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CAoE1E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAOhD"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { acuteFieldsForNncWastingCode } from "../acute-malnutrition.js";
|
|
1
2
|
import { ageInCompletedMonths, ageInDays, resolveDates } from "../age.js";
|
|
2
3
|
import { classifyDohLhfa, classifyDohWfa, classifyDohWflh, } from "./classify-cutoffs.js";
|
|
3
4
|
import { loadDohTable, lookupDohRow, mRoundHalf } from "./load-tables.js";
|
|
4
5
|
const TWENTY_FOUR_MONTHS = 24;
|
|
5
6
|
const SIXTY_MONTHS = 60;
|
|
7
|
+
/** Last month index in bundled NNC WFA/LHFA tables (inclusive). */
|
|
8
|
+
export const NNC_MAX_COMPLETED_MONTH_INDEX = 71;
|
|
9
|
+
/** Exclusive upper bound for completed months when NNC age tables apply. */
|
|
10
|
+
export const NNC_EXCLUSIVE_MAX_COMPLETED_MONTHS = 72;
|
|
6
11
|
export function calculateDohAll(input) {
|
|
7
12
|
const dates = resolveDates(input.dateOfBirth, input.dateOfMeasurement);
|
|
8
13
|
if (!dates) {
|
|
@@ -54,6 +59,7 @@ export function calculateDohAll(input) {
|
|
|
54
59
|
nutritionalStatus: c.label,
|
|
55
60
|
nutritionalStatusCode: c.code,
|
|
56
61
|
sdBand: c.sdBand,
|
|
62
|
+
...acuteFieldsForNncWastingCode(c.code),
|
|
57
63
|
});
|
|
58
64
|
}
|
|
59
65
|
}
|
|
@@ -64,8 +70,12 @@ export function calculateDohAll(input) {
|
|
|
64
70
|
results,
|
|
65
71
|
};
|
|
66
72
|
}
|
|
73
|
+
export function isNncGrowthAge(months) {
|
|
74
|
+
return months >= 0 && months < NNC_EXCLUSIVE_MAX_COMPLETED_MONTHS;
|
|
75
|
+
}
|
|
76
|
+
/** @deprecated Use isNncGrowthAge — NNC WFA/LHFA tables run through 71 completed months. */
|
|
67
77
|
export function isDohPreschoolAge(months) {
|
|
68
|
-
return months
|
|
78
|
+
return isNncGrowthAge(months);
|
|
69
79
|
}
|
|
70
80
|
export function mapSex(input) {
|
|
71
81
|
const n = String(input ?? "")
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { calculateAll, calculateZScore } from "./calculate.js";
|
|
2
2
|
export { ageInCompletedMonths, ageInDays, daysToMonths, resolveDates, toDateOnly, FIVE_YEARS_DAYS, NINETEEN_YEARS_DAYS, WHO_DAYS_PER_MONTH, } from "./age.js";
|
|
3
|
-
export { mapWhoNutritionalStatus } from "./who/nutritional-status.js";
|
|
3
|
+
export { MUAC_CLASSIFICATION_MAX_MONTHS, MUAC_CLASSIFICATION_MIN_MONTHS, indicatorResultFromWhoStatus, mapWhoEdemaNutritionalStatus, mapWhoMuacNutritionalStatus, mapWhoNutritionalStatus, } from "./who/nutritional-status.js";
|
|
4
|
+
export { calculateDohAll, isDohPreschoolAge, isNncGrowthAge, mapSex, NNC_EXCLUSIVE_MAX_COMPLETED_MONTHS, NNC_MAX_COMPLETED_MONTH_INDEX, } from "./doh/calculate-doh.js";
|
|
4
5
|
export { computeZScore, lookupLms, normalCdf, zScoreToPercentile } from "./lms.js";
|
|
5
6
|
export type { AssessmentResult, CalculateAllInput, CalculateZScoreInput, GrowthStandard, IndicatorResult, Sex, WhoAgeIndex, WhoNutritionalStatusReference, WhoNutritionalStatusResult, LmsRow, DohBandRow, } from "./types.js";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnF,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,GAAG,EACH,WAAW,EACX,6BAA6B,EAC7B,0BAA0B,EAC1B,MAAM,EACN,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { calculateAll, calculateZScore } from "./calculate.js";
|
|
2
2
|
export { ageInCompletedMonths, ageInDays, daysToMonths, resolveDates, toDateOnly, FIVE_YEARS_DAYS, NINETEEN_YEARS_DAYS, WHO_DAYS_PER_MONTH, } from "./age.js";
|
|
3
|
-
export { mapWhoNutritionalStatus } from "./who/nutritional-status.js";
|
|
3
|
+
export { MUAC_CLASSIFICATION_MAX_MONTHS, MUAC_CLASSIFICATION_MIN_MONTHS, indicatorResultFromWhoStatus, mapWhoEdemaNutritionalStatus, mapWhoMuacNutritionalStatus, mapWhoNutritionalStatus, } from "./who/nutritional-status.js";
|
|
4
|
+
export { calculateDohAll, isDohPreschoolAge, isNncGrowthAge, mapSex, NNC_EXCLUSIVE_MAX_COMPLETED_MONTHS, NNC_MAX_COMPLETED_MONTH_INDEX, } from "./doh/calculate-doh.js";
|
|
4
5
|
export { computeZScore, lookupLms, normalCdf, zScoreToPercentile } from "./lms.js";
|
package/dist/types.d.ts
CHANGED
|
@@ -9,6 +9,10 @@ export type CalculateAllInput = {
|
|
|
9
9
|
weightKg: number;
|
|
10
10
|
lengthHeightCm: number;
|
|
11
11
|
headCircumferenceCm?: number;
|
|
12
|
+
/** WHO only: mid-upper arm circumference in cm (IMCI Table 1 SAM/MAM cutoffs use mm internally). */
|
|
13
|
+
muacCm?: number;
|
|
14
|
+
/** WHO only: bilateral pitting oedema → severe acute malnutrition (Table 1). */
|
|
15
|
+
bilateralPittingEdema?: boolean;
|
|
12
16
|
/** WHO only: age index for 0–5 age-based indicators. Default `days`. */
|
|
13
17
|
whoAgeIndex?: WhoAgeIndex;
|
|
14
18
|
};
|
|
@@ -22,6 +26,9 @@ export type WhoNutritionalStatusResult = {
|
|
|
22
26
|
nutritionalStatusCode: string;
|
|
23
27
|
sdBand: string;
|
|
24
28
|
reference: WhoNutritionalStatusReference;
|
|
29
|
+
/** Table 1 MAM/SAM when anthropometric wasting or MUAC/edema applies. */
|
|
30
|
+
acuteMalnutritionStatus?: string;
|
|
31
|
+
acuteMalnutritionStatusCode?: string;
|
|
25
32
|
};
|
|
26
33
|
export type IndicatorResult = {
|
|
27
34
|
indicator: string;
|
|
@@ -29,6 +36,8 @@ export type IndicatorResult = {
|
|
|
29
36
|
nutritionalStatus: string;
|
|
30
37
|
nutritionalStatusCode?: string;
|
|
31
38
|
sdBand?: string;
|
|
39
|
+
acuteMalnutritionStatus?: string;
|
|
40
|
+
acuteMalnutritionStatusCode?: string;
|
|
32
41
|
percentile?: number | null;
|
|
33
42
|
};
|
|
34
43
|
export type AssessmentResult = {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3C,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,iBAAiB,EAAE,IAAI,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG;IACrD,SAAS,EACL,gBAAgB,GAChB,uBAAuB,GACvB,aAAa,GACb,4BAA4B,GAC5B,mBAAmB,GACnB,mBAAmB,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAE1F,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3C,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,iBAAiB,EAAE,IAAI,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oGAAoG;IACpG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,wEAAwE;IACxE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG;IACrD,SAAS,EACL,gBAAgB,GAChB,uBAAuB,GACvB,aAAa,GACb,4BAA4B,GAC5B,mBAAmB,GACnB,mBAAmB,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAE1F,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,6BAA6B,CAAC;IACzC,yEAAyE;IACzE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate-who.d.ts","sourceRoot":"","sources":["../../src/who/calculate-who.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"calculate-who.d.ts","sourceRoot":"","sources":["../../src/who/calculate-who.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAChB,MAAM,aAAa,CAAC;AAgDrB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,GAAG,IAAI,CA8CtF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CA+C1E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ageInCompletedMonths, ageInDays, resolveDates } from "../age.js";
|
|
2
2
|
import { computeZScore, lookupLms, zScoreToPercentile } from "../lms.js";
|
|
3
|
-
import { mapWhoNutritionalStatus } from "./nutritional-status.js";
|
|
3
|
+
import { indicatorResultFromWhoStatus, mapWhoEdemaNutritionalStatus, mapWhoMuacNutritionalStatus, mapWhoNutritionalStatus, } from "./nutritional-status.js";
|
|
4
4
|
import { resolveWhoLms } from "./resolve-table.js";
|
|
5
5
|
const TWENTY_FOUR_MONTHS_DAYS = 731;
|
|
6
6
|
function rawBmi(weightKg, heightCm) {
|
|
@@ -86,6 +86,12 @@ export function calculateWhoZScore(input) {
|
|
|
86
86
|
nutritionalStatus: ns.nutritionalStatus,
|
|
87
87
|
nutritionalStatusCode: ns.nutritionalStatusCode,
|
|
88
88
|
sdBand: ns.sdBand,
|
|
89
|
+
...(ns.acuteMalnutritionStatus
|
|
90
|
+
? {
|
|
91
|
+
acuteMalnutritionStatus: ns.acuteMalnutritionStatus,
|
|
92
|
+
acuteMalnutritionStatusCode: ns.acuteMalnutritionStatusCode,
|
|
93
|
+
}
|
|
94
|
+
: {}),
|
|
89
95
|
percentile: zScoreToPercentile(z),
|
|
90
96
|
};
|
|
91
97
|
}
|
|
@@ -116,5 +122,17 @@ export function calculateWhoAll(input) {
|
|
|
116
122
|
if (row)
|
|
117
123
|
results.push(row);
|
|
118
124
|
}
|
|
125
|
+
if (input.muacCm != null) {
|
|
126
|
+
const muacNs = mapWhoMuacNutritionalStatus(input.muacCm, months);
|
|
127
|
+
if (muacNs) {
|
|
128
|
+
results.push(indicatorResultFromWhoStatus("mid-upper-arm-circumference", muacNs));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (input.bilateralPittingEdema) {
|
|
132
|
+
const edemaNs = mapWhoEdemaNutritionalStatus(true);
|
|
133
|
+
if (edemaNs) {
|
|
134
|
+
results.push(indicatorResultFromWhoStatus("bilateral-pitting-oedema", edemaNs));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
119
137
|
return { standard: "who", ageDays: days, ageMonthsCompleted: months, results };
|
|
120
138
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import type { WhoNutritionalStatusResult } from "../types.js";
|
|
1
|
+
import type { IndicatorResult, WhoNutritionalStatusResult } from "../types.js";
|
|
2
2
|
export type WhoIndicatorKind = "wfa" | "hfa" | "lhfa" | "wfl" | "wfh" | "bfa" | "hcfa";
|
|
3
|
+
/** IMCI MUAC classification typically applies at 6–59 completed months. */
|
|
4
|
+
export declare const MUAC_CLASSIFICATION_MIN_MONTHS = 6;
|
|
5
|
+
export declare const MUAC_CLASSIFICATION_MAX_MONTHS = 59;
|
|
3
6
|
export declare function mapWhoNutritionalStatus(indicatorKind: WhoIndicatorKind, zScore: number, ageInDays: number): WhoNutritionalStatusResult;
|
|
7
|
+
/** Table 1 MUAC cutoffs (115 mm / 125 mm), input in cm. */
|
|
8
|
+
export declare function mapWhoMuacNutritionalStatus(muacCm: number, ageMonthsCompleted: number): WhoNutritionalStatusResult | null;
|
|
9
|
+
/** Table 1: bilateral pitting oedema → severe acute malnutrition. */
|
|
10
|
+
export declare function mapWhoEdemaNutritionalStatus(bilateralPittingEdema: boolean): WhoNutritionalStatusResult | null;
|
|
11
|
+
export declare function indicatorResultFromWhoStatus(indicator: string, ns: WhoNutritionalStatusResult, zScore?: number | null, percentile?: number | null): IndicatorResult;
|
|
4
12
|
//# sourceMappingURL=nutritional-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nutritional-status.d.ts","sourceRoot":"","sources":["../../src/who/nutritional-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nutritional-status.d.ts","sourceRoot":"","sources":["../../src/who/nutritional-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EAEf,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAUvF,2EAA2E;AAC3E,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAuLjD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,gBAAgB,EAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,0BAA0B,CAkC5B;AAED,2DAA2D;AAC3D,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,0BAA0B,GAAG,IAAI,CA8BnC;AAED,qEAAqE;AACrE,wBAAgB,4BAA4B,CAC1C,qBAAqB,EAAE,OAAO,GAC7B,0BAA0B,GAAG,IAAI,CAUnC;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,0BAA0B,EAC9B,MAAM,GAAE,MAAM,GAAG,IAAW,EAC5B,UAAU,GAAE,MAAM,GAAG,IAAW,GAC/B,eAAe,CAejB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ACUTE_MAM, ACUTE_SAM } from "../acute-malnutrition.js";
|
|
1
2
|
import { FIVE_YEARS_DAYS } from "../age.js";
|
|
2
3
|
function normalizeKind(kind) {
|
|
3
4
|
if (kind === "wfh")
|
|
@@ -6,8 +7,24 @@ function normalizeKind(kind) {
|
|
|
6
7
|
return "hfa";
|
|
7
8
|
return kind;
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
const MUAC_SAM_MAX_CM = 11.5;
|
|
11
|
+
const MUAC_MAM_MAX_CM = 12.5;
|
|
12
|
+
/** IMCI MUAC classification typically applies at 6–59 completed months. */
|
|
13
|
+
export const MUAC_CLASSIFICATION_MIN_MONTHS = 6;
|
|
14
|
+
export const MUAC_CLASSIFICATION_MAX_MONTHS = 59;
|
|
15
|
+
function result(nutritionalStatus, nutritionalStatusCode, sdBand, reference, acute) {
|
|
16
|
+
return {
|
|
17
|
+
nutritionalStatus,
|
|
18
|
+
nutritionalStatusCode,
|
|
19
|
+
sdBand,
|
|
20
|
+
reference,
|
|
21
|
+
...(acute
|
|
22
|
+
? {
|
|
23
|
+
acuteMalnutritionStatus: acute.status,
|
|
24
|
+
acuteMalnutritionStatusCode: acute.code,
|
|
25
|
+
}
|
|
26
|
+
: {}),
|
|
27
|
+
};
|
|
11
28
|
}
|
|
12
29
|
function whoSdBand(z, kind, underFive) {
|
|
13
30
|
if (kind === "hcfa") {
|
|
@@ -114,10 +131,10 @@ function mapHfaFiveToNineteen(z) {
|
|
|
114
131
|
function mapWflUnderFive(z) {
|
|
115
132
|
const ref = "who-imci-table1-0-5";
|
|
116
133
|
if (z < -3) {
|
|
117
|
-
return result("Severely wasted", "SEV_W", "< −3 SD", ref);
|
|
134
|
+
return result("Severely wasted", "SEV_W", "< −3 SD", ref, ACUTE_SAM);
|
|
118
135
|
}
|
|
119
136
|
if (z <= -2) {
|
|
120
|
-
return result("Moderately wasted", "MOD_W", "−3 SD to −2 SD", ref);
|
|
137
|
+
return result("Moderately wasted", "MOD_W", "−3 SD to −2 SD", ref, ACUTE_MAM);
|
|
121
138
|
}
|
|
122
139
|
if (z <= 1) {
|
|
123
140
|
return result("Normal", "N", "−2 SD to +1 SD", ref);
|
|
@@ -187,3 +204,44 @@ export function mapWhoNutritionalStatus(indicatorKind, zScore, ageInDays) {
|
|
|
187
204
|
}
|
|
188
205
|
return result("", "", "", underFive ? "who-imci-table1-0-5" : "who-growth-ref-5-19");
|
|
189
206
|
}
|
|
207
|
+
/** Table 1 MUAC cutoffs (115 mm / 125 mm), input in cm. */
|
|
208
|
+
export function mapWhoMuacNutritionalStatus(muacCm, ageMonthsCompleted) {
|
|
209
|
+
const muac = Number(muacCm);
|
|
210
|
+
if (!Number.isFinite(muac) || muac <= 0)
|
|
211
|
+
return null;
|
|
212
|
+
if (ageMonthsCompleted < MUAC_CLASSIFICATION_MIN_MONTHS ||
|
|
213
|
+
ageMonthsCompleted > MUAC_CLASSIFICATION_MAX_MONTHS) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
const ref = "who-imci-table1-0-5";
|
|
217
|
+
if (muac < MUAC_SAM_MAX_CM) {
|
|
218
|
+
return result("Severe acute malnutrition (MUAC)", "SAM", "< 11.5 cm", ref, ACUTE_SAM);
|
|
219
|
+
}
|
|
220
|
+
if (muac < MUAC_MAM_MAX_CM) {
|
|
221
|
+
return result("Moderate acute malnutrition (MUAC)", "MAM", "11.5 cm to < 12.5 cm", ref, ACUTE_MAM);
|
|
222
|
+
}
|
|
223
|
+
return result("Normal (MUAC)", "N", "≥ 12.5 cm", ref);
|
|
224
|
+
}
|
|
225
|
+
/** Table 1: bilateral pitting oedema → severe acute malnutrition. */
|
|
226
|
+
export function mapWhoEdemaNutritionalStatus(bilateralPittingEdema) {
|
|
227
|
+
if (!bilateralPittingEdema)
|
|
228
|
+
return null;
|
|
229
|
+
const ref = "who-imci-table1-0-5";
|
|
230
|
+
return result("Severe acute malnutrition (bilateral pitting oedema)", "SAM", "Clinical", ref, ACUTE_SAM);
|
|
231
|
+
}
|
|
232
|
+
export function indicatorResultFromWhoStatus(indicator, ns, zScore = null, percentile = null) {
|
|
233
|
+
return {
|
|
234
|
+
indicator,
|
|
235
|
+
zScore,
|
|
236
|
+
nutritionalStatus: ns.nutritionalStatus,
|
|
237
|
+
nutritionalStatusCode: ns.nutritionalStatusCode,
|
|
238
|
+
sdBand: ns.sdBand,
|
|
239
|
+
...(ns.acuteMalnutritionStatus
|
|
240
|
+
? {
|
|
241
|
+
acuteMalnutritionStatus: ns.acuteMalnutritionStatus,
|
|
242
|
+
acuteMalnutritionStatusCode: ns.acuteMalnutritionStatusCode,
|
|
243
|
+
}
|
|
244
|
+
: {}),
|
|
245
|
+
...(percentile != null ? { percentile } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|