@mongrov/analytics 0.24.0 → 0.25.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/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/reading-quality.d.ts +90 -0
- package/dist/core/reading-quality.d.ts.map +1 -0
- package/dist/core/reading-quality.js +247 -0
- package/dist/core/reading-quality.js.map +1 -0
- package/dist/core/warehouse.d.ts.map +1 -1
- package/dist/core/warehouse.js +21 -0
- package/dist/core/warehouse.js.map +1 -1
- package/dist/rules/compiler.d.ts.map +1 -1
- package/dist/rules/compiler.js +4 -1
- package/dist/rules/compiler.js.map +1 -1
- package/dist/sync/baseline-compute.d.ts.map +1 -1
- package/dist/sync/baseline-compute.js +4 -1
- package/dist/sync/baseline-compute.js.map +1 -1
- package/dist/tools/impls/anomaly.js +1 -1
- package/dist/tools/impls/compare.js +1 -1
- package/dist/tools/impls/hrv.js +1 -1
- package/dist/tools/impls/spo2.js +1 -1
- package/dist/tools/impls/temperature.js +1 -1
- package/package.json +1 -1
package/dist/core/index.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export { dismissInsight } from './insight';
|
|
|
17
17
|
export type { DismissInsightArgs, DismissInsightDeps } from './insight';
|
|
18
18
|
export { BASELINE_MIN_DAYS, BASELINE_WINDOW_DAYS, baselineAggregateFor, getBaselineMetricIds, } from './metric_metadata';
|
|
19
19
|
export type { BaselineDailyAggregate, BaselineWindowDays, } from './metric_metadata';
|
|
20
|
+
export { cleanViewFor, isQualityTable, PLAUSIBLE_RANGES, QUALITY_FLAG_COLUMNS, QUALITY_TABLES, qualityViewDdls, qualityViewFor, READING_QUALITY_COUNTS_SQL, readViewFor, } from './reading-quality';
|
|
21
|
+
export type { QualityTable, QualityView } from './reading-quality';
|
|
20
22
|
export { createSamplingResolver, fallbackSampling, minimumWindowMinutes, SAMPLING_CACHE_TTL_MS, } from './sampling';
|
|
21
23
|
export type { EffectiveSampling, SamplingResolver, SamplingResolverConfig, } from './sampling';
|
|
22
24
|
export { dropViewDdl, generateViewDdl, LOCAL_SCHEMAS, quoteQualifier, TABLE_NAMES, VIEWED_TABLES, watermarkColumnFor, } from './schemas';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAIvD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGvE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAIvD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGvE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKlE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAUnB,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA"}
|
package/dist/core/index.js
CHANGED
|
@@ -20,6 +20,9 @@ export { useAnalytics, useInsight, useTimeseries } from './hooks';
|
|
|
20
20
|
export { dismissInsight } from './insight';
|
|
21
21
|
// Baseline metadata (Sprint 5 §7).
|
|
22
22
|
export { BASELINE_MIN_DAYS, BASELINE_WINDOW_DAYS, baselineAggregateFor, getBaselineMetricIds, } from './metric_metadata';
|
|
23
|
+
// Signal-quality views (T-25, sprint6 §13). Claims read `v_{vital}_clean`;
|
|
24
|
+
// `v_{vital}_q` carries the per-reading flags for diagnostics and muted charts.
|
|
25
|
+
export { cleanViewFor, isQualityTable, PLAUSIBLE_RANGES, QUALITY_FLAG_COLUMNS, QUALITY_TABLES, qualityViewDdls, qualityViewFor, READING_QUALITY_COUNTS_SQL, readViewFor, } from './reading-quality';
|
|
23
26
|
// Effective sampling cadence (Sprint 5 T-41, principle 22). Chart data
|
|
24
27
|
// providers and gap detection should resolve cadence through this rather
|
|
25
28
|
// than reading metric_metadata directly.
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,sEAAsE;AACtE,oEAAoE;AACpE,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAOxB,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAG9D,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAOjE,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,mCAAmC;AACnC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAM1B,uEAAuE;AACvE,yEAAyE;AACzE,yCAAyC;AACzC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAOnB,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAGlB,sEAAsE;AACtE,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAuB5E,2EAA2E;AAC3E,6DAA6D;AAC7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,sEAAsE;AACtE,oEAAoE;AACpE,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAOxB,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAG9D,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAOjE,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,mCAAmC;AACnC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAM1B,2EAA2E;AAC3E,gFAAgF;AAChF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAG1B,uEAAuE;AACvE,yEAAyE;AACzE,yCAAyC;AACzC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAOnB,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAGlB,sEAAsE;AACtE,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAuB5E,2EAA2E;AAC3E,6DAA6D;AAC7D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal-quality flags and clean-read views (sprint6 spec §13, T-25).
|
|
3
|
+
*
|
|
4
|
+
* Alpha ships processed metrics, not raw firmware values: a user must never
|
|
5
|
+
* see a claim computed from a reading the ring could not honestly have taken
|
|
6
|
+
* — a temperature from a ring on the nightstand, a 10x Android decode, an
|
|
7
|
+
* SpO2 taken mid-gesture, one 190 bpm spike between two 60s.
|
|
8
|
+
*
|
|
9
|
+
* Two view layers per vital, on top of the `v_{table}` union views:
|
|
10
|
+
*
|
|
11
|
+
* v_{table}_q every reading + its flags (`worn`, `warm_up`, `still`,
|
|
12
|
+
* `plausible`, and `spike` / `scale_suspect` where they
|
|
13
|
+
* apply). Diagnostics read this.
|
|
14
|
+
* v_{table}_clean same columns as `v_{table}`, dirty readings removed.
|
|
15
|
+
* Baselines, rules, verdicts and narratives read this —
|
|
16
|
+
* the §13 consume rule.
|
|
17
|
+
*
|
|
18
|
+
* Why views and not flag columns written at ingest (§13a says "computed once
|
|
19
|
+
* at sync"):
|
|
20
|
+
* - Most flags need neighbours. A spike is judged against the readings
|
|
21
|
+
* either side; warm-up against the previous temperature. Sync is delta and
|
|
22
|
+
* rows are insert-only, so the neighbour that decides a flag often arrives
|
|
23
|
+
* in a LATER sync than the reading it decides.
|
|
24
|
+
* - Columns need a migration locally AND an ALTER on the remote Iceberg
|
|
25
|
+
* tables, which the device cannot issue; a local-only column breaks the
|
|
26
|
+
* `SELECT *` union in `v_{table}`.
|
|
27
|
+
* - Plausibility is a pure function of the value, so computing it at read
|
|
28
|
+
* time gives the same answer ingest would.
|
|
29
|
+
*
|
|
30
|
+
* Excluded readings are flagged, never deleted: the raw row stays in
|
|
31
|
+
* `v_{table}` for charts (which may mute or omit them) and diagnostics.
|
|
32
|
+
*
|
|
33
|
+
* The ring reports no wear signal, so `worn` comes from temperature: a
|
|
34
|
+
* reading below 30 C is ambient, not skin. A vital is judged by the latest
|
|
35
|
+
* temperature at or before it, and only if that temperature is recent — with
|
|
36
|
+
* no recent evidence the reading is assumed worn, because absence of a
|
|
37
|
+
* temperature is not evidence the ring was off.
|
|
38
|
+
*/
|
|
39
|
+
export declare const QUALITY_TABLES: readonly ["heart_rate", "hrv", "spo2", "temperature"];
|
|
40
|
+
export type QualityTable = (typeof QUALITY_TABLES)[number];
|
|
41
|
+
/** §13b clamps, inclusive. Outside ⇒ `plausible = false`. */
|
|
42
|
+
export declare const PLAUSIBLE_RANGES: {
|
|
43
|
+
readonly temp_c: readonly [30, 43];
|
|
44
|
+
readonly spo2: readonly [70, 100];
|
|
45
|
+
readonly bpm: readonly [30, 220];
|
|
46
|
+
readonly hrv_ms: readonly [5, 200];
|
|
47
|
+
};
|
|
48
|
+
/** Below this the ring is reading ambient air, not skin. */
|
|
49
|
+
export declare const WEAR_TEMP_MIN_C = 30;
|
|
50
|
+
/** How long a temperature reading counts as wear evidence for later vitals. */
|
|
51
|
+
export declare const WEAR_EVIDENCE_MINUTES = 60;
|
|
52
|
+
/** §13c: discard the first 10 minutes after the ring goes back on. */
|
|
53
|
+
export declare const WARM_UP_MINUTES = 10;
|
|
54
|
+
/** Same "still" test as rule context `resting` and the D-G resting metrics. */
|
|
55
|
+
export declare const STILL_WINDOW_MINUTES = 15;
|
|
56
|
+
/** §13c: a reading this far from BOTH neighbours is a single-slot spike. */
|
|
57
|
+
export declare const SPIKE_DELTA_BPM = 40;
|
|
58
|
+
/** Neighbours further apart than this are a gap, not neighbours. */
|
|
59
|
+
export declare const SPIKE_NEIGHBOUR_MINUTES = 60;
|
|
60
|
+
/** Flag columns each `_q` view adds, in order. The `_clean` view drops them. */
|
|
61
|
+
export declare const QUALITY_FLAG_COLUMNS: Readonly<Record<QualityTable, readonly string[]>>;
|
|
62
|
+
export declare function isQualityTable(table: string): table is QualityTable;
|
|
63
|
+
export declare function qualityViewFor(table: QualityTable): string;
|
|
64
|
+
export declare function cleanViewFor(table: QualityTable): string;
|
|
65
|
+
/**
|
|
66
|
+
* The view a claim-producing query reads for `table`: the clean view for a
|
|
67
|
+
* vital, the plain union view for everything else.
|
|
68
|
+
*/
|
|
69
|
+
export declare function readViewFor(table: string): string;
|
|
70
|
+
export interface QualityView {
|
|
71
|
+
name: string;
|
|
72
|
+
sql: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Every quality view, in creation order (each reads only earlier ones and
|
|
76
|
+
* the `v_{table}` union views). They carry no tenant literal — the union
|
|
77
|
+
* views underneath already bake it in — so they are recreated alongside them
|
|
78
|
+
* on every attach and need no context.
|
|
79
|
+
*/
|
|
80
|
+
export declare function qualityViewDdls(): QualityView[];
|
|
81
|
+
/** Reverse creation order, so no view is dropped while another reads it. */
|
|
82
|
+
export declare function qualityViewNames(): string[];
|
|
83
|
+
/**
|
|
84
|
+
* Diagnostic count of excluded readings per vital and reason (§13d: a
|
|
85
|
+
* `scale_suspect` temperature surfaces here, never on a user-facing
|
|
86
|
+
* surface). Binds `$userId`, `$brand`, `$familyId`, `$days`. Counts are
|
|
87
|
+
* BIGINT. `moving` is reported for every vital but gates only SpO2 and HRV.
|
|
88
|
+
*/
|
|
89
|
+
export declare const READING_QUALITY_COUNTS_SQL: string;
|
|
90
|
+
//# sourceMappingURL=reading-quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading-quality.d.ts","sourceRoot":"","sources":["../../src/core/reading-quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,eAAO,MAAM,cAAc,uDAAyF,CAAA;AACpH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAA;AAEV,4DAA4D;AAC5D,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,sEAAsE;AACtE,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,4EAA4E;AAC5E,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAKlF,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AA2ID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CAM/C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAiBD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAKhB,CAAA"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal-quality flags and clean-read views (sprint6 spec §13, T-25).
|
|
3
|
+
*
|
|
4
|
+
* Alpha ships processed metrics, not raw firmware values: a user must never
|
|
5
|
+
* see a claim computed from a reading the ring could not honestly have taken
|
|
6
|
+
* — a temperature from a ring on the nightstand, a 10x Android decode, an
|
|
7
|
+
* SpO2 taken mid-gesture, one 190 bpm spike between two 60s.
|
|
8
|
+
*
|
|
9
|
+
* Two view layers per vital, on top of the `v_{table}` union views:
|
|
10
|
+
*
|
|
11
|
+
* v_{table}_q every reading + its flags (`worn`, `warm_up`, `still`,
|
|
12
|
+
* `plausible`, and `spike` / `scale_suspect` where they
|
|
13
|
+
* apply). Diagnostics read this.
|
|
14
|
+
* v_{table}_clean same columns as `v_{table}`, dirty readings removed.
|
|
15
|
+
* Baselines, rules, verdicts and narratives read this —
|
|
16
|
+
* the §13 consume rule.
|
|
17
|
+
*
|
|
18
|
+
* Why views and not flag columns written at ingest (§13a says "computed once
|
|
19
|
+
* at sync"):
|
|
20
|
+
* - Most flags need neighbours. A spike is judged against the readings
|
|
21
|
+
* either side; warm-up against the previous temperature. Sync is delta and
|
|
22
|
+
* rows are insert-only, so the neighbour that decides a flag often arrives
|
|
23
|
+
* in a LATER sync than the reading it decides.
|
|
24
|
+
* - Columns need a migration locally AND an ALTER on the remote Iceberg
|
|
25
|
+
* tables, which the device cannot issue; a local-only column breaks the
|
|
26
|
+
* `SELECT *` union in `v_{table}`.
|
|
27
|
+
* - Plausibility is a pure function of the value, so computing it at read
|
|
28
|
+
* time gives the same answer ingest would.
|
|
29
|
+
*
|
|
30
|
+
* Excluded readings are flagged, never deleted: the raw row stays in
|
|
31
|
+
* `v_{table}` for charts (which may mute or omit them) and diagnostics.
|
|
32
|
+
*
|
|
33
|
+
* The ring reports no wear signal, so `worn` comes from temperature: a
|
|
34
|
+
* reading below 30 C is ambient, not skin. A vital is judged by the latest
|
|
35
|
+
* temperature at or before it, and only if that temperature is recent — with
|
|
36
|
+
* no recent evidence the reading is assumed worn, because absence of a
|
|
37
|
+
* temperature is not evidence the ring was off.
|
|
38
|
+
*/
|
|
39
|
+
export const QUALITY_TABLES = ['heart_rate', 'hrv', 'spo2', 'temperature'];
|
|
40
|
+
/** §13b clamps, inclusive. Outside ⇒ `plausible = false`. */
|
|
41
|
+
export const PLAUSIBLE_RANGES = {
|
|
42
|
+
temp_c: [30, 43],
|
|
43
|
+
spo2: [70, 100],
|
|
44
|
+
bpm: [30, 220],
|
|
45
|
+
hrv_ms: [5, 200],
|
|
46
|
+
};
|
|
47
|
+
/** Below this the ring is reading ambient air, not skin. */
|
|
48
|
+
export const WEAR_TEMP_MIN_C = 30;
|
|
49
|
+
/** How long a temperature reading counts as wear evidence for later vitals. */
|
|
50
|
+
export const WEAR_EVIDENCE_MINUTES = 60;
|
|
51
|
+
/** §13c: discard the first 10 minutes after the ring goes back on. */
|
|
52
|
+
export const WARM_UP_MINUTES = 10;
|
|
53
|
+
/** Same "still" test as rule context `resting` and the D-G resting metrics. */
|
|
54
|
+
export const STILL_WINDOW_MINUTES = 15;
|
|
55
|
+
/** §13c: a reading this far from BOTH neighbours is a single-slot spike. */
|
|
56
|
+
export const SPIKE_DELTA_BPM = 40;
|
|
57
|
+
/** Neighbours further apart than this are a gap, not neighbours. */
|
|
58
|
+
export const SPIKE_NEIGHBOUR_MINUTES = 60;
|
|
59
|
+
/** Flag columns each `_q` view adds, in order. The `_clean` view drops them. */
|
|
60
|
+
export const QUALITY_FLAG_COLUMNS = {
|
|
61
|
+
heart_rate: ['spike', 'worn', 'warm_up', 'still', 'plausible', 'clean'],
|
|
62
|
+
hrv: ['worn', 'warm_up', 'still', 'plausible', 'hrv_clean', 'stress_clean'],
|
|
63
|
+
spo2: ['worn', 'warm_up', 'still', 'plausible', 'clean'],
|
|
64
|
+
temperature: ['worn', 'warm_up', 'still', 'plausible', 'scale_suspect', 'clean'],
|
|
65
|
+
};
|
|
66
|
+
export function isQualityTable(table) {
|
|
67
|
+
return QUALITY_TABLES.includes(table);
|
|
68
|
+
}
|
|
69
|
+
export function qualityViewFor(table) {
|
|
70
|
+
return `v_${table}_q`;
|
|
71
|
+
}
|
|
72
|
+
export function cleanViewFor(table) {
|
|
73
|
+
return `v_${table}_clean`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The view a claim-producing query reads for `table`: the clean view for a
|
|
77
|
+
* vital, the plain union view for everything else.
|
|
78
|
+
*/
|
|
79
|
+
export function readViewFor(table) {
|
|
80
|
+
return isQualityTable(table) ? cleanViewFor(table) : `v_${table}`;
|
|
81
|
+
}
|
|
82
|
+
const WEAR_VIEW = 'v_wear';
|
|
83
|
+
const [TEMP_MIN, TEMP_MAX] = PLAUSIBLE_RANGES.temp_c;
|
|
84
|
+
const [SPO2_MIN, SPO2_MAX] = PLAUSIBLE_RANGES.spo2;
|
|
85
|
+
const [BPM_MIN, BPM_MAX] = PLAUSIBLE_RANGES.bpm;
|
|
86
|
+
const [HRV_MIN, HRV_MAX] = PLAUSIBLE_RANGES.hrv_ms;
|
|
87
|
+
const DEVICE_WINDOW = 'PARTITION BY user_id, brand, family_id, device_id ORDER BY ts';
|
|
88
|
+
/**
|
|
89
|
+
* Per temperature reading: is the ring on, and is this the first on-wrist
|
|
90
|
+
* reading after an off-wrist one (the warm-up onset)? The very first reading
|
|
91
|
+
* of a device is not an onset — nothing says it was just put on.
|
|
92
|
+
*/
|
|
93
|
+
function wearViewDdl() {
|
|
94
|
+
return `CREATE OR REPLACE VIEW ${WEAR_VIEW} AS
|
|
95
|
+
SELECT user_id, brand, family_id, device_id, ts,
|
|
96
|
+
temp_c >= ${WEAR_TEMP_MIN_C} AS on_wrist,
|
|
97
|
+
COALESCE(temp_c >= ${WEAR_TEMP_MIN_C}
|
|
98
|
+
AND LAG(temp_c) OVER (${DEVICE_WINDOW}) < ${WEAR_TEMP_MIN_C}, FALSE) AS onset
|
|
99
|
+
FROM v_temperature;`;
|
|
100
|
+
}
|
|
101
|
+
/** Latest wear evidence at or before each reading, same device. */
|
|
102
|
+
const WEAR_JOIN = `ASOF LEFT JOIN ${WEAR_VIEW} w
|
|
103
|
+
ON w.user_id = m.user_id AND w.brand = m.brand
|
|
104
|
+
AND w.family_id = m.family_id AND w.device_id = m.device_id
|
|
105
|
+
AND m.ts >= w.ts`;
|
|
106
|
+
const WORN = `CASE WHEN w.ts IS NULL OR w.ts < m.ts - INTERVAL ${WEAR_EVIDENCE_MINUTES} MINUTE
|
|
107
|
+
THEN TRUE ELSE w.on_wrist END`;
|
|
108
|
+
const WARM_UP = `COALESCE(w.onset AND m.ts < w.ts + INTERVAL ${WARM_UP_MINUTES} MINUTE, FALSE)`;
|
|
109
|
+
/** Tenant-scoped like the rules' `resting` join, not device-scoped. */
|
|
110
|
+
const STILL = `NOT EXISTS (
|
|
111
|
+
SELECT 1 FROM v_activity a
|
|
112
|
+
WHERE a.user_id = m.user_id AND a.brand = m.brand AND a.family_id = m.family_id
|
|
113
|
+
AND a.steps > 0
|
|
114
|
+
AND a.ts >= m.ts - INTERVAL ${STILL_WINDOW_MINUTES} MINUTE
|
|
115
|
+
AND a.ts < m.ts + INTERVAL ${STILL_WINDOW_MINUTES} MINUTE)`;
|
|
116
|
+
function sharedFlags() {
|
|
117
|
+
return `${WORN} AS worn,
|
|
118
|
+
${WARM_UP} AS warm_up,
|
|
119
|
+
${STILL} AS still`;
|
|
120
|
+
}
|
|
121
|
+
function heartRateQDdl() {
|
|
122
|
+
// Spike needs both neighbours present and close; an edge reading or one
|
|
123
|
+
// next to a gap cannot be judged and is kept. A step change (60 → 110 →
|
|
124
|
+
// 120) is not a spike: the second reading agrees with the first.
|
|
125
|
+
return `CREATE OR REPLACE VIEW ${qualityViewFor('heart_rate')} AS
|
|
126
|
+
SELECT *, COALESCE(worn AND NOT warm_up AND plausible AND NOT spike, FALSE) AS clean
|
|
127
|
+
FROM (
|
|
128
|
+
SELECT m.*, ${sharedFlags()},
|
|
129
|
+
COALESCE(m.bpm BETWEEN ${BPM_MIN} AND ${BPM_MAX}, FALSE) AS plausible
|
|
130
|
+
FROM (
|
|
131
|
+
SELECT *, COALESCE(
|
|
132
|
+
LAG(ts) OVER n >= ts - INTERVAL ${SPIKE_NEIGHBOUR_MINUTES} MINUTE
|
|
133
|
+
AND LEAD(ts) OVER n <= ts + INTERVAL ${SPIKE_NEIGHBOUR_MINUTES} MINUTE
|
|
134
|
+
AND abs(bpm - LAG(bpm) OVER n) >= ${SPIKE_DELTA_BPM}
|
|
135
|
+
AND abs(bpm - LEAD(bpm) OVER n) >= ${SPIKE_DELTA_BPM}, FALSE) AS spike
|
|
136
|
+
FROM v_heart_rate
|
|
137
|
+
WINDOW n AS (${DEVICE_WINDOW})
|
|
138
|
+
) m
|
|
139
|
+
${WEAR_JOIN}
|
|
140
|
+
) f;`;
|
|
141
|
+
}
|
|
142
|
+
function spo2QDdl() {
|
|
143
|
+
// Motion corrupts the optical read, so a moving SpO2 is excluded outright.
|
|
144
|
+
return `CREATE OR REPLACE VIEW ${qualityViewFor('spo2')} AS
|
|
145
|
+
SELECT *, COALESCE(worn AND NOT warm_up AND plausible AND still, FALSE) AS clean
|
|
146
|
+
FROM (
|
|
147
|
+
SELECT m.*, ${sharedFlags()},
|
|
148
|
+
COALESCE(m.spo2 BETWEEN ${SPO2_MIN} AND ${SPO2_MAX}, FALSE) AS plausible
|
|
149
|
+
FROM v_spo2 m
|
|
150
|
+
${WEAR_JOIN}
|
|
151
|
+
) f;`;
|
|
152
|
+
}
|
|
153
|
+
function temperatureQDdl() {
|
|
154
|
+
// Android 10x guard: a value that only lands in range when divided by ten
|
|
155
|
+
// is flagged, never divided. Corrected data is fabricated data.
|
|
156
|
+
return `CREATE OR REPLACE VIEW ${qualityViewFor('temperature')} AS
|
|
157
|
+
SELECT *, COALESCE(worn AND NOT warm_up AND plausible, FALSE) AS clean
|
|
158
|
+
FROM (
|
|
159
|
+
SELECT m.*, ${sharedFlags()},
|
|
160
|
+
COALESCE(m.temp_c BETWEEN ${TEMP_MIN} AND ${TEMP_MAX}, FALSE) AS plausible,
|
|
161
|
+
COALESCE(m.temp_c > ${TEMP_MAX}
|
|
162
|
+
AND m.temp_c / 10 BETWEEN ${TEMP_MIN} AND ${TEMP_MAX}, FALSE) AS scale_suspect
|
|
163
|
+
FROM v_temperature m
|
|
164
|
+
${WEAR_JOIN}
|
|
165
|
+
) f;`;
|
|
166
|
+
}
|
|
167
|
+
function hrvQDdl() {
|
|
168
|
+
// One row carries two vitals with different gates, so cleanliness is per
|
|
169
|
+
// column. HRV: clamp + still (§13c). Stress: no clamp, but an `active`
|
|
170
|
+
// reading is masked from alerting and tense-day counts (§13c) — the raw
|
|
171
|
+
// raster still shows it, reading `v_hrv`. HRV 0 is below the 5 ms clamp:
|
|
172
|
+
// the firmware reports it when RR variance is under its floor, which is a
|
|
173
|
+
// real observation of "unmeasurable", not a measurement.
|
|
174
|
+
return `CREATE OR REPLACE VIEW ${qualityViewFor('hrv')} AS
|
|
175
|
+
SELECT *,
|
|
176
|
+
COALESCE(hrv_ms IS NOT NULL AND worn AND NOT warm_up AND plausible AND still, FALSE) AS hrv_clean,
|
|
177
|
+
COALESCE(stress IS NOT NULL AND worn AND NOT warm_up AND still, FALSE) AS stress_clean
|
|
178
|
+
FROM (
|
|
179
|
+
SELECT m.*, ${sharedFlags()},
|
|
180
|
+
COALESCE(m.hrv_ms BETWEEN ${HRV_MIN} AND ${HRV_MAX}, FALSE) AS plausible
|
|
181
|
+
FROM v_hrv m
|
|
182
|
+
${WEAR_JOIN}
|
|
183
|
+
) f;`;
|
|
184
|
+
}
|
|
185
|
+
function cleanViewDdl(table) {
|
|
186
|
+
const exclude = `EXCLUDE (${QUALITY_FLAG_COLUMNS[table].join(', ')})`;
|
|
187
|
+
if (table === 'hrv') {
|
|
188
|
+
return `CREATE OR REPLACE VIEW ${cleanViewFor('hrv')} AS
|
|
189
|
+
SELECT * ${exclude}
|
|
190
|
+
REPLACE (CASE WHEN hrv_clean THEN hrv_ms END AS hrv_ms,
|
|
191
|
+
CASE WHEN stress_clean THEN stress END AS stress)
|
|
192
|
+
FROM ${qualityViewFor('hrv')}
|
|
193
|
+
WHERE hrv_clean OR stress_clean;`;
|
|
194
|
+
}
|
|
195
|
+
return `CREATE OR REPLACE VIEW ${cleanViewFor(table)} AS
|
|
196
|
+
SELECT * ${exclude} FROM ${qualityViewFor(table)} WHERE clean;`;
|
|
197
|
+
}
|
|
198
|
+
const Q_DDL = {
|
|
199
|
+
heart_rate: heartRateQDdl,
|
|
200
|
+
hrv: hrvQDdl,
|
|
201
|
+
spo2: spo2QDdl,
|
|
202
|
+
temperature: temperatureQDdl,
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Every quality view, in creation order (each reads only earlier ones and
|
|
206
|
+
* the `v_{table}` union views). They carry no tenant literal — the union
|
|
207
|
+
* views underneath already bake it in — so they are recreated alongside them
|
|
208
|
+
* on every attach and need no context.
|
|
209
|
+
*/
|
|
210
|
+
export function qualityViewDdls() {
|
|
211
|
+
return [
|
|
212
|
+
{ name: WEAR_VIEW, sql: wearViewDdl() },
|
|
213
|
+
...QUALITY_TABLES.map(t => ({ name: qualityViewFor(t), sql: Q_DDL[t]() })),
|
|
214
|
+
...QUALITY_TABLES.map(t => ({ name: cleanViewFor(t), sql: cleanViewDdl(t) })),
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
/** Reverse creation order, so no view is dropped while another reads it. */
|
|
218
|
+
export function qualityViewNames() {
|
|
219
|
+
return qualityViewDdls().map(v => v.name).reverse();
|
|
220
|
+
}
|
|
221
|
+
function countsFor(table, excluded, extra = {}) {
|
|
222
|
+
return `SELECT '${table}' AS metric,
|
|
223
|
+
COUNT(*) AS total,
|
|
224
|
+
COUNT(*) FILTER (WHERE ${excluded}) AS excluded,
|
|
225
|
+
COUNT(*) FILTER (WHERE NOT worn) AS off_wrist,
|
|
226
|
+
COUNT(*) FILTER (WHERE warm_up) AS warm_up,
|
|
227
|
+
COUNT(*) FILTER (WHERE NOT plausible) AS implausible,
|
|
228
|
+
COUNT(*) FILTER (WHERE NOT still) AS moving,
|
|
229
|
+
${extra.spike ? 'COUNT(*) FILTER (WHERE spike)' : 'CAST(0 AS BIGINT)'} AS spike,
|
|
230
|
+
${extra.scale ? 'COUNT(*) FILTER (WHERE scale_suspect)' : 'CAST(0 AS BIGINT)'} AS scale_suspect
|
|
231
|
+
FROM ${qualityViewFor(table)}
|
|
232
|
+
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
233
|
+
AND ts > now() - (INTERVAL 1 DAY) * CAST($days AS BIGINT)`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Diagnostic count of excluded readings per vital and reason (§13d: a
|
|
237
|
+
* `scale_suspect` temperature surfaces here, never on a user-facing
|
|
238
|
+
* surface). Binds `$userId`, `$brand`, `$familyId`, `$days`. Counts are
|
|
239
|
+
* BIGINT. `moving` is reported for every vital but gates only SpO2 and HRV.
|
|
240
|
+
*/
|
|
241
|
+
export const READING_QUALITY_COUNTS_SQL = [
|
|
242
|
+
countsFor('heart_rate', 'NOT clean', { spike: true }),
|
|
243
|
+
countsFor('hrv', 'NOT hrv_clean'),
|
|
244
|
+
countsFor('spo2', 'NOT clean'),
|
|
245
|
+
countsFor('temperature', 'NOT clean', { scale: true }),
|
|
246
|
+
].join('\nUNION ALL\n');
|
|
247
|
+
//# sourceMappingURL=reading-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading-quality.js","sourceRoot":"","sources":["../../src/core/reading-quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"warehouse.d.ts","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,WAAW,EAEX,WAAW,EACZ,MAAM,SAAS,CAAA;AAiBhB,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX,WAAW,EAAE,WAAW,CAAA;IACxB,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,cAAc,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA0FvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAaf;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAwDD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE;IACH,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/D"}
|
package/dist/core/warehouse.js
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
* <phase>, cause)`.
|
|
34
34
|
*/
|
|
35
35
|
import { AnalyticsError } from './errors';
|
|
36
|
+
import { qualityViewDdls, qualityViewNames } from './reading-quality';
|
|
36
37
|
import { dropViewDdl, generateViewDdl, VIEWED_TABLES } from './schemas';
|
|
37
38
|
/**
|
|
38
39
|
* Peel one layer of `AnalyticsError('query_failed')` off engine-wrapped
|
|
@@ -266,6 +267,17 @@ export async function createViews(db, ctx) {
|
|
|
266
267
|
throw new AnalyticsError('attach_failed', `CREATE VIEW v_${table} failed`, rootCause(cause));
|
|
267
268
|
}
|
|
268
269
|
}
|
|
270
|
+
// Signal-quality views (T-25) read the union views above, so they come
|
|
271
|
+
// after them. A missing clean view would fail every rule and baseline, so
|
|
272
|
+
// it fails the attach just as loudly.
|
|
273
|
+
for (const view of qualityViewDdls()) {
|
|
274
|
+
try {
|
|
275
|
+
await db.execute(view.sql);
|
|
276
|
+
}
|
|
277
|
+
catch (cause) {
|
|
278
|
+
throw new AnalyticsError('attach_failed', `CREATE VIEW ${view.name} failed`, rootCause(cause));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
269
281
|
}
|
|
270
282
|
/**
|
|
271
283
|
* Drop every union view. Idempotent (`DROP VIEW IF EXISTS`), and tolerant
|
|
@@ -274,6 +286,15 @@ export async function createViews(db, ctx) {
|
|
|
274
286
|
* in `detaching`.
|
|
275
287
|
*/
|
|
276
288
|
export async function dropViews(db) {
|
|
289
|
+
// Dependents first: the quality views read the union views.
|
|
290
|
+
for (const name of qualityViewNames()) {
|
|
291
|
+
try {
|
|
292
|
+
await db.execute(`DROP VIEW IF EXISTS ${name};`);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// Best-effort, as below.
|
|
296
|
+
}
|
|
297
|
+
}
|
|
277
298
|
for (const table of VIEWED_TABLES) {
|
|
278
299
|
try {
|
|
279
300
|
await db.execute(dropViewDdl(table));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"warehouse.js","sourceRoot":"","sources":["../../src/core/warehouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAwB,IAAI,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAwB,IAAI,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAe3C,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAiDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA2C5D;AAgBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,mBAAmB,CAAA;AAErD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,CAwDpD;AAuLD;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAA;AAE7C,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
package/dist/rules/compiler.js
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
* `local.{table}` or `r2.default.{table}` (principle 19).
|
|
35
35
|
*/
|
|
36
36
|
import { METRIC_METADATA } from '../core/metric_metadata';
|
|
37
|
+
import { readViewFor } from '../core/reading-quality';
|
|
37
38
|
import { RuleValidationError, } from './schema';
|
|
38
39
|
/** Sanitize an identifier for direct interpolation. */
|
|
39
40
|
// PLACEHOLDER_RE carries `g` and is driven with `.exec`; the loop in
|
|
@@ -183,7 +184,9 @@ export function compileRule(rule) {
|
|
|
183
184
|
const meta = METRIC_METADATA[rule.metric];
|
|
184
185
|
const rawTable = meta.table;
|
|
185
186
|
const column = sanitizeIdent(meta.column);
|
|
186
|
-
|
|
187
|
+
// A rule is a claim, so it reads the vital's clean view (T-25 consume
|
|
188
|
+
// rule): a clamped, spiked or off-wrist reading can never fire an alert.
|
|
189
|
+
const view = readViewFor(sanitizeIdent(rawTable));
|
|
187
190
|
if (rule.rawSql) {
|
|
188
191
|
return compileRawSql(rule, rule.rawSql);
|
|
189
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/rules/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline-compute.d.ts","sourceRoot":"","sources":["../../src/sync/baseline-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"baseline-compute.d.ts","sourceRoot":"","sources":["../../src/sync/baseline-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAyBlD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,eAAe,CAAA;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC7B,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,CAiLR;AA4CD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,UAAU,EAAE,CACV,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,kBAAkB,EAC9B,GAAG,EAAE,sBAAsB,KACxB,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,6DAA6D;IAC7D,UAAU,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAC5E;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,GAC5B,gBAAgB,CAoGlB"}
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { AnalyticsError } from '../core/errors';
|
|
25
25
|
import { BASELINE_MIN_DAYS, BASELINE_WINDOW_DAYS, baselineAggregateFor, getBaselineMetricIds, METRIC_METADATA, } from '../core/metric_metadata';
|
|
26
|
+
import { readViewFor } from '../core/reading-quality';
|
|
26
27
|
/**
|
|
27
28
|
* Build the day-first aggregate SQL for one (metric, window).
|
|
28
29
|
*
|
|
@@ -34,7 +35,9 @@ export function buildBaselineSql(metric, _windowDays) {
|
|
|
34
35
|
const meta = METRIC_METADATA[metric];
|
|
35
36
|
const aggregate = baselineAggregateFor(metric);
|
|
36
37
|
const column = meta.column;
|
|
37
|
-
|
|
38
|
+
// Baselines read clean readings only (T-25): a spike or an off-wrist
|
|
39
|
+
// temperature must not move "your usual".
|
|
40
|
+
const view = readViewFor(meta.table);
|
|
38
41
|
// DuckDB cannot bind a parameter inside an INTERVAL literal, but it can
|
|
39
42
|
// multiply a static unit interval by a bound integer. Same trick the
|
|
40
43
|
// rules compiler uses — including, until now, the same defect.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline-compute.js","sourceRoot":"","sources":["../../src/sync/baseline-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EAEpB,oBAAoB,EACpB,eAAe,GAEhB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"baseline-compute.js","sourceRoot":"","sources":["../../src/sync/baseline-compute.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export const detectAnomalyInputSchema = z.object({
|
|
|
9
9
|
const METRIC_SPECS = {
|
|
10
10
|
hrv_ms: {
|
|
11
11
|
sql: lookbackDays => `SELECT date_trunc('day', ts)::VARCHAR AS day, AVG(hrv_ms)::DOUBLE AS value
|
|
12
|
-
FROM
|
|
12
|
+
FROM v_hrv_clean
|
|
13
13
|
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
14
14
|
AND hrv_ms IS NOT NULL
|
|
15
15
|
AND ts >= now() - INTERVAL (${lookbackDays}) DAY
|
|
@@ -9,7 +9,7 @@ export const compareTrendInputSchema = z.object({
|
|
|
9
9
|
const METRIC_SPECS = {
|
|
10
10
|
hrv_ms: {
|
|
11
11
|
sql: (windowDays, offsetDays) => `SELECT AVG(hrv_ms)::DOUBLE AS value
|
|
12
|
-
FROM
|
|
12
|
+
FROM v_hrv_clean
|
|
13
13
|
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
14
14
|
AND hrv_ms IS NOT NULL
|
|
15
15
|
AND ts >= now() - INTERVAL (${windowDays + offsetDays}) DAY
|
package/dist/tools/impls/hrv.js
CHANGED
|
@@ -6,7 +6,7 @@ export const getHRVInputSchema = z.object({
|
|
|
6
6
|
});
|
|
7
7
|
export const getHRV = async (input, ctx) => {
|
|
8
8
|
const rows = await ctx.analytics.execute(`SELECT date_trunc('day', ts)::VARCHAR AS day, AVG(hrv_ms)::DOUBLE AS avg_hrv
|
|
9
|
-
FROM
|
|
9
|
+
FROM v_hrv_clean
|
|
10
10
|
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
11
11
|
AND ts >= now() - INTERVAL (CAST($days AS BIGINT)) DAY
|
|
12
12
|
AND hrv_ms IS NOT NULL
|
package/dist/tools/impls/spo2.js
CHANGED
|
@@ -39,7 +39,7 @@ export const getSpO2 = async (input, ctx) => {
|
|
|
39
39
|
AVG(m.spo2)::DOUBLE AS avg_spo2,
|
|
40
40
|
MIN(m.spo2)::DOUBLE AS min_spo2,
|
|
41
41
|
COUNT(*) FILTER (WHERE m.spo2 < ${LOW_MOMENT_THRESHOLD})::INTEGER AS low_moment_count
|
|
42
|
-
FROM
|
|
42
|
+
FROM v_spo2_clean m
|
|
43
43
|
INNER JOIN v_sleep_session s
|
|
44
44
|
ON s.user_id = m.user_id
|
|
45
45
|
AND s.brand = m.brand
|
|
@@ -25,7 +25,7 @@ export const getTemperature = async (input, ctx) => {
|
|
|
25
25
|
AVG(temp_c)::DOUBLE AS avg_temp,
|
|
26
26
|
MAX(temp_c)::DOUBLE AS hi_temp,
|
|
27
27
|
MIN(temp_c)::DOUBLE AS lo_temp
|
|
28
|
-
FROM
|
|
28
|
+
FROM v_temperature_clean
|
|
29
29
|
WHERE user_id = $userId AND brand = $brand AND family_id = $familyId
|
|
30
30
|
AND ts >= now() - INTERVAL (CAST($days AS BIGINT)) DAY
|
|
31
31
|
AND temp_c IS NOT NULL
|