{{ message }}
Repository navigation
fix(ycbt): label hourly SpO2 derived from heart rate as estimated (#103) - #129
Merged
Merged
Conversation
On a YCBT ring (Ale-Hop2211) the hourly SpO2 in the 05 18 composite record is a fixed function of the heart rate in the same record (304/304 records), while spot SpO2 is a real measurement logged with HR and respiration 0. The app presented the hourly values as measured. EstimatedSpo2 decides it from this ring's own history, not its family: - hourly vs spot: an SpO2 history row with a respiratory-rate history row at the identical timestamp came from a composite record; spot records log respiration 0, which is never stored, so a spot reading cannot qualify. - derived: pair hourly rows with the nearest HR history row within 2 min over the last 7 days; with >= 24 pairs, >= 12 repeated heart rates, more than one SpO2 value and no heart rate ever paired with two SpO2 values, the ring is judged to compute SpO2 from heart rate. Labelled on the Vitals card (ESTIMATED chip + note), the Today tile and the detail chart's disclaimer card, mirroring derived stress (#67). Stored data is unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Refs #103 (the "estimated" label; app-scheduled spot SpO2 stays open).
On the reporter's YCBT ring the hourly SpO2 in the
05 18record is a fixed function of heart rate (304/304 records, no exceptions), while spot SpO2 is a real measurement. The app presented the hourly values as measured.Detection, per ring rather than per family
EstimatedSpo2decides from the ring's own data, not "every YCBT ring":The record's own HR byte isn't stored, so pairing is against
05 15HR history. If those don't line up on hardware, nothing is labelled — the same as today.Surfaces
Same pattern as derived stress (#67): the ESTIMATED chip and a note on the Vitals card, an amber caption on the Today tile, and the amber disclaimer card on the detail chart. Widgets aren't labelled (they carry no estimated flag for BP/glucose either). Stored data is unchanged.
Tests
./gradlew --no-daemon testDebugUnitTest: 1538 pass, including 11 newEstimatedSpo2Testcases.Not checked on a ring.
🤖 Generated with Claude Code