pediatric-ai-scribe-v3/e2e/fixtures/calc-vectors.json
Daniel ff4b3de988 feat(client): port Bilirubin + Fenton calculators with captured vectors
Ships the AAP 2022 phototherapy/exchange nomograms, the Bhutani 1999
risk zones, and the Fenton 2013 preterm weight-for-GA chart as real
React calculators. These were the high-risk "table-driven" ports the
migration checkpoint flagged as needing captured vectors before
landing — the whole vector-capture workflow now exists and can be
reused for BP / BMI / growth-beyond-Fenton next.

Workflow, so future calculator ports have a template:

scripts/capture-calc-vectors.js
  Standalone Node script. Data tables + math inlined VERBATIM from
  public/js/calculators.js (no rewriting, no reformatting). Picks 83
  carefully chosen test cases — edge-of-domain, table-key-exact,
  interpolated-between-keys, and clinical-decision-boundary values —
  and emits e2e/fixtures/calc-vectors.json with
  { inputs, output } pairs produced by the authoritative math.

e2e/fixtures/calc-vectors.json
  12 Bhutani cases, 58 AAP 2022 cases, 13 Fenton cases. Re-run
  capture-calc-vectors.js whenever the vanilla file changes.

shared/clinical/bilirubin.ts
  • 17 HourTable constants ported byte-for-byte from calculators.js
    lines 1489-1512: photo 35w/36w/37w/38w/39w/40+ (low risk) +
    35w/36w/37w/38+ (medium risk), same 8 for exchange.
  • Bhutani zones (p95/p75/p40) from lines 1644-1651.
  • interpolateThreshold helper (lines 1514-1525).
  • classifyBhutani + classifyAapBili functions mirror the vanilla
    click-handler logic.

shared/clinical/fenton.ts
  • 15-week × 2-sex LMS table from lines 1168-1183 preserved entry-
    for-entry.
  • interpolateLMS + calcZ + zToPercentile (Abramowitz & Stegun
    normal CDF, lines 2299-2326) ported byte-for-byte.
  • fentonWeightForAge returns { L, M, S, z, percentile };
    classifySizeForAge labels SGA/<10 / AGA / LGA/>90.

shared/clinical/bilirubin.test.ts + fenton.test.ts
  Vitest suites that import e2e/fixtures/calc-vectors.json and assert
  classifyBhutani / classifyAapBili / fentonWeightForAge match
  every captured vector to 10 decimal places for threshold values
  and 6 decimals for the Fenton M (grams, so 6 is >= 1e-3 g).
  All 102 tests pass locally (19 prior + 70 bili + 13 Fenton).

client/src/pages/Calculators.tsx
  • BiliPanel with AAP 2022 / Bhutani mode switch, GA + risk-factor
    dropdowns, color-coded status / zone badges, both threshold
    pairs surfaced in the result grid.
  • GrowthPanel runs Fenton with sex + GA + weight inputs, emits
    Z-score, percentile, L/M/S reference, and SGA/AGA/LGA label.
  • PILLS flags bili + growth as ported: true; ActivePanel routes to
    the new components. BP / BMI / vitals / resus / equipment
    remain legacy-linked until their own vectors land.

e2e/tests/calculators-react.spec.js
  Three new parity tests covering above-phototherapy/above-exchange
  transitions (38w 72h TSB 20 → phototherapy; TSB 26 → exchange),
  Bhutani high-risk classification at 36h TSB 13, and Fenton 32w
  male 1795g landing exactly at 50th percentile AGA.

Backend tsc + client tsc + vite build + vitest (102/102) all green.
Bundle 619 kB / 178 kB gz (+10 kB for the bili tables).
2026-04-24 01:49:45 +02:00

1173 lines
No EOL
24 KiB
JSON

{
"generatedAt": "2026-04-23T23:44:54.613Z",
"source": "public/js/calculators.js",
"bhutani": [
{
"name": "Bhutani low-end (6h)",
"inputs": {
"hours": 6,
"tsb": 5
},
"output": {
"p95": 6,
"p75": 4.5,
"p40": 3,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani high-end (120h)",
"inputs": {
"hours": 120,
"tsb": 18
},
"output": {
"p95": 19,
"p75": 16,
"p40": 13.2,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani exactly p95 at 24h",
"inputs": {
"hours": 24,
"tsb": 9.6
},
"output": {
"p95": 9.6,
"p75": 7.8,
"p40": 6.2,
"zone": "High-Risk"
}
},
{
"name": "Bhutani exactly p75 at 24h",
"inputs": {
"hours": 24,
"tsb": 7.8
},
"output": {
"p95": 9.6,
"p75": 7.8,
"p40": 6.2,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani exactly p40 at 24h",
"inputs": {
"hours": 24,
"tsb": 6.2
},
"output": {
"p95": 9.6,
"p75": 7.8,
"p40": 6.2,
"zone": "Low-Intermediate"
}
},
{
"name": "Bhutani interpolated 27h",
"inputs": {
"hours": 27,
"tsb": 9
},
"output": {
"p95": 10.399999999999999,
"p75": 8.5,
"p40": 6.7,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani interpolated 45h",
"inputs": {
"hours": 45,
"tsb": 13
},
"output": {
"p95": 14.3,
"p75": 12.1,
"p40": 9.6,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani interpolated 78h",
"inputs": {
"hours": 78,
"tsb": 16
},
"output": {
"p95": 17.7,
"p75": 15.2,
"p40": 12.399999999999999,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani low-risk 36h",
"inputs": {
"hours": 36,
"tsb": 7
},
"output": {
"p95": 12.8,
"p75": 10.6,
"p40": 8.4,
"zone": "Low-Risk"
}
},
{
"name": "Bhutani low-intermediate 36h",
"inputs": {
"hours": 36,
"tsb": 9
},
"output": {
"p95": 12.8,
"p75": 10.6,
"p40": 8.4,
"zone": "Low-Intermediate"
}
},
{
"name": "Bhutani high-intermediate 36h",
"inputs": {
"hours": 36,
"tsb": 11
},
"output": {
"p95": 12.8,
"p75": 10.6,
"p40": 8.4,
"zone": "High-Intermediate"
}
},
{
"name": "Bhutani high-risk 36h",
"inputs": {
"hours": 36,
"tsb": 15
},
"output": {
"p95": 12.8,
"p75": 10.6,
"p40": 8.4,
"zone": "High-Risk"
}
}
],
"aap": [
{
"name": "AAP 35w low-risk at 12h",
"inputs": {
"gaWeeks": 35,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 8.5,
"exchangeThreshold": 16.4,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w low-risk at 48h",
"inputs": {
"gaWeeks": 35,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 14.2,
"exchangeThreshold": 20.7,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w low-risk at 96h",
"inputs": {
"gaWeeks": 35,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 18.6,
"exchangeThreshold": 24.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 35w low-risk at 31.5h",
"inputs": {
"gaWeeks": 35,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 11.8,
"exchangeThreshold": 18.85,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w medium-risk at 12h",
"inputs": {
"gaWeeks": 35,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 6.9,
"exchangeThreshold": 14.6,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w medium-risk at 48h",
"inputs": {
"gaWeeks": 35,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 12.2,
"exchangeThreshold": 18.5,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w medium-risk at 96h",
"inputs": {
"gaWeeks": 35,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 16.1,
"exchangeThreshold": 21.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 35,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 10,
"exchangeThreshold": 16.95,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w low-risk at 12h",
"inputs": {
"gaWeeks": 36,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 9,
"exchangeThreshold": 17.5,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w low-risk at 48h",
"inputs": {
"gaWeeks": 36,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 14.8,
"exchangeThreshold": 21.9,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w low-risk at 96h",
"inputs": {
"gaWeeks": 36,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 19.3,
"exchangeThreshold": 25.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 36w low-risk at 31.5h",
"inputs": {
"gaWeeks": 36,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 12.4,
"exchangeThreshold": 20.05,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w medium-risk at 12h",
"inputs": {
"gaWeeks": 36,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 7.4,
"exchangeThreshold": 15.2,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w medium-risk at 48h",
"inputs": {
"gaWeeks": 36,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 12.8,
"exchangeThreshold": 19.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w medium-risk at 96h",
"inputs": {
"gaWeeks": 36,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 17,
"exchangeThreshold": 22.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 36w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 36,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 10.6,
"exchangeThreshold": 17.45,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w low-risk at 12h",
"inputs": {
"gaWeeks": 37,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 9.6,
"exchangeThreshold": 18.7,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w low-risk at 48h",
"inputs": {
"gaWeeks": 37,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 15.4,
"exchangeThreshold": 23.1,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 37w low-risk at 96h",
"inputs": {
"gaWeeks": 37,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 20,
"exchangeThreshold": 26.6,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 37w low-risk at 31.5h",
"inputs": {
"gaWeeks": 37,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 12.95,
"exchangeThreshold": 21.25,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w medium-risk at 12h",
"inputs": {
"gaWeeks": 37,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 8,
"exchangeThreshold": 15.7,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w medium-risk at 48h",
"inputs": {
"gaWeeks": 37,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 13.5,
"exchangeThreshold": 19.7,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w medium-risk at 96h",
"inputs": {
"gaWeeks": 37,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 17.9,
"exchangeThreshold": 23.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 37w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 37,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 11.2,
"exchangeThreshold": 18.05,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 38w low-risk at 12h",
"inputs": {
"gaWeeks": 38,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 10.1,
"exchangeThreshold": 19.7,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 38w low-risk at 48h",
"inputs": {
"gaWeeks": 38,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 16,
"exchangeThreshold": 24,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 38w low-risk at 96h",
"inputs": {
"gaWeeks": 38,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 20.7,
"exchangeThreshold": 27,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 38w low-risk at 31.5h",
"inputs": {
"gaWeeks": 38,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 13.5,
"exchangeThreshold": 22.25,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 38w medium-risk at 12h",
"inputs": {
"gaWeeks": 38,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 8.5,
"exchangeThreshold": 16.3,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 38w medium-risk at 48h",
"inputs": {
"gaWeeks": 38,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 14,
"exchangeThreshold": 20.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 38w medium-risk at 96h",
"inputs": {
"gaWeeks": 38,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 18.2,
"exchangeThreshold": 23.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 38w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 38,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 11.7,
"exchangeThreshold": 18.45,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 39w low-risk at 12h",
"inputs": {
"gaWeeks": 39,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 10.6,
"exchangeThreshold": 19.7,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 39w low-risk at 48h",
"inputs": {
"gaWeeks": 39,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 16.6,
"exchangeThreshold": 24,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 39w low-risk at 96h",
"inputs": {
"gaWeeks": 39,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 21.5,
"exchangeThreshold": 27,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 39w low-risk at 31.5h",
"inputs": {
"gaWeeks": 39,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 14.1,
"exchangeThreshold": 22.25,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 39w medium-risk at 12h",
"inputs": {
"gaWeeks": 39,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 8.5,
"exchangeThreshold": 16.3,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 39w medium-risk at 48h",
"inputs": {
"gaWeeks": 39,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 14,
"exchangeThreshold": 20.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 39w medium-risk at 96h",
"inputs": {
"gaWeeks": 39,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 18.2,
"exchangeThreshold": 23.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 39w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 39,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 11.7,
"exchangeThreshold": 18.45,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 40w low-risk at 12h",
"inputs": {
"gaWeeks": 40,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 11.2,
"exchangeThreshold": 19.7,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 40w low-risk at 48h",
"inputs": {
"gaWeeks": 40,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 17.2,
"exchangeThreshold": 24,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 40w low-risk at 96h",
"inputs": {
"gaWeeks": 40,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 22.3,
"exchangeThreshold": 27,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 40w low-risk at 31.5h",
"inputs": {
"gaWeeks": 40,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 14.649999999999999,
"exchangeThreshold": 22.25,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 40w medium-risk at 12h",
"inputs": {
"gaWeeks": 40,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 8.5,
"exchangeThreshold": 16.3,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 40w medium-risk at 48h",
"inputs": {
"gaWeeks": 40,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 14,
"exchangeThreshold": 20.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 40w medium-risk at 96h",
"inputs": {
"gaWeeks": 40,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 18.2,
"exchangeThreshold": 23.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 40w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 40,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 11.7,
"exchangeThreshold": 18.45,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 41w low-risk at 12h",
"inputs": {
"gaWeeks": 41,
"hours": 12,
"tsb": 10,
"risk": "low"
},
"output": {
"photoThreshold": 11.2,
"exchangeThreshold": 19.7,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 41w low-risk at 48h",
"inputs": {
"gaWeeks": 41,
"hours": 48,
"tsb": 15,
"risk": "low"
},
"output": {
"photoThreshold": 17.2,
"exchangeThreshold": 24,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 41w low-risk at 96h",
"inputs": {
"gaWeeks": 41,
"hours": 96,
"tsb": 18,
"risk": "low"
},
"output": {
"photoThreshold": 22.3,
"exchangeThreshold": 27,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 41w low-risk at 31.5h",
"inputs": {
"gaWeeks": 41,
"hours": 31.5,
"tsb": 13,
"risk": "low"
},
"output": {
"photoThreshold": 14.649999999999999,
"exchangeThreshold": 22.25,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 41w medium-risk at 12h",
"inputs": {
"gaWeeks": 41,
"hours": 12,
"tsb": 10,
"risk": "medium"
},
"output": {
"photoThreshold": 8.5,
"exchangeThreshold": 16.3,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 41w medium-risk at 48h",
"inputs": {
"gaWeeks": 41,
"hours": 48,
"tsb": 15,
"risk": "medium"
},
"output": {
"photoThreshold": 14,
"exchangeThreshold": 20.1,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 41w medium-risk at 96h",
"inputs": {
"gaWeeks": 41,
"hours": 96,
"tsb": 18,
"risk": "medium"
},
"output": {
"photoThreshold": 18.2,
"exchangeThreshold": 23.5,
"status": "Below Phototherapy"
}
},
{
"name": "AAP 41w medium-risk at 31.5h",
"inputs": {
"gaWeeks": 41,
"hours": 31.5,
"tsb": 13,
"risk": "medium"
},
"output": {
"photoThreshold": 11.7,
"exchangeThreshold": 18.45,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 38w low-risk at 72h TSB 19 (above exchange boundary)",
"inputs": {
"gaWeeks": 38,
"hours": 72,
"tsb": 19,
"risk": "low"
},
"output": {
"photoThreshold": 18.8,
"exchangeThreshold": 25.9,
"status": "Above Phototherapy"
}
},
{
"name": "AAP 35w medium-risk at 72h TSB 16 (above phototherapy)",
"inputs": {
"gaWeeks": 35,
"hours": 72,
"tsb": 16,
"risk": "medium"
},
"output": {
"photoThreshold": 14.6,
"exchangeThreshold": 20.1,
"status": "Above Phototherapy"
}
}
],
"fenton": [
{
"name": "Fenton male 22w at 500g",
"inputs": {
"sex": "male",
"gaWeeks": 22,
"weightGrams": 500
},
"output": {
"L": 0.21,
"M": 496,
"S": 0.17,
"z": 0.047287939204605584,
"percentile": 51.885833800698336
}
},
{
"name": "Fenton female 22w at 500g",
"inputs": {
"sex": "female",
"gaWeeks": 22,
"weightGrams": 500
},
"output": {
"L": 0.23,
"M": 474,
"S": 0.17,
"z": 0.316059190595063,
"percentile": 62.402124398294
}
},
{
"name": "Fenton male 50w at 5500g",
"inputs": {
"sex": "male",
"gaWeeks": 50,
"weightGrams": 5500
},
"output": {
"L": -0.08,
"M": 5760,
"S": 0.12,
"z": -0.38562355034470663,
"percentile": 34.988770484472916
}
},
{
"name": "Fenton female 50w at 5500g",
"inputs": {
"sex": "female",
"gaWeeks": 50,
"weightGrams": 5500
},
"output": {
"L": -0.08,
"M": 5510,
"S": 0.12,
"z": -0.015138857701463284,
"percentile": 49.39605205989605
}
},
{
"name": "Fenton male 28w at 1124g (M)",
"inputs": {
"sex": "male",
"gaWeeks": 28,
"weightGrams": 1124
},
"output": {
"L": 0.2,
"M": 1124,
"S": 0.15,
"z": 0,
"percentile": 49.999985009951
}
},
{
"name": "Fenton female 30w at 1330g (M)",
"inputs": {
"sex": "female",
"gaWeeks": 30,
"weightGrams": 1330
},
"output": {
"L": 0.19,
"M": 1330,
"S": 0.14,
"z": 0,
"percentile": 49.999985009951
}
},
{
"name": "Fenton male 33w at 2000g",
"inputs": {
"sex": "male",
"gaWeeks": 33,
"weightGrams": 2000
},
"output": {
"L": 0.135,
"M": 2012.5,
"S": 0.135,
"z": -0.04613281594088144,
"percentile": 48.160198738764876
}
},
{
"name": "Fenton female 37w at 2800g",
"inputs": {
"sex": "female",
"gaWeeks": 37,
"weightGrams": 2800
},
"output": {
"L": 0.06,
"M": 2770,
"S": 0.125,
"z": 0.08620463099375068,
"percentile": 53.43483259892393
}
},
{
"name": "Fenton male 40.5w at 3600g",
"inputs": {
"sex": "male",
"gaWeeks": 40.5,
"weightGrams": 3600
},
"output": {
"L": 0.0025000000000000005,
"M": 3602.5,
"S": 0.12,
"z": -0.005785023559079504,
"percentile": 49.76919596364795
}
},
{
"name": "Fenton male 40w at 3500g",
"inputs": {
"sex": "male",
"gaWeeks": 40,
"weightGrams": 3500
},
"output": {
"L": 0.010000000000000002,
"M": 3530,
"S": 0.12,
"z": -0.07112115197836313,
"percentile": 47.16504593912861
}
},
{
"name": "Fenton female 40w at 3200g",
"inputs": {
"sex": "female",
"gaWeeks": 40,
"weightGrams": 3200
},
"output": {
"L": 0.010000000000000002,
"M": 3340,
"S": 0.12,
"z": -0.3567569227545345,
"percentile": 36.06368591694203
}
},
{
"name": "Fenton male 36w SGA 2000g",
"inputs": {
"sex": "male",
"gaWeeks": 36,
"weightGrams": 2000
},
"output": {
"L": 0.08,
"M": 2710,
"S": 0.13,
"z": -2.3087643791484385,
"percentile": 1.0478301468925577
}
},
{
"name": "Fenton female 36w LGA 3400g",
"inputs": {
"sex": "female",
"gaWeeks": 36,
"weightGrams": 3400
},
"output": {
"L": 0.08,
"M": 2540,
"S": 0.13,
"z": 2.269534182832241,
"percentile": 98.83821062755833
}
}
]
}