Skip to content

feat(events): 체온 타입 + 분석 체온 추이 — 측정값은 홈에서 더하지 않는다 - #117

Merged
eigger merged 5 commits into
masterfrom
feat/temperature
Sep 14, 2026
Merged

eigger merged 5 commits into
masterfrom
feat/temperature

Conversation

@eigger

@eigger eigger commented Sep 14, 2026

Copy link
Copy Markdown
Owner

아플 때 아침·저녁으로 체온을 재는데 적을 자리가 없었다. 체중과 같은 결의 측정값 타입이다. 결정은 docs/WORKPLAN.md §7.23.

무엇

  • 타입 temperature — HEALTH, °C, 아이콘 thermometer, 별칭 체온·열. 프리셋 템플릿에 체중 다음(스타터 아님). 마이그레이션 없음 (K-8). 기존 반려동물은 홈 진입 시 ensurePresetsForPet이 칩을 보충한다
  • 시트: 값 한 칸(0.1 단계, 자리표시 38.5) + 측정 방법 태그 하나(직장(항문)·귀·겨드랑이·비접촉) + 체온계는 DEVICE 제품 칩 1탭으로 productId. 관리가 위생용품을 다는 것과 같은 구조(§7.20). 타임라인 "38.5°C · 직장(항문) · 브라운 체온계"
  • 마지막 방법·기기를 그대로 다시 연다 — 체온은 하는 일이 하나라(R149의 재검토 조건). 방법만·기기만 있어도 마지막 기록으로 잡는다
  • 파서: 38.5도·38.5℃·38.5°C 한 줄 → 체온. 체온 38.5(단위 없음)도 — 체온 모양(3x.x/4x.x)만. 체온 타입이 없는 가구에서는 메모로 (K-12)
  • 홈 카드 — 측정값을 더하고 있었다: 아침 38.6 · 저녁 38.9면 "77.5°C"(체중도 두 번 재면 같았다). todaySummaryForPet이 HEALTH 타입별 마지막 양(lastQuantity·lastQuantityUnit)을 함께 내고, todayCardValueHEALTH + 양 → 마지막 값으로 가른다. 규칙은 여전히 EventCategory·ScaleType·defaultUnit 세 필드로만 (§7.17 표에 예외를 적었다)
  • 분석: 체온 추이 선 그래프 + 최근 체온 타일. 기록이 있을 때만 그린다. Y축은 데이터 범위 ±0.5. 툴팁에 측정 방법을 같이 — 방법이 섞이면 선이 거짓말할 수 있다(귀 38.2 → 직장 38.9). 방법별 선 분리는 실기록이 쌓인 뒤
  • 정상 범위 참고선·"열" 판정·방법 간 보정은 넣지 않았다 (K-16)
  • Web Bluetooth로 체온계를 직접 읽는 자동 입력은 기각 (R156) — 기기가 값을 보내는 건 이미 ApiToken 자동 입력(§3.6)으로 된다
  • docs/seed-event-types.md §4 템플릿 표가 remedy 추가 때부터 코드와 어긋나 있어 코드 기준으로 다시 썼다

리뷰 (반영 완료)

  1. 마지막 양 조회가 타입 불문 최신 100건이라 급수기 자동 입력이 많은 날 체온이 밀려 다시 합계로 → HEALTH로 좁힘
  2. 열 10일째가 10°C로 저장 → 체온 모양만 값으로

확인

  • API 308개·웹 293개 테스트 통과, tsc·lint 통과
  • 실기 확인은 못 했다 (작업 기기에 DB 없음). 배포 후 볼 것: 홈에 체온 칩이 보충되는지 → 칩 → 방법 태그·체온계 칩·38.5 → 저장 → 홈 카드가 마지막 값인지 → 다시 열었을 때 방법·기기가 그대로인지 → 분석 체온 추이 + 툴팁 방법

🤖 Generated with Claude Code

eigger and others added 5 commits September 14, 2026 12:26
아플 때 아침·저녁으로 체온을 재는데 적을 자리가 없었다. 체중과 같은 결의 측정값 타입이다 (§7.23).

- 시스템 타입 temperature: HEALTH, °C, 별칭 체온·열, 프리셋 템플릿에 체중 다음. 마이그레이션 없음
- 시트: 체중과 같은 자리(값 한 칸, 0.1 단계, 자리표시 38.5)
- 파서: 38.5도·38.5℃·38.5°C 한 줄, "체온 38.5"(단위 없음)까지
- 홈 카드: HEALTH + 양은 측정값이라 합계가 아니라 마지막 값 — 아침·저녁 체온이 "77.5°C"로
  더해지던 것(체중도 같았다). todaySummary가 lastQuantity를 함께 낸다. 규칙은 여전히 세 필드로만
- 분석: 체온 추이 선 그래프(기록이 있을 때만) + 최근 체온. Y축은 데이터 범위 ±0.5
- 정상 범위 참고선·"열" 판정은 넣지 않는다 (K-16)
- docs/seed-event-types.md §4 템플릿 표를 코드 기준으로 다시 씀 (remedy 누락 포함)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
리뷰 2건.
- 마지막 양 조회가 타입 불문 최신 100건이라 급수기 자동 입력이 하루 100건을 넘기면 체온이
  창 밖으로 밀려 다시 합계("77.5°C")로 떨어졌다 → eventType.category HEALTH로 좁힌다
- 맨 숫자 폴백이 두 자리면 다 받아 "열 10일째"가 10°C가 됐다 → 3x.x·4x.x만. 나머지는 메모 (K-12)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 측정 방법 태그 4개(직장(항문)·귀·겨드랑이·비접촉) — 종별 차이가 아니라 방법이 여럿이다.
  한 번에 하나만(EXCLUSIVE_TAG_TYPES). 값 보정·해석은 하지 않는다 (K-16)
- 체온계는 DEVICE 제품을 productId로 — 관리가 위생용품을 다는 것과 같은 구조.
  productName은 태그 CSV(TAG_VALUED_PRODUCT_NAME_KEYS), 타임라인 "38.5°C · 직장(항문) · 체온계"
- 체온은 하는 일이 하나라 마지막 방법·기기를 그대로 다시 연다 (R149의 재검토 조건,
  LAST_TAGS_AND_PRODUCT_KEYS). 방법만·기기만 있어도 마지막 기록으로 잡는다.
  태그 타입은 제품 이름을 태그 자리에 넣지 않는다 (R150)
- 그래프 툴팁에 방법을 같이 — 방법이 섞이면 선이 거짓말할 수 있다
- Web Bluetooth 자동 입력은 기각 (R156) — ApiToken 자동 입력으로 이미 된다

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
로컬 eventDetailPrefs가 productName만 기억하고 서버 lastProductId 프리필은 prefs가 없을 때만
돌아서, 한 번 저장한 뒤로는 productId가 복원되지 않았다. 사료·영양제도 두 번째부터 칩을
다시 안 누르면 FK 없이 저장됐고(제품 "최근 기록"이 첫 건만), 체온계 자동 채움도 같은 이유로
안 됐을 것이다.

- prefs에 productId를 같이 저장·복원
- 옛 저장값(이름만)이면 서버 lastProductId로 보충 — 태그 타입은 그대로, 이름 타입은 로컬 이름과
  서버 마지막 제품 이름이 같을 때만. 이미 고른 값은 덮지 않는다

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
prefs productId 복원이 관리에도 걸려 지난 모래 갈이의 모래가 이번 양치에 자동으로 붙었다.
eventDetailFields().rememberLastProduct — 이름 타입·체온은 true, 관리·태그 타입은 false.
저장·복원·서버 보충 모두 이 플래그를 본다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@eigger
eigger merged commit 62d9958 into master Sep 14, 2026
6 checks passed
@eigger
eigger deleted the feat/temperature branch September 14, 2026 03:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant