fix(illness): gate the recovery-gap floor on adverse-direction days

The cross-episode typical-gap median counts an episode toward its
qualifying-days floor via the per-episode coverage `historyDays`, which
counts a day if ANY banded vital has a reading. A WEIGHT-only episode (no
illness-adverse direction) could therefore clear the floor and feed the
median despite carrying no illness-relevant signal, weakening the honest-
sample claim.

Compute a distinct-adverse-day count in the engine — days with at least
one notable reading in the metric's adverse direction — and feed that as
the qualifying-days floor instead. Reuses the engine's single adverse-
direction predicate (now exported as `isAdverseDeviation`); a neutral-
direction vital never counts a day. The insufficient arm contributes 0,
which is correct since its gap is null and never reaches the median.
This commit is contained in:
Marc-André Bombeck committed 2026-06-21 14:07:44 +02:00
1 parent 62a4dfdf7e
commit 36affd5daf
6 files changed
+151 -7

No files matched your search

+5
View File
@@ -20279,6 +20279,10 @@ components:
anyOf:
- type: number
- type: "null"
adverseCoverageDays:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
feltBetterDay:
anyOf:
- type: string
@@ -20293,6 +20297,7 @@ components:
- nadir
- returns
- recoveryGapDays
- adverseCoverageDays
- feltBetterDay
- redFlags
additionalProperties: false